Имеет ли значение перегрузка функций?
Это не меняет результат разрешения перегрузки, но результат name lookup ; что происходит до разрешения перегрузки.
(акцент мой)
Для имени, используемого в глобальной области (пространство имен верхнего уровня), вне какой-либо функции, класса или пространства имен, объявленного пользователем, глобальная область до использования имени :
Это означает, что для вызова func
внутри шаблонного func
может быть найден только сам (и добавлен в набор перегрузки), версия без шаблона не будет рассматриваться вообще.
Как вы уже видели, если вы измените их порядок объявления, оба значения func
будут найдены и учтены при следующем разрешении перегрузки, и будет выбран не шаблон func
(как и ожидалось).