История изменений
Исправление 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.