aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2014-05-15 11:35:29 +0100
committerJonathan Wakely <redi@gcc.gnu.org>2014-05-15 11:35:29 +0100
commit3a004764ec49e9d14b1f4bd392caebf08e115598 (patch)
tree848638b5cd3131d87141621fe3d68fea554a0634 /libstdc++-v3
parentceed6e6732830adb0c0ba5b7eab21d22977a5abf (diff)
downloadgcc-3a004764ec49e9d14b1f4bd392caebf08e115598.zip
gcc-3a004764ec49e9d14b1f4bd392caebf08e115598.tar.gz
gcc-3a004764ec49e9d14b1f4bd392caebf08e115598.tar.bz2
tuple (tuple_size<cv _Tp>): Implement LWG 2313.
* 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
Diffstat (limited to 'libstdc++-v3')
-rw-r--r--libstdc++-v3/ChangeLog8
-rw-r--r--libstdc++-v3/include/std/array2
-rw-r--r--libstdc++-v3/include/std/tuple15
-rw-r--r--libstdc++-v3/include/std/utility4
-rw-r--r--libstdc++-v3/testsuite/23_containers/array/tuple_interface/tuple_element_neg.cc2
5 files changed, 23 insertions, 8 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index d6f2c23..fc2c582 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -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.
diff --git a/libstdc++-v3/include/std/array b/libstdc++-v3/include/std/array
index 22947ce..cc2c864 100644
--- a/libstdc++-v3/include/std/array
+++ b/libstdc++-v3/include/std/array
@@ -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>>
{
diff --git a/libstdc++-v3/include/std/tuple b/libstdc++-v3/include/std/tuple
index 95c197d..ef8aa5a 100644
--- a/libstdc++-v3/include/std/tuple
+++ b/libstdc++-v3/include/std/tuple
@@ -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>
diff --git a/libstdc++-v3/include/std/utility b/libstdc++-v3/include/std/utility
index 4da9209..6d12839e 100644
--- a/libstdc++-v3/include/std/utility
+++ b/libstdc++-v3/include/std/utility
@@ -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; };
diff --git a/libstdc++-v3/testsuite/23_containers/array/tuple_interface/tuple_element_neg.cc b/libstdc++-v3/testsuite/23_containers/array/tuple_interface/tuple_element_neg.cc
index f80798c..4b1e5ae 100644
--- a/libstdc++-v3/testsuite/23_containers/array/tuple_interface/tuple_element_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/array/tuple_interface/tuple_element_neg.cc
@@ -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 }