summaryrefslogtreecommitdiffstats
path: root/libstdc++-v3/include/std/tuple
diff options
context:
space:
mode:
authorpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>2011-05-19 20:48:39 +0000
committerpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>2011-05-19 20:48:39 +0000
commit462625258ca6dbd472878fe3717c8ddd8113bf28 (patch)
treeaa4e6b793f8fc46762e5dce6559c2aacda23a1ed /libstdc++-v3/include/std/tuple
parent687570387ecc520d9381b85f24a0ddffd581b207 (diff)
downloadppe42-gcc-462625258ca6dbd472878fe3717c8ddd8113bf28.tar.gz
ppe42-gcc-462625258ca6dbd472878fe3717c8ddd8113bf28.zip
2011-05-19 Paolo Carlini <paolo.carlini@oracle.com>
* include/std/tuple (tuple_element<__i, const _Tp>, tuple_element<__i, volatile _Tp>, tuple_element<__i, const volatile _Tp>, tuple_size<const _Tp>, tuple_size<volatile _Tp>, tuple_size<const volatile _Tp>): Add. * include/std/utility (tuple_size<std::pair<_Tp1, _Tp2>>): Tweak. * include/std/array (tuple_size<array<_Tp, _Nm>>): Likewise. * testsuite/20_util/tuple/cv_tuple_size.cc: New. * testsuite/20_util/tuple/cv_tuple_element.cc: Likewise. * testsuite/20_util/weak_ptr/comparison/cmp_neg.cc: Tweak dg-warning line number. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@173919 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3/include/std/tuple')
-rw-r--r--libstdc++-v3/include/std/tuple48
1 files changed, 41 insertions, 7 deletions
diff --git a/libstdc++-v3/include/std/tuple b/libstdc++-v3/include/std/tuple
index 682e3c92a47..dc9330d0b59 100644
--- a/libstdc++-v3/include/std/tuple
+++ b/libstdc++-v3/include/std/tuple
@@ -505,19 +505,53 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
typedef _Head type;
};
+ template<std::size_t __i, typename _Tp>
+ struct tuple_element<__i, const _Tp>
+ {
+ typedef typename
+ add_const<typename tuple_element<__i, _Tp>::type>::type type;
+ };
+
+ template<std::size_t __i, typename _Tp>
+ struct tuple_element<__i, volatile _Tp>
+ {
+ typedef typename
+ add_volatile<typename tuple_element<__i, _Tp>::type>::type type;
+ };
+
+ template<std::size_t __i, typename _Tp>
+ struct tuple_element<__i, const volatile _Tp>
+ {
+ typedef typename
+ add_cv<typename tuple_element<__i, _Tp>::type>::type type;
+ };
+
/// Finds the size of a given tuple type.
template<typename _Tp>
struct tuple_size;
- /// class tuple_size
- template<typename... _Elements>
- struct tuple_size<tuple<_Elements...> >
- {
- static const std::size_t value = sizeof...(_Elements);
- };
+ template<typename _Tp>
+ struct tuple_size<const _Tp>
+ : public integral_constant<
+ typename remove_cv<decltype(tuple_size<_Tp>::value)>::type,
+ tuple_size<_Tp>::value> { };
+ template<typename _Tp>
+ struct tuple_size<volatile _Tp>
+ : public integral_constant<
+ typename remove_cv<decltype(tuple_size<_Tp>::value)>::type,
+ tuple_size<_Tp>::value> { };
+
+ template<typename _Tp>
+ struct tuple_size<const volatile _Tp>
+ : public integral_constant<
+ typename remove_cv<decltype(tuple_size<_Tp>::value)>::type,
+ tuple_size<_Tp>::value> { };
+
+ /// class tuple_size
template<typename... _Elements>
- const std::size_t tuple_size<tuple<_Elements...> >::value;
+ struct tuple_size<tuple<_Elements...>>
+ : public integral_constant<std::size_t, sizeof...(_Elements)> { };
template<std::size_t __i, typename _Head, typename... _Tail>
inline typename __add_ref<_Head>::type
OpenPOWER on IntegriCloud