Это не имеет ничего общего с шаблонами, но без поиска имени.
Это то, что стандарт говорит в 3.4 / 1 (поиск имени):
Поиск имени должен найтиоднозначное объявление имени (см. 10.2).Поиск имени может связывать более одного объявления с именем, если он находит имя как имя функции;говорят, что объявления образуют набор перегруженных функций (13.1).Разрешение перегрузки (13.3) происходит после успешного поиска имени.Правила доступа (пункт 11) рассматриваются только после успешного поиска имени и разрешения перегрузки функции (если применимо).
И в 3.4.1 (поиск без определения имени):
поиск имени заканчивается, как только будет найдено объявление для имени
В вашем случае f
- это неквалифицированное имя.Поиск производится в непосредственной области видимости и в пространстве имен ns2
, где находится объявление .На этом поиск имени заканчивается, и в игру вступает разрешение перегрузки: в наборе кандидатов отсутствует перегрузка, соответствующая типу аргумента std::vector<int>
, поэтому программа некорректна.