Несмотря на то, что это старый вопрос, я думаю, что есть некоторые вещи, которые не были прояснены в отношении конкретных вопросов ОП, поэтому здесь мы идем.
Прежде всего: поиск, зависящий от аргумента, иобычный неквалифицированный поиск и выполняется для неквалифицированных вызовов функций и операторов.Это относится как к обычным функциям, так и к специализациям шаблонов функций.В соответствии с [3.4.2 параграфом 3] единственными исключениями являются случаи, когда обычный неквалифицированный поиск находит:
- объявление члена класса или
- объявление функции блочной области видимости, котороене является объявлением использования или
- объявлением, которое не является ни функцией, ни шаблоном функции.
Только в вышеприведенных случаях поиск, зависящий от аргумента, не выполняется.Как видите, ни один из них не применим в этом случае.
Итак, оба объявления найдены.Теперь необходимо выполнить разрешение перегрузки, чтобы выбрать наилучшую жизнеспособную функцию .Аргументы идеально соответствуют типам параметров в обоих случаях, поэтому одну перегрузку нельзя выбрать другой, исходя из лучших преобразований.Оба являются специализациями шаблонов, поэтому, в крайнем случае, частичное упорядочение шаблонов функций используется, чтобы попытаться определить, является ли один более специализированным , чем другой.Увы, шаблон в NS более специализирован для первого аргумента, а глобальный более специализирован для второго аргумента, поэтому ни один шаблон не является более специализированным, чем другой.Вывод: никакая перегрузка не может быть выбрана другим, вызов неоднозначен.
Теперь, для вашего второго вопроса, относительно определения оператора, которое закомментировано.Если вы раскомментируете это определение, в этом случае также выполняется ADL; все три перегрузки найдены по имени поиска.Опять же, все аргументы полностью соответствуют типам параметров.Отличие состоит в том, что последнее определение - это обычная операторная функция, а не шаблон.Если никакая перегрузка не может быть выбрана среди других на основе преобразований, то, если одна является нормальной функцией, а все остальные являются специализациями шаблона, предпочтение не шаблону по сравнению с другими.Вот почему в этом случае вызов больше не является двусмысленным.
Стандартные ссылки на N4140, последний черновик C ++ 14 перед публикацией, но я не думаю, что что-либо из вышеперечисленного изменилось после C++ 03.