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 | |
parent | 25d5a26358fc99f9f357592f6a54e646f833a94e (diff) | |
download | gcc-cb17d4f27ce0a1c9f11eb9da3e2250b7591009cb.tar.gz |
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')
-rw-r--r-- | libstdc++-v3/include/bits/random.h | 8 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/stl_pair.h | 7 | ||||
-rw-r--r-- | libstdc++-v3/include/std/array | 51 | ||||
-rw-r--r-- | libstdc++-v3/include/std/utility | 48 |
4 files changed, 76 insertions, 38 deletions
diff --git a/libstdc++-v3/include/bits/random.h b/libstdc++-v3/include/bits/random.h index 7b7f5966b3c..f8f7ce9522e 100644 --- a/libstdc++-v3/include/bits/random.h +++ b/libstdc++-v3/include/bits/random.h @@ -881,7 +881,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * object. */ const _RandomNumberEngine& - base() const + base() const noexcept { return _M_b; } /** @@ -1090,7 +1090,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * object. */ const _RandomNumberEngine& - base() const + base() const noexcept { return _M_b; } /** @@ -1320,7 +1320,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * Gets a const reference to the underlying generator engine object. */ const _RandomNumberEngine& - base() const + base() const noexcept { return _M_b; } /** @@ -1553,7 +1553,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { return std::numeric_limits<result_type>::max(); } double - entropy() const + entropy() const noexcept { return 0.0; } result_type diff --git a/libstdc++-v3/include/bits/stl_pair.h b/libstdc++-v3/include/bits/stl_pair.h index 8d137b29a13..7902f2653d7 100644 --- a/libstdc++-v3/include/bits/stl_pair.h +++ b/libstdc++-v3/include/bits/stl_pair.h @@ -1,6 +1,7 @@ // Pair implementation -*- 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 @@ -152,6 +153,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION pair& operator=(pair&& __p) + // noexcept has to wait is_nothrow_move_assignable { first = std::move(__p.first); second = std::move(__p.second); @@ -178,6 +180,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION void swap(pair& __p) + noexcept(noexcept(swap(first, __p.first)) + && noexcept(swap(second, __p.second))) { using std::swap; swap(first, __p.first); @@ -239,6 +243,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template<class _T1, class _T2> inline void swap(pair<_T1, _T2>& __x, pair<_T1, _T2>& __y) + noexcept(noexcept(__x.swap(__y))) { __x.swap(__y); } #endif diff --git a/libstdc++-v3/include/std/array b/libstdc++-v3/include/std/array index a0bdd24a85a..b0fc75b14bc 100644 --- a/libstdc++-v3/include/std/array +++ b/libstdc++-v3/include/std/array @@ -1,6 +1,6 @@ // <array> -*- C++ -*- -// Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc. +// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -83,66 +83,67 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION void swap(array& __other) + noexcept(noexcept(swap(std::declval<_Tp&>(), std::declval<_Tp&>()))) { std::swap_ranges(begin(), end(), __other.begin()); } // Iterators. iterator - begin() + begin() noexcept { return iterator(std::__addressof(_M_instance[0])); } const_iterator - begin() const + begin() const noexcept { return const_iterator(std::__addressof(_M_instance[0])); } iterator - end() + end() noexcept { return iterator(std::__addressof(_M_instance[_Nm])); } const_iterator - end() const + end() const noexcept { return const_iterator(std::__addressof(_M_instance[_Nm])); } reverse_iterator - rbegin() + rbegin() noexcept { return reverse_iterator(end()); } const_reverse_iterator - rbegin() const + rbegin() const noexcept { return const_reverse_iterator(end()); } reverse_iterator - rend() + rend() noexcept { return reverse_iterator(begin()); } const_reverse_iterator - rend() const + rend() const noexcept { return const_reverse_iterator(begin()); } const_iterator - cbegin() const + cbegin() const noexcept { return const_iterator(std::__addressof(_M_instance[0])); } const_iterator - cend() const + cend() const noexcept { return const_iterator(std::__addressof(_M_instance[_Nm])); } const_reverse_iterator - crbegin() const + crbegin() const noexcept { return const_reverse_iterator(end()); } const_reverse_iterator - crend() const + crend() const noexcept { return const_reverse_iterator(begin()); } // Capacity. constexpr size_type - size() const { return _Nm; } + size() const noexcept { return _Nm; } constexpr size_type - max_size() const { return _Nm; } + max_size() const noexcept { return _Nm; } constexpr bool - empty() const { return size() == 0; } + empty() const noexcept { return size() == 0; } // Element access. reference @@ -186,11 +187,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { return _Nm ? *(end() - 1) : *end(); } _Tp* - data() + data() noexcept { return std::__addressof(_M_instance[0]); } const _Tp* - data() const + data() const noexcept { return std::__addressof(_M_instance[0]); } }; @@ -228,13 +229,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION operator>=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two) { return !(__one < __two); } - // Specialized algorithms [6.2.2.2]. + // Specialized algorithms. template<typename _Tp, std::size_t _Nm> inline void swap(array<_Tp, _Nm>& __one, array<_Tp, _Nm>& __two) + noexcept(noexcept(__one.swap(__two))) { __one.swap(__two); } - // Tuple interface to class template array [6.2.2.5]. + // Tuple interface to class template array. /// tuple_size template<typename _Tp> @@ -258,12 +260,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template<std::size_t _Int, typename _Tp, std::size_t _Nm> inline _Tp& - get(array<_Tp, _Nm>& __arr) + get(array<_Tp, _Nm>& __arr) noexcept { return __arr[_Int]; } template<std::size_t _Int, typename _Tp, std::size_t _Nm> + inline _Tp&& + get(array<_Tp, _Nm>&& __arr) noexcept + { return std::move(get<_Int>(__arr)); } + + template<std::size_t _Int, typename _Tp, std::size_t _Nm> inline const _Tp& - get(const array<_Tp, _Nm>& __arr) + get(const array<_Tp, _Nm>& __arr) noexcept { return __arr[_Int]; } _GLIBCXX_END_NAMESPACE_VERSION 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 |