http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57986
Bug ID: 57986 Summary: call to local "bind" template function called std::bind without "using" any namespace. Product: gcc Version: 4.8.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: yangzhe1990 at gmail dot com Source codes are attached. The compiling cmdline is: g++ numeric_utils_test.cpp -std=c++11 -o numeric_utils_test -g -pedantic -Wall -Wextra -Wconversion -lpthread I've defined a thread class, a bind function, a vector_iterator_asdf, a computation function, and the multi-thread counterpart of the same function in my own namespace. In the multi-threaded function, it calls my thread(bind(single_thread_function, params)). 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. The vector_iterator_asdf class is a iterator of multi-dimensional mathematical vectors stored in an array. It seems that <iterator> somehow depend on <functional> so that std::bind is introduced. More interesting thing is that: if I comment out the #include <algorithm> line, the compiler returns to the correct behavior. Or if I don't have any vector_iterator_asdf variables. The more weird thing is: If I don't use any vector_iterator_asdf variables, and don't #include <algorithm>, but create a temporary vector_iterator_asdf object, call one of it's method, assign the return value to some other value, the compiler behaves correctly. I don't know why <iterator>, <algorithm> and my vector_iterator_asdf class combined together could affect c++ function resolving.