diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2019-04-24 17:25:17 +0100 |
---|---|---|
committer | Jonathan Wakely <redi@gcc.gnu.org> | 2019-04-24 17:25:17 +0100 |
commit | 81c7cf71bf7bc76e360901edb4b3ccbecd2492d0 (patch) | |
tree | c015beee0732a478eda06deee2cd1e38396ab6f0 | |
parent | 73f1289e49d2c1c6d23278dc7a1c70f80cd1e6b4 (diff) | |
download | gcc-81c7cf71bf7bc76e360901edb4b3ccbecd2492d0.zip gcc-81c7cf71bf7bc76e360901edb4b3ccbecd2492d0.tar.gz gcc-81c7cf71bf7bc76e360901edb4b3ccbecd2492d0.tar.bz2 |
Finish implementing "Treating Unnecessary decay" (P0777R1)
* include/std/tuple (apply): Use remove_reference_t instead of decay_t
as per P0777R1.
* include/std/type_traits (__result_of_memfun): Use remove_reference
instead of __remove_cvref_t and remove redundant is_same check.
(__inv_unwrap): Use __remove_cvref_t instead of decay_t.
From-SVN: r270551
-rw-r--r-- | libstdc++-v3/ChangeLog | 6 | ||||
-rw-r--r-- | libstdc++-v3/include/std/tuple | 5 | ||||
-rw-r--r-- | libstdc++-v3/include/std/type_traits | 7 |
3 files changed, 12 insertions, 6 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 5e8a09a..913c8eb 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,5 +1,11 @@ 2019-04-24 Jonathan Wakely <jwakely@redhat.com> + * include/std/tuple (apply): Use remove_reference_t instead of decay_t + as per P0777R1. + * include/std/type_traits (__result_of_memfun): Use remove_reference + instead of __remove_cvref_t and remove redundant is_same check. + (__inv_unwrap): Use __remove_cvref_t instead of decay_t. + * include/experimental/string_view (basic_string_view::pointer) (basic_string_view::reference): Fix to refer to non-const value_type. * include/bits/basic_string.h (basic_string): Use __sv_check and diff --git a/libstdc++-v3/include/std/tuple b/libstdc++-v3/include/std/tuple index 0adef1a..6c7d91b 100644 --- a/libstdc++-v3/include/std/tuple +++ b/libstdc++-v3/include/std/tuple @@ -1674,7 +1674,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION second(std::forward<_Args2>(std::get<_Indexes2>(__tuple2))...) { } -#if __cplusplus > 201402L +#if __cplusplus >= 201703L # define __cpp_lib_apply 201603 template <typename _Fn, typename _Tuple, size_t... _Idx> @@ -1689,7 +1689,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION constexpr decltype(auto) apply(_Fn&& __f, _Tuple&& __t) { - using _Indices = make_index_sequence<tuple_size_v<decay_t<_Tuple>>>; + using _Indices + = make_index_sequence<tuple_size_v<remove_reference_t<_Tuple>>>; return std::__apply_impl(std::forward<_Fn>(__f), std::forward<_Tuple>(__t), _Indices{}); diff --git a/libstdc++-v3/include/std/type_traits b/libstdc++-v3/include/std/type_traits index e0ac5c8..1d14c75 100644 --- a/libstdc++-v3/include/std/type_traits +++ b/libstdc++-v3/include/std/type_traits @@ -2327,10 +2327,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template<typename _Res, typename _Class, typename _Arg, typename... _Args> struct __result_of_memfun<_Res _Class::*, _Arg, _Args...> { - typedef __remove_cvref_t<_Arg> _Argval; + typedef typename remove_reference<_Arg>::type _Argval; typedef _Res _Class::* _MemPtr; - typedef typename conditional<__or_<is_same<_Argval, _Class>, - is_base_of<_Class, _Argval>>::value, + typedef typename conditional<is_base_of<_Class, _Argval>::value, __result_of_memfun_ref<_MemPtr, _Arg, _Args...>, __result_of_memfun_deref<_MemPtr, _Arg, _Args...> >::type::type type; @@ -2341,7 +2340,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // as the object expression // Used by result_of, invoke etc. to unwrap a reference_wrapper. - template<typename _Tp, typename _Up = typename decay<_Tp>::type> + template<typename _Tp, typename _Up = __remove_cvref_t<_Tp>> struct __inv_unwrap { using type = _Tp; |