Ответ 1
Это работает из-за зависимого от аргумента поиска. Функциональный шаблон выполняется в пространстве имен типов аргументов. В этом случае аргументы std::string::iterator
, поэтому поиск функции выполняется в пространстве имен std
.
Я бы ожидал, что в следующем примере компилятор компилятора не сможет скомпилировать код, так как он не знает, что такое "find()", который определен в пространстве имен std в заголовке алгоритма.
Однако этот код компилируется на RHEL 5.3 с помощью gcc 4.1.2.
Что мне не хватает?
#include <string>
#include <algorithm>
int main()
{
std::string s;
find(s.begin(), s.end(), 'a'); // should not compile
}
Это работает из-за зависимого от аргумента поиска. Функциональный шаблон выполняется в пространстве имен типов аргументов. В этом случае аргументы std::string::iterator
, поэтому поиск функции выполняется в пространстве имен std
.