diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2016-10-14 10:12:49 +0100 |
---|---|---|
committer | Jonathan Wakely <redi@gcc.gnu.org> | 2016-10-14 10:12:49 +0100 |
commit | 57c4fbc64b6c15c43b60a7943422c9ff7010694d (patch) | |
tree | 397cc70eb3bc5e4890b630d086fcb301ea628b42 | |
parent | 6fd9c6f4c5bc16e598ffb51448e8810f9fbe4e4d (diff) | |
download | gcc-57c4fbc64b6c15c43b60a7943422c9ff7010694d.zip gcc-57c4fbc64b6c15c43b60a7943422c9ff7010694d.tar.gz gcc-57c4fbc64b6c15c43b60a7943422c9ff7010694d.tar.bz2 |
Simplify reference_wrapper nested typedefs
* include/std/functional (_Reference_wrapper_base_impl): Remove.
(_Refwrap_base_arg1, _Refwrap_base_arg2): New helpers using __void_t.
(_Reference_wrapper_base): Inherit from new helpers.
From-SVN: r241151
-rw-r--r-- | libstdc++-v3/ChangeLog | 6 | ||||
-rw-r--r-- | libstdc++-v3/include/std/functional | 53 |
2 files changed, 22 insertions, 37 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 32b59a3..cd6ac76 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,9 @@ +2016-10-14 Jonathan Wakely <jwakely@redhat.com> + + * include/std/functional (_Reference_wrapper_base_impl): Remove. + (_Refwrap_base_arg1, _Refwrap_base_arg2): New helpers using __void_t. + (_Reference_wrapper_base): Inherit from new helpers. + 2016-10-13 Paolo Carlini <paolo.carlini@oracle.com> * testsuite/24_iterators/container_access.cc: Remove 'test' variables. diff --git a/libstdc++-v3/include/std/functional b/libstdc++-v3/include/std/functional index 8fc60dc..d39b519 100644 --- a/libstdc++-v3/include/std/functional +++ b/libstdc++-v3/include/std/functional @@ -207,51 +207,34 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } #endif - /** - * Knowing which of unary_function and binary_function _Tp derives - * from, derives from the same and ensures that reference_wrapper - * will have a weak result type. See cases below. - */ - template<bool _Unary, bool _Binary, typename _Tp> - struct _Reference_wrapper_base_impl; - - // None of the nested argument types. - template<typename _Tp> - struct _Reference_wrapper_base_impl<false, false, _Tp> - : _Weak_result_type<_Tp> + // Detect nested argument_type. + template<typename _Tp, typename = __void_t<>> + struct _Refwrap_base_arg1 { }; - // Nested argument_type only. + // Nested argument_type. template<typename _Tp> - struct _Reference_wrapper_base_impl<true, false, _Tp> - : _Weak_result_type<_Tp> + struct _Refwrap_base_arg1<_Tp, + __void_t<typename _Tp::argument_type>> { typedef typename _Tp::argument_type argument_type; }; - // Nested first_argument_type and second_argument_type only. - template<typename _Tp> - struct _Reference_wrapper_base_impl<false, true, _Tp> - : _Weak_result_type<_Tp> - { - typedef typename _Tp::first_argument_type first_argument_type; - typedef typename _Tp::second_argument_type second_argument_type; - }; + // Detect nested first_argument_type and second_argument_type. + template<typename _Tp, typename = __void_t<>> + struct _Refwrap_base_arg2 + { }; - // All the nested argument types. - template<typename _Tp> - struct _Reference_wrapper_base_impl<true, true, _Tp> - : _Weak_result_type<_Tp> + // Nested first_argument_type and second_argument_type. + template<typename _Tp> + struct _Refwrap_base_arg2<_Tp, + __void_t<typename _Tp::first_argument_type, + typename _Tp::second_argument_type>> { - typedef typename _Tp::argument_type argument_type; typedef typename _Tp::first_argument_type first_argument_type; typedef typename _Tp::second_argument_type second_argument_type; }; - _GLIBCXX_HAS_NESTED_TYPE(argument_type) - _GLIBCXX_HAS_NESTED_TYPE(first_argument_type) - _GLIBCXX_HAS_NESTED_TYPE(second_argument_type) - /** * Derives from unary_function or binary_function when it * can. Specializations handle all of the easy cases. The primary @@ -260,11 +243,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION */ template<typename _Tp> struct _Reference_wrapper_base - : _Reference_wrapper_base_impl< - __has_argument_type<_Tp>::value, - __has_first_argument_type<_Tp>::value - && __has_second_argument_type<_Tp>::value, - _Tp> + : _Weak_result_type<_Tp>, _Refwrap_base_arg1<_Tp>, _Refwrap_base_arg2<_Tp> { }; // - a function type (unary) |