diff options
| author | paolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-05-19 20:48:39 +0000 |
|---|---|---|
| committer | paolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-05-19 20:48:39 +0000 |
| commit | 462625258ca6dbd472878fe3717c8ddd8113bf28 (patch) | |
| tree | aa4e6b793f8fc46762e5dce6559c2aacda23a1ed /libstdc++-v3/include/std/tuple | |
| parent | 687570387ecc520d9381b85f24a0ddffd581b207 (diff) | |
| download | ppe42-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/tuple | 48 |
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 |

