Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

STL algorithm function name resolution

I'd expect in the example bellow compiler will fail to compile the code, since it doesn't know what is "find()", which defined in std namespace in algorithm header.

However this code compiles on RHEL 5.3 with gcc 4.1.2.

What do I miss?

#include <string>    
#include <algorithm>

int main()
{
    std::string s;
    find(s.begin(), s.end(), 'a');  // should not compile
}
like image 759
dimba Avatar asked May 19 '11 08:05

dimba


1 Answers

This works due to Argument Dependent Lookup. The function-template is searched in the namespace of the arguments types. In this case, the arguments are std::string::iterator, so the function is searched in the namespace std.

like image 70
Björn Pollex Avatar answered Oct 11 '22 00:10

Björn Pollex