http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48313
--- Comment #4 from Jonathan Wakely <redi at gcc dot gnu.org> 2011-03-28 14:26:35 UTC --- slightly further reduced: template<typename Functor, typename ArgTypes> inline void bind(Functor&& f, ArgTypes&& a) { } template<typename T> void func( T ) {} int main( int, char** ) { bind( func<int>, 0 ); } this is certainly not a libstdc++ bug (std::bind matches the signature require by the C++0x draft) I think the parameter is a non-deduced context, because the argument is an overload set containing one or more function templates ([temp.deduct.call p6) So I think this is actually invalid and G++ is right to reject it.