Порядок специализированных шаблонов в С++

Может ли порядок, в котором появляются специализированные шаблоны в коде, изменить значение программы? Если да, то почему?

Пример:

Где-то внутри исходного кода

// specialization A
...
// specialization B
...

против

// specialization B
...
// specialization A
...

Будет ли это всегда давать тот же результат?

Ответы

Ответ 1

Пока фрагмент кода, который опирается на специализации, уже видел их, порядок не имеет значения.

Другими словами, порядок будет иметь значение с

// specialization A
// Some code where B would be a better match
// specialization B

Ответ 2

Размещение явных деклараций специализации для шаблонов функций, шаблонов классов, функций-членов шаблонов классов, статических элементов данных шаблонов классов, классов-членов шаблонов классов, шаблонов классов-членов шаблонов классов, шаблонов-членов шаблонов классов, функций-членов члена шаблоны шаблонов классов, функции-члены шаблонов-членов классов, отличных от шаблонов, шаблоны-члены-члены классов-членов шаблонов классов и т.д., а также размещение деклараций частичной специализации шаблонов классов, шаблонов классов-членов классов без шаблонов, члена класс шаблонов шаблонов классов и т.д., может повлиять на то, хорошо ли сформирована программа в соответствии с относительным позиционированием явных деклараций специализации и их точек инстанцирования в блоке перевода, как указано выше и ниже. При написании специализации будьте осторожны с ее местоположением; или сделать его компиляцией, будет таким испытанием, чтобы разжечь его самосожжение.

Просто цитируя раздел 14.7.3/7 Международного стандарта языка программирования C++

Да... это не шутка