Ответ 1
Пока фрагмент кода, который опирается на специализации, уже видел их, порядок не имеет значения.
Другими словами, порядок будет иметь значение с
// specialization A
// Some code where B would be a better match
// specialization B
Может ли порядок, в котором появляются специализированные шаблоны в коде, изменить значение программы? Если да, то почему?
Пример:
Где-то внутри исходного кода
// specialization A
...
// specialization B
...
против
// specialization B
...
// specialization A
...
Будет ли это всегда давать тот же результат?
Пока фрагмент кода, который опирается на специализации, уже видел их, порядок не имеет значения.
Другими словами, порядок будет иметь значение с
// specialization A
// Some code where B would be a better match
// specialization B
Размещение явных деклараций специализации для шаблонов функций, шаблонов классов, функций-членов шаблонов классов, статических элементов данных шаблонов классов, классов-членов шаблонов классов, шаблонов классов-членов шаблонов классов, шаблонов-членов шаблонов классов, функций-членов члена шаблоны шаблонов классов, функции-члены шаблонов-членов классов, отличных от шаблонов, шаблоны-члены-члены классов-членов шаблонов классов и т.д., а также размещение деклараций частичной специализации шаблонов классов, шаблонов классов-членов классов без шаблонов, члена класс шаблонов шаблонов классов и т.д., может повлиять на то, хорошо ли сформирована программа в соответствии с относительным позиционированием явных деклараций специализации и их точек инстанцирования в блоке перевода, как указано выше и ниже. При написании специализации будьте осторожны с ее местоположением; или сделать его компиляцией, будет таким испытанием, чтобы разжечь его самосожжение.
Просто цитируя раздел 14.7.3/7 Международного стандарта языка программирования C++
Да... это не шутка