http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57986
--- Comment #4 from Jonathan Wakely <redi at gcc dot gnu.org> --- (In reply to yangzhe1990 from comment #0) > Then interesting thing > happens: If I omit a parameter to the bind function, the compiling error > message shows that std::bind was called instead of telling me it's > impossible to find the right bind function. But I don't have any "using > namespace std" in my code. Surely it's finding it via ADL, http://en.wikipedia.org/wiki/Argument-dependent_name_lookup > It seems that <iterator> somehow depend on <functional> so that std::bind is > introduced. That's allowed by the standard. Please reduce the code to something smaller, I don't believe three separate files are necessary to reproduce it.