]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Corrections for C++2a std::unwrap_reference traits
authorJonathan Wakely <jwakely@redhat.com>
Tue, 23 Apr 2019 10:27:14 +0000 (11:27 +0100)
committerJonathan Wakely <redi@gcc.gnu.org>
Tue, 23 Apr 2019 10:27:14 +0000 (11:27 +0100)
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

libstdc++-v3/ChangeLog
libstdc++-v3/include/std/type_traits
libstdc++-v3/testsuite/20_util/unwrap_reference/1.cc

index e222cb30de9bf4f4f9cee91bd501c6fa0648f543..f04a7e009a55ea6449affd504906ce6b6932de8f 100644 (file)
@@ -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>
index c3cb67a457dbba7510ed49e2d93eb769985b7cce..e0ac5c88dfc3fd13bbfab79829cec9e94252201d 100644 (file)
@@ -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;
index 38feca4bb5b222c764d7a910f8f8483b5e654027..243526725a0f95bde2d028413e81a8796ef4b097 100644 (file)
@@ -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;
   }