LINUX.ORG.RU

История изменений

Исправление four_str_sam, (текущая версия) :

По 2 пункту: похоже что перестановка 2 изменяет то какую шаблонную функцию он он специализирует. Т.е. в оригинале 2 специализирует 1, а после перестановки 2 специализирует 3. При поиске подходящей функции компилятор в первую очередь рассматривает перегрузки, и только после этого специализацию (для выбранной перегрузки).

В обоих случаях перегрузкой выбирается 3, но во втором случае для 3 есть еще и подходящая специализация 2.

Note that only non-template and primary template overloads participate in overload resolution. The specializations are not overloads and are not considered. Only after the overload resolution selects the best-matching primary function template, its specializations are examined to see if one is a better match.

Исходная версия four_str_sam, :

По 2 пункту: похоже что перестановка 2 изменяет то какую функцию он он специализирует. Т.е. в оригинале 2 специализирует 1, а после перестановки 2 специализирует 3. При поиске подходящей функции компилятор в первую очередь рассматривает перегрузки, и только после этого специализацию (для выбранной перегрузки).

В обоих случаях перегрузкой выбирается 3, но во втором случае для 3 есть еще и подходящая специализация 2.