aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2019-04-23 11:27:14 +0100
committerJonathan Wakely <redi@gcc.gnu.org>2019-04-23 11:27:14 +0100
commit82e8c3da7408bc0695511ee13f88d451c8adadd8 (patch)
treeca42dfd0254e48fb5f3394614fc4449da1d17d5a
parent6e271009792ce0c070aad42d96032c38e9bd4aa3 (diff)
downloadgcc-82e8c3da7408bc0695511ee13f88d451c8adadd8.zip
gcc-82e8c3da7408bc0695511ee13f88d451c8adadd8.tar.gz
gcc-82e8c3da7408bc0695511ee13f88d451c8adadd8.tar.bz2
Corrections for C++2a std::unwrap_reference traits
The P0318R1 paper added to the C++2a draft recently was not the latest version of the paper, and should have included these changes. These changes will be made to the working draft via a Defect Report, so I'm applying them to libstdc++ now. * include/std/type_traits (unwrap_reference_t): Define for C++2a. (unwrap_ref_decay): Remove inheritance from unwrap_reference. * testsuite/20_util/unwrap_reference/1.cc: Adjust test to use alias. From-SVN: r270506
-rw-r--r--libstdc++-v3/ChangeLog6
-rw-r--r--libstdc++-v3/include/std/type_traits5
-rw-r--r--libstdc++-v3/testsuite/20_util/unwrap_reference/1.cc2
3 files changed, 11 insertions, 2 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index e222cb3..f04a7e0 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,9 @@
+2019-04-23 Jonathan Wakely <jwakely@redhat.com>
+
+ * include/std/type_traits (unwrap_reference_t): Define for C++2a.
+ (unwrap_ref_decay): Remove inheritance from unwrap_reference.
+ * testsuite/20_util/unwrap_reference/1.cc: Adjust test to use alias.
+
2019-04-23 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
Bernd Edlinger <bernd.edlinger@hotmail.de>
Jakub Jelinek <jakub@redhat.com>
diff --git a/libstdc++-v3/include/std/type_traits b/libstdc++-v3/include/std/type_traits
index c3cb67a..e0ac5c8 100644
--- a/libstdc++-v3/include/std/type_traits
+++ b/libstdc++-v3/include/std/type_traits
@@ -3067,9 +3067,12 @@ template <typename _From, typename _To>
template<typename _Tp>
struct unwrap_reference<reference_wrapper<_Tp>> { using type = _Tp&; };
+ template<typename _Tp>
+ using unwrap_reference_t = typename unwrap_reference<_Tp>::type;
+
/// Decay type and if it's a reference_wrapper, unwrap it
template<typename _Tp>
- struct unwrap_ref_decay : unwrap_reference<decay_t<_Tp>> { };
+ struct unwrap_ref_decay { using type = unwrap_reference_t<decay_t<_Tp>>; };
template<typename _Tp>
using unwrap_ref_decay_t = typename unwrap_ref_decay<_Tp>::type;
diff --git a/libstdc++-v3/testsuite/20_util/unwrap_reference/1.cc b/libstdc++-v3/testsuite/20_util/unwrap_reference/1.cc
index 38feca4..2435267 100644
--- a/libstdc++-v3/testsuite/20_util/unwrap_reference/1.cc
+++ b/libstdc++-v3/testsuite/20_util/unwrap_reference/1.cc
@@ -28,7 +28,7 @@ template<typename T, typename U = T>
{
using std::unwrap_reference;
using T2 = typename unwrap_reference<T>::type;
- static_assert(expect_same<T2, typename unwrap_reference<T2>::type>::value);
+ static_assert(expect_same<T2, std::unwrap_reference_t<T2>>::value);
return expect_same<T2, U>::value;
}