With the arity-checking I added recently we don't need the SFINAE constraints on the number of arguments to _Bind_simple's constructors.
Tested x86_64-linux, committed to trunk.
commit d78bba658af1677b873d391649ee237150b3c916 Author: Jonathan Wakely <jwak...@redhat.com> Date: Mon Nov 3 14:52:15 2014 +0000 * include/std/functional (_Bind_simple): Simplify construction. diff --git a/libstdc++-v3/include/std/functional b/libstdc++-v3/include/std/functional index f615ae4..f8e9b54 100644 --- a/libstdc++-v3/include/std/functional +++ b/libstdc++-v3/include/std/functional @@ -1582,18 +1582,10 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type) { typedef typename result_of<_Callable(_Args...)>::type result_type; - template<typename... _Args2, typename = typename - enable_if< sizeof...(_Args) == sizeof...(_Args2)>::type> + template<typename _Tp, typename... _Up> explicit - _Bind_simple(const _Callable& __callable, _Args2&&... __args) - : _M_bound(__callable, std::forward<_Args2>(__args)...) - { } - - template<typename... _Args2, typename = typename - enable_if< sizeof...(_Args) == sizeof...(_Args2)>::type> - explicit - _Bind_simple(_Callable&& __callable, _Args2&&... __args) - : _M_bound(std::move(__callable), std::forward<_Args2>(__args)...) + _Bind_simple(_Tp&& __f, _Up&&... __args) + : _M_bound(std::forward<_Tp>(__f), std::forward<_Up>(__args)...) { } _Bind_simple(const _Bind_simple&) = default; @@ -1607,7 +1599,6 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type) } private: - template<std::size_t... _Indices> typename result_of<_Callable(_Args...)>::type _M_invoke(_Index_tuple<_Indices...>)