Commit 40962ac0 by Jonathan Wakely Committed by Jonathan Wakely

Minor simplification to std::_Bind_result helpers

	* include/std/functional (_Bind_result::__enable_if_void): Use alias
	template instead of class template.
	(_Bind_result::__disable_if_void): Likewise.
	(_Bind_result::__call): Adjust uses of __enable_if_void and
	__disable_if_void.

From-SVN: r240940
parent 2d6744f4
2016-10-10 Jonathan Wakely <jwakely@redhat.com> 2016-10-10 Jonathan Wakely <jwakely@redhat.com>
* include/std/functional (_Bind_result::__enable_if_void): Use alias
template instead of class template.
(_Bind_result::__disable_if_void): Likewise.
(_Bind_result::__call): Adjust uses of __enable_if_void and
__disable_if_void.
* doc/xml/manual/intro.xml: Document DR 2296 status. * doc/xml/manual/intro.xml: Document DR 2296 status.
* doc/xml/manual/status_cxx2017.xml: Update status. * doc/xml/manual/status_cxx2017.xml: Update status.
* include/bits/move.h (__addressof): Add _GLIBCXX_CONSTEXPR and * include/bits/move.h (__addressof): Add _GLIBCXX_CONSTEXPR and
......
...@@ -1000,15 +1000,17 @@ _GLIBCXX_MEM_FN_TRAITS(&&, false_type, true_type) ...@@ -1000,15 +1000,17 @@ _GLIBCXX_MEM_FN_TRAITS(&&, false_type, true_type)
// sfinae types // sfinae types
template<typename _Res> template<typename _Res>
struct __enable_if_void : enable_if<is_void<_Res>::value, int> { }; using __enable_if_void
= typename enable_if<is_void<_Res>{}>::type;
template<typename _Res> template<typename _Res>
struct __disable_if_void : enable_if<!is_void<_Res>::value, int> { }; using __disable_if_void
= typename enable_if<!is_void<_Res>{}, _Result>::type;
// Call unqualified // Call unqualified
template<typename _Res, typename... _Args, std::size_t... _Indexes> template<typename _Res, typename... _Args, std::size_t... _Indexes>
_Result __disable_if_void<_Res>
__call(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>, __call(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>)
typename __disable_if_void<_Res>::type = 0)
{ {
return _M_f(_Mu<_Bound_args>() return _M_f(_Mu<_Bound_args>()
(std::get<_Indexes>(_M_bound_args), __args)...); (std::get<_Indexes>(_M_bound_args), __args)...);
...@@ -1016,9 +1018,8 @@ _GLIBCXX_MEM_FN_TRAITS(&&, false_type, true_type) ...@@ -1016,9 +1018,8 @@ _GLIBCXX_MEM_FN_TRAITS(&&, false_type, true_type)
// Call unqualified, return void // Call unqualified, return void
template<typename _Res, typename... _Args, std::size_t... _Indexes> template<typename _Res, typename... _Args, std::size_t... _Indexes>
void __enable_if_void<_Res>
__call(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>, __call(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>)
typename __enable_if_void<_Res>::type = 0)
{ {
_M_f(_Mu<_Bound_args>() _M_f(_Mu<_Bound_args>()
(std::get<_Indexes>(_M_bound_args), __args)...); (std::get<_Indexes>(_M_bound_args), __args)...);
...@@ -1026,9 +1027,8 @@ _GLIBCXX_MEM_FN_TRAITS(&&, false_type, true_type) ...@@ -1026,9 +1027,8 @@ _GLIBCXX_MEM_FN_TRAITS(&&, false_type, true_type)
// Call as const // Call as const
template<typename _Res, typename... _Args, std::size_t... _Indexes> template<typename _Res, typename... _Args, std::size_t... _Indexes>
_Result __disable_if_void<_Res>
__call(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>, __call(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>) const
typename __disable_if_void<_Res>::type = 0) const
{ {
return _M_f(_Mu<_Bound_args>() return _M_f(_Mu<_Bound_args>()
(std::get<_Indexes>(_M_bound_args), __args)...); (std::get<_Indexes>(_M_bound_args), __args)...);
...@@ -1036,9 +1036,8 @@ _GLIBCXX_MEM_FN_TRAITS(&&, false_type, true_type) ...@@ -1036,9 +1036,8 @@ _GLIBCXX_MEM_FN_TRAITS(&&, false_type, true_type)
// Call as const, return void // Call as const, return void
template<typename _Res, typename... _Args, std::size_t... _Indexes> template<typename _Res, typename... _Args, std::size_t... _Indexes>
void __enable_if_void<_Res>
__call(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>, __call(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>) const
typename __enable_if_void<_Res>::type = 0) const
{ {
_M_f(_Mu<_Bound_args>() _M_f(_Mu<_Bound_args>()
(std::get<_Indexes>(_M_bound_args), __args)...); (std::get<_Indexes>(_M_bound_args), __args)...);
...@@ -1046,9 +1045,8 @@ _GLIBCXX_MEM_FN_TRAITS(&&, false_type, true_type) ...@@ -1046,9 +1045,8 @@ _GLIBCXX_MEM_FN_TRAITS(&&, false_type, true_type)
// Call as volatile // Call as volatile
template<typename _Res, typename... _Args, std::size_t... _Indexes> template<typename _Res, typename... _Args, std::size_t... _Indexes>
_Result __disable_if_void<_Res>
__call(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>, __call(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>) volatile
typename __disable_if_void<_Res>::type = 0) volatile
{ {
return _M_f(_Mu<_Bound_args>() return _M_f(_Mu<_Bound_args>()
(__volget<_Indexes>(_M_bound_args), __args)...); (__volget<_Indexes>(_M_bound_args), __args)...);
...@@ -1056,9 +1054,8 @@ _GLIBCXX_MEM_FN_TRAITS(&&, false_type, true_type) ...@@ -1056,9 +1054,8 @@ _GLIBCXX_MEM_FN_TRAITS(&&, false_type, true_type)
// Call as volatile, return void // Call as volatile, return void
template<typename _Res, typename... _Args, std::size_t... _Indexes> template<typename _Res, typename... _Args, std::size_t... _Indexes>
void __enable_if_void<_Res>
__call(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>, __call(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>) volatile
typename __enable_if_void<_Res>::type = 0) volatile
{ {
_M_f(_Mu<_Bound_args>() _M_f(_Mu<_Bound_args>()
(__volget<_Indexes>(_M_bound_args), __args)...); (__volget<_Indexes>(_M_bound_args), __args)...);
...@@ -1066,9 +1063,9 @@ _GLIBCXX_MEM_FN_TRAITS(&&, false_type, true_type) ...@@ -1066,9 +1063,9 @@ _GLIBCXX_MEM_FN_TRAITS(&&, false_type, true_type)
// Call as const volatile // Call as const volatile
template<typename _Res, typename... _Args, std::size_t... _Indexes> template<typename _Res, typename... _Args, std::size_t... _Indexes>
_Result __disable_if_void<_Res>
__call(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>, __call(tuple<_Args...>&& __args,
typename __disable_if_void<_Res>::type = 0) const volatile _Index_tuple<_Indexes...>) const volatile
{ {
return _M_f(_Mu<_Bound_args>() return _M_f(_Mu<_Bound_args>()
(__volget<_Indexes>(_M_bound_args), __args)...); (__volget<_Indexes>(_M_bound_args), __args)...);
...@@ -1076,10 +1073,9 @@ _GLIBCXX_MEM_FN_TRAITS(&&, false_type, true_type) ...@@ -1076,10 +1073,9 @@ _GLIBCXX_MEM_FN_TRAITS(&&, false_type, true_type)
// Call as const volatile, return void // Call as const volatile, return void
template<typename _Res, typename... _Args, std::size_t... _Indexes> template<typename _Res, typename... _Args, std::size_t... _Indexes>
void __enable_if_void<_Res>
__call(tuple<_Args...>&& __args, __call(tuple<_Args...>&& __args,
_Index_tuple<_Indexes...>, _Index_tuple<_Indexes...>) const volatile
typename __enable_if_void<_Res>::type = 0) const volatile
{ {
_M_f(_Mu<_Bound_args>() _M_f(_Mu<_Bound_args>()
(__volget<_Indexes>(_M_bound_args), __args)...); (__volget<_Indexes>(_M_bound_args), __args)...);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment