diff options
| author | bkoz <bkoz@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-08-03 21:05:14 +0000 |
|---|---|---|
| committer | bkoz <bkoz@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-08-03 21:05:14 +0000 |
| commit | 0af408f7e9f70d6d9130127f7cc3472bfec50bae (patch) | |
| tree | e5d3f09d63186c6d603026ac7fccb8e4e1509cb9 /libstdc++-v3/include/std/tuple | |
| parent | ca89f73b0841154ec2d15fb5c9c60fd637e2559f (diff) | |
| download | ppe42-gcc-0af408f7e9f70d6d9130127f7cc3472bfec50bae.tar.gz ppe42-gcc-0af408f7e9f70d6d9130127f7cc3472bfec50bae.zip | |
2011-08-03 Benjamin Kosnik <bkoz@redhat.com>
* include/std/tuple: Mark more constructors constexpr.
* testsuite/20_util/tuple/cons/constexpr.cc: Split into and extend as:
* testsuite/20_util/tuple/cons/constexpr-2.cc: ...this.
* testsuite/20_util/tuple/cons/constexpr-3.cc: ... and this.
* testsuite/20_util/weak_ptr/comparison/cmp_neg.cc: Adjust line numbers.
2011-08-03 Benjamin Kosnik <bkoz@redhat.com>
François Dumont <francois.cppdevs@free.fr>
* testsuite/23_containers/array/at_neg.cc: Move...
* testsuite/23_containers/array/at.cc: ...here. Remove
-fno-exceptions, call const at member function.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@177299 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3/include/std/tuple')
| -rw-r--r-- | libstdc++-v3/include/std/tuple | 52 |
1 files changed, 34 insertions, 18 deletions
diff --git a/libstdc++-v3/include/std/tuple b/libstdc++-v3/include/std/tuple index d058c676be6..1636552b177 100644 --- a/libstdc++-v3/include/std/tuple +++ b/libstdc++-v3/include/std/tuple @@ -114,7 +114,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template<typename _UHead, typename = typename enable_if<!is_convertible<_UHead, __uses_alloc_base>::value>::type> - _Head_base(_UHead&& __h) + constexpr _Head_base(_UHead&& __h) : _Head(std::forward<_UHead>(__h)) { } _Head_base(__uses_alloc0) @@ -140,8 +140,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _Head_base(__uses_alloc2<_Alloc> __a, _UHead&& __uhead) : _Head(std::forward<_UHead>(__uhead), *__a._M_a) { } - _Head& _M_head() noexcept { return *this; } - const _Head& _M_head() const noexcept { return *this; } + _Head& + _M_head() noexcept { return *this; } + + const _Head& + _M_head() const noexcept { return *this; } }; template<std::size_t _Idx, typename _Head> @@ -156,7 +159,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template<typename _UHead, typename = typename enable_if<!is_convertible<_UHead, __uses_alloc_base>::value>::type> - _Head_base(_UHead&& __h) + constexpr _Head_base(_UHead&& __h) : _M_head_impl(std::forward<_UHead>(__h)) { } _Head_base(__uses_alloc0) @@ -183,8 +186,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _Head_base(__uses_alloc2<_Alloc> __a, _UHead&& __uhead) : _M_head_impl(std::forward<_UHead>(__uhead), *__a._M_a) { } - _Head& _M_head() noexcept { return _M_head_impl; } - const _Head& _M_head() const noexcept { return _M_head_impl; } + _Head& + _M_head() noexcept { return _M_head_impl; } + + const _Head& + _M_head() const noexcept { return _M_head_impl; } _Head _M_head_impl; }; @@ -239,11 +245,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION typedef _Tuple_impl<_Idx + 1, _Tail...> _Inherited; typedef _Head_base<_Idx, _Head, std::is_empty<_Head>::value> _Base; - _Head& _M_head() noexcept { return _Base::_M_head(); } - const _Head& _M_head() const noexcept { return _Base::_M_head(); } + _Head& + _M_head() noexcept { return _Base::_M_head(); } + + const _Head& + _M_head() const noexcept { return _Base::_M_head(); } - _Inherited& _M_tail() noexcept { return *this; } - const _Inherited& _M_tail() const noexcept { return *this; } + _Inherited& + _M_tail() noexcept { return *this; } + + const _Inherited& + _M_tail() const noexcept { return *this; } constexpr _Tuple_impl() : _Inherited(), _Base() { } @@ -255,7 +267,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template<typename _UHead, typename... _UTail, typename = typename enable_if<sizeof...(_Tail) == sizeof...(_UTail)>::type> explicit - _Tuple_impl(_UHead&& __head, _UTail&&... __tail) + constexpr _Tuple_impl(_UHead&& __head, _UTail&&... __tail) : _Inherited(std::forward<_UTail>(__tail)...), _Base(std::forward<_UHead>(__head)) { } @@ -371,7 +383,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } }; - /// tuple + /// Primary class template, tuple template<typename... _Elements> class tuple : public _Tuple_impl<0, _Elements...> { @@ -392,10 +404,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __conv_types<_Elements...>> >::value>::type> explicit - tuple(_UElements&&... __elements) + constexpr tuple(_UElements&&... __elements) : _Inherited(std::forward<_UElements>(__elements)...) { } constexpr tuple(const tuple&) = default; + tuple(tuple&&) = default; template<typename... _UElements, typename = typename @@ -417,7 +430,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION tuple(tuple<_UElements...>&& __in) : _Inherited(static_cast<_Tuple_impl<0, _UElements...>&&>(__in)) { } - // allocator-extended constructors + // Allocator-extended constructors. template<typename _Alloc> tuple(allocator_arg_t __tag, const _Alloc& __a) @@ -503,6 +516,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { _Inherited::_M_swap(__in); } }; + // Explicit specialization, zero-element tuple. template<> class tuple<> { @@ -510,7 +524,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION void swap(tuple&) noexcept { /* no-op */ } }; - /// tuple (2-element), with construction and assignment from a pair. + /// Partial specialization, 2-element tuple. + /// Includes construction and assignment from a pair. template<typename _T1, typename _T2> class tuple<_T1, _T2> : public _Tuple_impl<0, _T1, _T2> { @@ -528,10 +543,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION enable_if<__and_<is_convertible<_U1, _T1>, is_convertible<_U2, _T2>>::value>::type> explicit - tuple(_U1&& __a1, _U2&& __a2) + constexpr tuple(_U1&& __a1, _U2&& __a2) : _Inherited(std::forward<_U1>(__a1), std::forward<_U2>(__a2)) { } constexpr tuple(const tuple&) = default; + tuple(tuple&&) = default; template<typename _U1, typename _U2, typename = typename @@ -549,7 +565,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template<typename _U1, typename _U2, typename = typename enable_if<__and_<is_convertible<const _U1&, _T1>, is_convertible<const _U2&, _T2>>::value>::type> - tuple(const pair<_U1, _U2>& __in) + constexpr tuple(const pair<_U1, _U2>& __in) : _Inherited(__in.first, __in.second) { } template<typename _U1, typename _U2, typename = typename @@ -559,7 +575,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION : _Inherited(std::forward<_U1>(__in.first), std::forward<_U2>(__in.second)) { } - // allocator-extended constructors + // Allocator-extended constructors. template<typename _Alloc> tuple(allocator_arg_t __tag, const _Alloc& __a) |

