diff options
| author | paolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-05-16 18:09:17 +0000 |
|---|---|---|
| committer | paolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-05-16 18:09:17 +0000 |
| commit | cb17d4f27ce0a1c9f11eb9da3e2250b7591009cb (patch) | |
| tree | 5719dd46ba98d097b18f3d0c21dd26d7d38d91b9 /libstdc++-v3/include/std/utility | |
| parent | 25d5a26358fc99f9f357592f6a54e646f833a94e (diff) | |
| download | ppe42-gcc-cb17d4f27ce0a1c9f11eb9da3e2250b7591009cb.tar.gz ppe42-gcc-cb17d4f27ce0a1c9f11eb9da3e2250b7591009cb.zip | |
2011-05-16 Paolo Carlini <paolo.carlini@oracle.com>
* include/std/utility (get(std::pair<>&&)): Add.
* include/bits/stl_pair.h (pair::swap(pair&),
swap(pair<>&, pair<>&)): Use noexcept.
* include/bits/random.h (discard_block_engine<>::base,
independent_bits_engine<>::base, shuffle_order_engine<>::base,
random_device::entropy): Use noexcept.
* include/std/array: Use noexcept where appropriate.
(get(array<>&&)): Add.
* testsuite/23_containers/array/requirements/get.cc: New.
* testsuite/20_util/pair/get.cc: Likewise.
* testsuite/20_util/weak_ptr/comparison/cmp_neg.cc: Tweak dg-error
line number.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@173798 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3/include/std/utility')
| -rw-r--r-- | libstdc++-v3/include/std/utility | 48 |
1 files changed, 37 insertions, 11 deletions
diff --git a/libstdc++-v3/include/std/utility b/libstdc++-v3/include/std/utility index 245c41fa75d..6c1dd369ba4 100644 --- a/libstdc++-v3/include/std/utility +++ b/libstdc++-v3/include/std/utility @@ -1,6 +1,7 @@ // <utility> -*- C++ -*- -// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 +// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, +// 2010, 2011 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -108,34 +109,59 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION struct __pair_get<0> { template<typename _Tp1, typename _Tp2> - static _Tp1& __get(std::pair<_Tp1, _Tp2>& __pair) - { return __pair.first; } + static _Tp1& + __get(std::pair<_Tp1, _Tp2>& __pair) _GLIBCXX_NOEXCEPT + { return __pair.first; } + +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + template<typename _Tp1, typename _Tp2> + static _Tp1&& + __move_get(std::pair<_Tp1, _Tp2>&& __pair) noexcept + { return std::forward<_Tp1>(__pair.first); } +#endif template<typename _Tp1, typename _Tp2> - static const _Tp1& __const_get(const std::pair<_Tp1, _Tp2>& __pair) - { return __pair.first; } + static const _Tp1& + __const_get(const std::pair<_Tp1, _Tp2>& __pair) _GLIBCXX_NOEXCEPT + { return __pair.first; } }; template<> struct __pair_get<1> { template<typename _Tp1, typename _Tp2> - static _Tp2& __get(std::pair<_Tp1, _Tp2>& __pair) - { return __pair.second; } + static _Tp2& + __get(std::pair<_Tp1, _Tp2>& __pair) _GLIBCXX_NOEXCEPT + { return __pair.second; } + +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + template<typename _Tp1, typename _Tp2> + static _Tp2&& + __move_get(std::pair<_Tp1, _Tp2>&& __pair) noexcept + { return std::forward<_Tp2>(__pair.second); } +#endif template<typename _Tp1, typename _Tp2> - static const _Tp2& __const_get(const std::pair<_Tp1, _Tp2>& __pair) - { return __pair.second; } + static const _Tp2& + __const_get(const std::pair<_Tp1, _Tp2>& __pair) _GLIBCXX_NOEXCEPT + { return __pair.second; } }; template<std::size_t _Int, class _Tp1, class _Tp2> inline typename tuple_element<_Int, std::pair<_Tp1, _Tp2> >::type& - get(std::pair<_Tp1, _Tp2>& __in) + get(std::pair<_Tp1, _Tp2>& __in) _GLIBCXX_NOEXCEPT { return __pair_get<_Int>::__get(__in); } +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + template<std::size_t _Int, class _Tp1, class _Tp2> + inline typename tuple_element<_Int, std::pair<_Tp1, _Tp2> >::type&& + get(std::pair<_Tp1, _Tp2>&& __in) noexcept + { return __pair_get<_Int>::__move_get(std::move(__in)); } +#endif + template<std::size_t _Int, class _Tp1, class _Tp2> inline const typename tuple_element<_Int, std::pair<_Tp1, _Tp2> >::type& - get(const std::pair<_Tp1, _Tp2>& __in) + get(const std::pair<_Tp1, _Tp2>& __in) _GLIBCXX_NOEXCEPT { return __pair_get<_Int>::__const_get(__in); } _GLIBCXX_END_NAMESPACE_VERSION |

