Commit e90a8010 by Jonathan Wakely Committed by Jonathan Wakely

Add C++17 constexpr to debug and profile mode arrays

	* include/debug/array (array): Add _GLIBCXX17_CONSTEXPR.
	* include/profile/array (array): Likewise.
	(array::swap): Fix exception specification for zero-sized arrays.

From-SVN: r239705
parent 027f1004
2016-08-23 Jonathan Wakely <jwakely@redhat.com> 2016-08-23 Jonathan Wakely <jwakely@redhat.com>
* include/debug/array (array): Add _GLIBCXX17_CONSTEXPR.
* include/profile/array (array): Likewise.
(array::swap): Fix exception specification for zero-sized arrays.
PR libstdc++/77334 PR libstdc++/77334
* include/bits/stl_tree.h (_Rb_tree::_M_move_assign): New functions. * include/bits/stl_tree.h (_Rb_tree::_M_move_assign): New functions.
(_Rb_tree::operator=(_Rb_tree&&)): Dispatch to _M_move_assign. (_Rb_tree::operator=(_Rb_tree&&)): Dispatch to _M_move_assign.
......
...@@ -90,51 +90,51 @@ namespace __debug ...@@ -90,51 +90,51 @@ namespace __debug
{ std::swap_ranges(begin(), end(), __other.begin()); } { std::swap_ranges(begin(), end(), __other.begin()); }
// Iterators. // Iterators.
iterator _GLIBCXX17_CONSTEXPR iterator
begin() noexcept begin() noexcept
{ return iterator(data()); } { return iterator(data()); }
const_iterator _GLIBCXX17_CONSTEXPR const_iterator
begin() const noexcept begin() const noexcept
{ return const_iterator(data()); } { return const_iterator(data()); }
iterator _GLIBCXX17_CONSTEXPR iterator
end() noexcept end() noexcept
{ return iterator(data() + _Nm); } { return iterator(data() + _Nm); }
const_iterator _GLIBCXX17_CONSTEXPR const_iterator
end() const noexcept end() const noexcept
{ return const_iterator(data() + _Nm); } { return const_iterator(data() + _Nm); }
reverse_iterator _GLIBCXX17_CONSTEXPR reverse_iterator
rbegin() noexcept rbegin() noexcept
{ return reverse_iterator(end()); } { return reverse_iterator(end()); }
const_reverse_iterator _GLIBCXX17_CONSTEXPR const_reverse_iterator
rbegin() const noexcept rbegin() const noexcept
{ return const_reverse_iterator(end()); } { return const_reverse_iterator(end()); }
reverse_iterator _GLIBCXX17_CONSTEXPR reverse_iterator
rend() noexcept rend() noexcept
{ return reverse_iterator(begin()); } { return reverse_iterator(begin()); }
const_reverse_iterator _GLIBCXX17_CONSTEXPR const_reverse_iterator
rend() const noexcept rend() const noexcept
{ return const_reverse_iterator(begin()); } { return const_reverse_iterator(begin()); }
const_iterator _GLIBCXX17_CONSTEXPR const_iterator
cbegin() const noexcept cbegin() const noexcept
{ return const_iterator(data()); } { return const_iterator(data()); }
const_iterator _GLIBCXX17_CONSTEXPR const_iterator
cend() const noexcept cend() const noexcept
{ return const_iterator(data() + _Nm); } { return const_iterator(data() + _Nm); }
const_reverse_iterator _GLIBCXX17_CONSTEXPR const_reverse_iterator
crbegin() const noexcept crbegin() const noexcept
{ return const_reverse_iterator(end()); } { return const_reverse_iterator(end()); }
const_reverse_iterator _GLIBCXX17_CONSTEXPR const_reverse_iterator
crend() const noexcept crend() const noexcept
{ return const_reverse_iterator(begin()); } { return const_reverse_iterator(begin()); }
...@@ -149,7 +149,7 @@ namespace __debug ...@@ -149,7 +149,7 @@ namespace __debug
empty() const noexcept { return size() == 0; } empty() const noexcept { return size() == 0; }
// Element access. // Element access.
reference _GLIBCXX17_CONSTEXPR reference
operator[](size_type __n) noexcept operator[](size_type __n) noexcept
{ {
__glibcxx_check_subscript(__n); __glibcxx_check_subscript(__n);
...@@ -164,7 +164,7 @@ namespace __debug ...@@ -164,7 +164,7 @@ namespace __debug
_AT_Type::_S_ref(_M_elems, 0)); _AT_Type::_S_ref(_M_elems, 0));
} }
reference _GLIBCXX17_CONSTEXPR reference
at(size_type __n) at(size_type __n)
{ {
if (__n >= _Nm) if (__n >= _Nm)
...@@ -186,7 +186,7 @@ namespace __debug ...@@ -186,7 +186,7 @@ namespace __debug
_AT_Type::_S_ref(_M_elems, 0)); _AT_Type::_S_ref(_M_elems, 0));
} }
reference _GLIBCXX17_CONSTEXPR reference
front() noexcept front() noexcept
{ {
__glibcxx_check_nonempty(); __glibcxx_check_nonempty();
...@@ -201,7 +201,7 @@ namespace __debug ...@@ -201,7 +201,7 @@ namespace __debug
_AT_Type::_S_ref(_M_elems, 0)); _AT_Type::_S_ref(_M_elems, 0));
} }
reference _GLIBCXX17_CONSTEXPR reference
back() noexcept back() noexcept
{ {
__glibcxx_check_nonempty(); __glibcxx_check_nonempty();
...@@ -216,11 +216,11 @@ namespace __debug ...@@ -216,11 +216,11 @@ namespace __debug
_AT_Type::_S_ref(_M_elems, 0)); _AT_Type::_S_ref(_M_elems, 0));
} }
pointer _GLIBCXX17_CONSTEXPR pointer
data() noexcept data() noexcept
{ return _AT_Type::_S_ptr(_M_elems); } { return _AT_Type::_S_ptr(_M_elems); }
const_pointer _GLIBCXX17_CONSTEXPR const_pointer
data() const noexcept data() const noexcept
{ return _AT_Type::_S_ptr(_M_elems); } { return _AT_Type::_S_ptr(_M_elems); }
}; };
......
...@@ -65,55 +65,55 @@ namespace __profile ...@@ -65,55 +65,55 @@ namespace __profile
void void
swap(array& __other) swap(array& __other)
noexcept(__is_nothrow_swappable<_Tp>::value) noexcept(_AT_Type::_Is_nothrow_swappable::value)
{ std::swap_ranges(begin(), end(), __other.begin()); } { std::swap_ranges(begin(), end(), __other.begin()); }
// Iterators. // Iterators.
iterator _GLIBCXX17_CONSTEXPR iterator
begin() noexcept begin() noexcept
{ return iterator(data()); } { return iterator(data()); }
const_iterator _GLIBCXX17_CONSTEXPR const_iterator
begin() const noexcept begin() const noexcept
{ return const_iterator(data()); } { return const_iterator(data()); }
iterator _GLIBCXX17_CONSTEXPR iterator
end() noexcept end() noexcept
{ return iterator(data() + _Nm); } { return iterator(data() + _Nm); }
const_iterator _GLIBCXX17_CONSTEXPR const_iterator
end() const noexcept end() const noexcept
{ return const_iterator(data() + _Nm); } { return const_iterator(data() + _Nm); }
reverse_iterator _GLIBCXX17_CONSTEXPR reverse_iterator
rbegin() noexcept rbegin() noexcept
{ return reverse_iterator(end()); } { return reverse_iterator(end()); }
const_reverse_iterator _GLIBCXX17_CONSTEXPR const_reverse_iterator
rbegin() const noexcept rbegin() const noexcept
{ return const_reverse_iterator(end()); } { return const_reverse_iterator(end()); }
reverse_iterator _GLIBCXX17_CONSTEXPR reverse_iterator
rend() noexcept rend() noexcept
{ return reverse_iterator(begin()); } { return reverse_iterator(begin()); }
const_reverse_iterator _GLIBCXX17_CONSTEXPR const_reverse_iterator
rend() const noexcept rend() const noexcept
{ return const_reverse_iterator(begin()); } { return const_reverse_iterator(begin()); }
const_iterator _GLIBCXX17_CONSTEXPR const_iterator
cbegin() const noexcept cbegin() const noexcept
{ return const_iterator(data()); } { return const_iterator(data()); }
const_iterator _GLIBCXX17_CONSTEXPR const_iterator
cend() const noexcept cend() const noexcept
{ return const_iterator(data() + _Nm); } { return const_iterator(data() + _Nm); }
const_reverse_iterator _GLIBCXX17_CONSTEXPR const_reverse_iterator
crbegin() const noexcept crbegin() const noexcept
{ return const_reverse_iterator(end()); } { return const_reverse_iterator(end()); }
const_reverse_iterator _GLIBCXX17_CONSTEXPR const_reverse_iterator
crend() const noexcept crend() const noexcept
{ return const_reverse_iterator(begin()); } { return const_reverse_iterator(begin()); }
...@@ -136,7 +136,7 @@ namespace __profile ...@@ -136,7 +136,7 @@ namespace __profile
operator[](size_type __n) const noexcept operator[](size_type __n) const noexcept
{ return _AT_Type::_S_ref(_M_elems, __n); } { return _AT_Type::_S_ref(_M_elems, __n); }
reference _GLIBCXX17_CONSTEXPR reference
at(size_type __n) at(size_type __n)
{ {
if (__n >= _Nm) if (__n >= _Nm)
...@@ -159,7 +159,7 @@ namespace __profile ...@@ -159,7 +159,7 @@ namespace __profile
_AT_Type::_S_ref(_M_elems, 0)); _AT_Type::_S_ref(_M_elems, 0));
} }
reference _GLIBCXX17_CONSTEXPR reference
front() noexcept front() noexcept
{ return *begin(); } { return *begin(); }
...@@ -167,7 +167,7 @@ namespace __profile ...@@ -167,7 +167,7 @@ namespace __profile
front() const noexcept front() const noexcept
{ return _AT_Type::_S_ref(_M_elems, 0); } { return _AT_Type::_S_ref(_M_elems, 0); }
reference _GLIBCXX17_CONSTEXPR reference
back() noexcept back() noexcept
{ return _Nm ? *(end() - 1) : *end(); } { return _Nm ? *(end() - 1) : *end(); }
...@@ -178,11 +178,11 @@ namespace __profile ...@@ -178,11 +178,11 @@ namespace __profile
: _AT_Type::_S_ref(_M_elems, 0); : _AT_Type::_S_ref(_M_elems, 0);
} }
pointer _GLIBCXX17_CONSTEXPR pointer
data() noexcept data() noexcept
{ return _AT_Type::_S_ptr(_M_elems); } { return _AT_Type::_S_ptr(_M_elems); }
const_pointer _GLIBCXX17_CONSTEXPR const_pointer
data() const noexcept data() const noexcept
{ return _AT_Type::_S_ptr(_M_elems); } { return _AT_Type::_S_ptr(_M_elems); }
}; };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment