]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
tuple (tuple_size<cv _Tp>): Implement LWG 2313.
authorJonathan Wakely <jwakely@redhat.com>
Thu, 15 May 2014 10:35:29 +0000 (11:35 +0100)
committerJonathan Wakely <redi@gcc.gnu.org>
Thu, 15 May 2014 10:35:29 +0000 (11:35 +0100)
* include/std/tuple (tuple_size<cv _Tp>): Implement LWG 2313.
* include/std/array (tuple_size, tuple_element): Add Doxygen comments.
* include/std/utility (tuple_size, tuple_element): Likewise.
* testsuite/23_containers/array/tuple_interface/tuple_element_neg.cc:
Adjust dg-error line number.

From-SVN: r210470

libstdc++-v3/ChangeLog
libstdc++-v3/include/std/array
libstdc++-v3/include/std/tuple
libstdc++-v3/include/std/utility
libstdc++-v3/testsuite/23_containers/array/tuple_interface/tuple_element_neg.cc

index d6f2c2354948fef0255e61b91b615360a5c2cce1..fc2c58213bcf5ab685f7d61512973a2d94b1befd 100644 (file)
@@ -1,3 +1,11 @@
+2014-05-15  Jonathan Wakely  <jwakely@redhat.com>
+
+       * include/std/tuple (tuple_size<cv _Tp>): Implement LWG 2313.
+       * include/std/array (tuple_size, tuple_element): Add Doxygen comments.
+       * include/std/utility (tuple_size, tuple_element): Likewise.
+       * testsuite/23_containers/array/tuple_interface/tuple_element_neg.cc:
+       Adjust dg-error line number.
+
 2014-05-14  Jonathan Wakely  <jwakely@redhat.com>
 
        * include/std/tuple (__add_c_ref, __add_ref, __add_r_ref): Remove.
index 22947ceb300637d2ea4bbe7a2433ddaffc0c9ad6..cc2c864ebd691a19da531f35799b8b15aea5733b 100644 (file)
@@ -306,6 +306,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   template<typename _Tp> 
     class tuple_size;
 
+  /// Partial specialization for std::array
   template<typename _Tp, std::size_t _Nm>
     struct tuple_size<_GLIBCXX_STD_C::array<_Tp, _Nm>>
     : public integral_constant<std::size_t, _Nm> { };
@@ -314,6 +315,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   template<std::size_t _Int, typename _Tp>
     class tuple_element;
 
+  /// Partial specialization for std::array
   template<std::size_t _Int, typename _Tp, std::size_t _Nm>
     struct tuple_element<_Int, _GLIBCXX_STD_C::array<_Tp, _Nm>>
     {
index 95c197d50655fe1d68541efd8f3e759698e51617..ef8aa5ab6f4eaffb180b276a4b5eb554239c1f2e 100644 (file)
@@ -693,18 +693,19 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   template<typename _Tp>
     struct tuple_size;
 
-  template<typename _Tp, typename _Ts = tuple_size<_Tp>>
-    using __cv_tuple_size = integral_constant<
-             typename remove_cv<decltype(_Ts::value)>::type, _Ts::value>;
-
+  // _GLIBCXX_RESOLVE_LIB_DEFECTS
+  // 2313. tuple_size should always derive from integral_constant<size_t, N>
   template<typename _Tp>
-    struct tuple_size<const _Tp> : __cv_tuple_size<_Tp> { };
+    struct tuple_size<const _Tp>
+    : integral_constant<size_t, tuple_size<_Tp>::value> { };
 
   template<typename _Tp>
-    struct tuple_size<volatile _Tp> : __cv_tuple_size<_Tp> { };
+    struct tuple_size<volatile _Tp>
+    : integral_constant<size_t, tuple_size<_Tp>::value> { };
 
   template<typename _Tp>
-    struct tuple_size<const volatile _Tp> : __cv_tuple_size<_Tp> { };
+    struct tuple_size<const volatile _Tp>
+    : integral_constant<size_t, tuple_size<_Tp>::value> { };
 
   /// class tuple_size
   template<typename... _Elements>
index 4da92095f11956b5474df818e7ecbe96db79c6eb..6d12839e509e63f40d3e304260e87dede7a636fe 100644 (file)
@@ -84,14 +84,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     class tuple_element;
 
    // Various functions which give std::pair a tuple-like interface.
+
+  /// Partial specialization for std::pair
   template<class _Tp1, class _Tp2>
     struct tuple_size<std::pair<_Tp1, _Tp2>>
     : public integral_constant<std::size_t, 2> { };
 
+  /// Partial specialization for std::pair
   template<class _Tp1, class _Tp2>
     struct tuple_element<0, std::pair<_Tp1, _Tp2>>
     { typedef _Tp1 type; };
  
+  /// Partial specialization for std::pair
   template<class _Tp1, class _Tp2>
     struct tuple_element<1, std::pair<_Tp1, _Tp2>>
     { typedef _Tp2 type; };
index f80798c9108fc35f063fb4fb848fbd5ce8321d63..4b1e5aeb661633a4cd3bd7b363f2c110d30d8ce2 100644 (file)
@@ -23,4 +23,4 @@
 
 typedef std::tuple_element<1, std::array<int, 1>>::type type;
 
-// { dg-error "static assertion failed" "" { target *-*-* } 320 }
+// { dg-error "static assertion failed" "" { target *-*-* } 322 }