http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45893
--- Comment #8 from Jonathan Wakely <redi at gcc dot gnu.org> 2010-10-07 00:46:26 UTC --- The _Bind and _Bind_result ctors need to be made into templates so that they can deduce the arguments as either lvalue or rvalue references, allowing _Bound_args elements to be move-constructed if an rvalue is passed to std::bind. Two template ctors are needed, for the case where the first argument is an lvalue or an rvalue. I added a copy ctor and move ctor, allowing _Bind and _Bind_result objects to be moved The new _Bind_helper and _Bindres_helper templates are simply to avoid repeating typename _Maybe_wrap_member_pointer<typename decay<_Functor>::type>::type in the return type and body of std::bind. The call_once patch is for DR891, but is related to this PR because we use std::bind to implement call_once.