Подтвердить что ты не робот

Разрешение имени функции алгоритма STL

Я бы ожидал, что в следующем примере компилятор компилятора не сможет скомпилировать код, так как он не знает, что такое "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
}
4b9b3361

Ответ 1

Это работает из-за зависимого от аргумента поиска. Функциональный шаблон выполняется в пространстве имен типов аргументов. В этом случае аргументы std::string::iterator, поэтому поиск функции выполняется в пространстве имен std.