http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57986
--- Comment #6 from Jonathan Wakely <redi at gcc dot gnu.org> --- class vector_iterator_asdf : public std::iterator<std::random_access_iterator_tag, T *, std::ptrdiff_t, T *const *, T *const &> { vector_iterator_asdf has a base class defined in namespace std, therefore that is an associated namespace and so an unqualified call to bind() with an argument of type vector_iterator_asdf can find std::bind via ADL.