Commit 34e6625a by Marc Glisse Committed by Marc Glisse

re PR libstdc++/58338 (Add noexcept to functions with a narrow contract)

2013-09-25  Marc Glisse  <marc.glisse@inria.fr>

	PR libstdc++/58338
	* include/bits/forward_list.h (_Fwd_list_node_base::_M_transfer_after):
	Mark as noexcept.
	(_Fwd_list_iterator) [_Fwd_list_iterator, operator*, operator->,
	operator++, operator==, operator!=, _M_next]: Likewise.
	(_Fwd_list_const_iterator) [_Fwd_list_const_iterator, operator*,
	operator->, operator++, operator==, operator!=, _M_next]: Likewise.
	(operator==(const _Fwd_list_iterator&, const _Fwd_list_const_iterator&),
	operator!=(const _Fwd_list_iterator&, const _Fwd_list_const_iterator&)):
	Likewise.
	* include/bits/hashtable_policy.h (_Hash_node_base::_Hash_node_base,
	_Hash_node::_M_next, _Node_iterator_base::_Node_iterator_base,
	_Node_iterator_base::_M_incr, operator==(const _Node_iterator_base&,
	const _Node_iterator_base&), operator!=(const _Node_iterator_base&,
	const _Node_iterator_base&)): Likewise.
	(_Node_iterator) [_Node_iterator, operator*, operator->, operator++]:
	Likewise.
	(_Node_const_iterator) [_Node_const_iterator, operator*, operator->,
	operator++]: Likewise.
	* include/debug/safe_iterator.h (_Safe_iterator) [_Safe_iterator,
	operator=, operator*, operator->, operator++, operator--, operator[],
	operator+=, operator+, operator-=, operator-, base, operator _Iterator]:
	Likewise.
	(operator==(const _Safe_iterator&, const _Safe_iterator&),
	operator!=(const _Safe_iterator&, const _Safe_iterator&),
	operator<(const _Safe_iterator&, const _Safe_iterator&),
	operator<=(const _Safe_iterator&, const _Safe_iterator&),
	operator>(const _Safe_iterator&, const _Safe_iterator&),
	operator>=(const _Safe_iterator&, const _Safe_iterator&),
	operator-(const _Safe_iterator&, const _Safe_iterator&),
	operator+(difference_type, const _Safe_iterator&)): Likewise.
	* include/profile/iterator_tracker.h (__iterator_tracker)
	[__iterator_tracker, base, operator _Iterator, operator->, operator++,
	operator--, operator=, operator*, operator[], operator+=, operator+,
	operator-=, operator-]: Likewise.
	(operator==(const __iterator_tracker&, const __iterator_tracker&),
	operator!=(const __iterator_tracker&, const __iterator_tracker&),
	operator<(const __iterator_tracker&, const __iterator_tracker&),
	operator<=(const __iterator_tracker&, const __iterator_tracker&),
	operator>(const __iterator_tracker&, const __iterator_tracker&),
	operator>=(const __iterator_tracker&, const __iterator_tracker&),
	operator-(const __iterator_tracker&, const __iterator_tracker&),
	operator+(difference_type, const __iterator_tracker&)): Likewise.

From-SVN: r202924
parent 7017a7a9
2013-09-25 Marc Glisse <marc.glisse@inria.fr>
PR libstdc++/58338
* include/bits/forward_list.h (_Fwd_list_node_base::_M_transfer_after):
Mark as noexcept.
(_Fwd_list_iterator) [_Fwd_list_iterator, operator*, operator->,
operator++, operator==, operator!=, _M_next]: Likewise.
(_Fwd_list_const_iterator) [_Fwd_list_const_iterator, operator*,
operator->, operator++, operator==, operator!=, _M_next]: Likewise.
(operator==(const _Fwd_list_iterator&, const _Fwd_list_const_iterator&),
operator!=(const _Fwd_list_iterator&, const _Fwd_list_const_iterator&)):
Likewise.
* include/bits/hashtable_policy.h (_Hash_node_base::_Hash_node_base,
_Hash_node::_M_next, _Node_iterator_base::_Node_iterator_base,
_Node_iterator_base::_M_incr, operator==(const _Node_iterator_base&,
const _Node_iterator_base&), operator!=(const _Node_iterator_base&,
const _Node_iterator_base&)): Likewise.
(_Node_iterator) [_Node_iterator, operator*, operator->, operator++]:
Likewise.
(_Node_const_iterator) [_Node_const_iterator, operator*, operator->,
operator++]: Likewise.
* include/debug/safe_iterator.h (_Safe_iterator) [_Safe_iterator,
operator=, operator*, operator->, operator++, operator--, operator[],
operator+=, operator+, operator-=, operator-, base, operator _Iterator]:
Likewise.
(operator==(const _Safe_iterator&, const _Safe_iterator&),
operator!=(const _Safe_iterator&, const _Safe_iterator&),
operator<(const _Safe_iterator&, const _Safe_iterator&),
operator<=(const _Safe_iterator&, const _Safe_iterator&),
operator>(const _Safe_iterator&, const _Safe_iterator&),
operator>=(const _Safe_iterator&, const _Safe_iterator&),
operator-(const _Safe_iterator&, const _Safe_iterator&),
operator+(difference_type, const _Safe_iterator&)): Likewise.
* include/profile/iterator_tracker.h (__iterator_tracker)
[__iterator_tracker, base, operator _Iterator, operator->, operator++,
operator--, operator=, operator*, operator[], operator+=, operator+,
operator-=, operator-]: Likewise.
(operator==(const __iterator_tracker&, const __iterator_tracker&),
operator!=(const __iterator_tracker&, const __iterator_tracker&),
operator<(const __iterator_tracker&, const __iterator_tracker&),
operator<=(const __iterator_tracker&, const __iterator_tracker&),
operator>(const __iterator_tracker&, const __iterator_tracker&),
operator>=(const __iterator_tracker&, const __iterator_tracker&),
operator-(const __iterator_tracker&, const __iterator_tracker&),
operator+(difference_type, const __iterator_tracker&)): Likewise.
2013-09-24 Marc Glisse <marc.glisse@inria.fr> 2013-09-24 Marc Glisse <marc.glisse@inria.fr>
PR libstdc++/58338 PR libstdc++/58338
......
...@@ -58,7 +58,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER ...@@ -58,7 +58,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
_Fwd_list_node_base* _Fwd_list_node_base*
_M_transfer_after(_Fwd_list_node_base* __begin, _M_transfer_after(_Fwd_list_node_base* __begin,
_Fwd_list_node_base* __end) _Fwd_list_node_base* __end) noexcept
{ {
_Fwd_list_node_base* __keep = __begin->_M_next; _Fwd_list_node_base* __keep = __begin->_M_next;
if (__end) if (__end)
...@@ -128,30 +128,30 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER ...@@ -128,30 +128,30 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
typedef ptrdiff_t difference_type; typedef ptrdiff_t difference_type;
typedef std::forward_iterator_tag iterator_category; typedef std::forward_iterator_tag iterator_category;
_Fwd_list_iterator() _Fwd_list_iterator() noexcept
: _M_node() { } : _M_node() { }
explicit explicit
_Fwd_list_iterator(_Fwd_list_node_base* __n) _Fwd_list_iterator(_Fwd_list_node_base* __n) noexcept
: _M_node(__n) { } : _M_node(__n) { }
reference reference
operator*() const operator*() const noexcept
{ return *static_cast<_Node*>(this->_M_node)->_M_valptr(); } { return *static_cast<_Node*>(this->_M_node)->_M_valptr(); }
pointer pointer
operator->() const operator->() const noexcept
{ return static_cast<_Node*>(this->_M_node)->_M_valptr(); } { return static_cast<_Node*>(this->_M_node)->_M_valptr(); }
_Self& _Self&
operator++() operator++() noexcept
{ {
_M_node = _M_node->_M_next; _M_node = _M_node->_M_next;
return *this; return *this;
} }
_Self _Self
operator++(int) operator++(int) noexcept
{ {
_Self __tmp(*this); _Self __tmp(*this);
_M_node = _M_node->_M_next; _M_node = _M_node->_M_next;
...@@ -159,15 +159,15 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER ...@@ -159,15 +159,15 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
} }
bool bool
operator==(const _Self& __x) const operator==(const _Self& __x) const noexcept
{ return _M_node == __x._M_node; } { return _M_node == __x._M_node; }
bool bool
operator!=(const _Self& __x) const operator!=(const _Self& __x) const noexcept
{ return _M_node != __x._M_node; } { return _M_node != __x._M_node; }
_Self _Self
_M_next() const _M_next() const noexcept
{ {
if (_M_node) if (_M_node)
return _Fwd_list_iterator(_M_node->_M_next); return _Fwd_list_iterator(_M_node->_M_next);
...@@ -196,33 +196,33 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER ...@@ -196,33 +196,33 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
typedef ptrdiff_t difference_type; typedef ptrdiff_t difference_type;
typedef std::forward_iterator_tag iterator_category; typedef std::forward_iterator_tag iterator_category;
_Fwd_list_const_iterator() _Fwd_list_const_iterator() noexcept
: _M_node() { } : _M_node() { }
explicit explicit
_Fwd_list_const_iterator(const _Fwd_list_node_base* __n) _Fwd_list_const_iterator(const _Fwd_list_node_base* __n) noexcept
: _M_node(__n) { } : _M_node(__n) { }
_Fwd_list_const_iterator(const iterator& __iter) _Fwd_list_const_iterator(const iterator& __iter) noexcept
: _M_node(__iter._M_node) { } : _M_node(__iter._M_node) { }
reference reference
operator*() const operator*() const noexcept
{ return *static_cast<_Node*>(this->_M_node)->_M_valptr(); } { return *static_cast<_Node*>(this->_M_node)->_M_valptr(); }
pointer pointer
operator->() const operator->() const noexcept
{ return static_cast<_Node*>(this->_M_node)->_M_valptr(); } { return static_cast<_Node*>(this->_M_node)->_M_valptr(); }
_Self& _Self&
operator++() operator++() noexcept
{ {
_M_node = _M_node->_M_next; _M_node = _M_node->_M_next;
return *this; return *this;
} }
_Self _Self
operator++(int) operator++(int) noexcept
{ {
_Self __tmp(*this); _Self __tmp(*this);
_M_node = _M_node->_M_next; _M_node = _M_node->_M_next;
...@@ -230,15 +230,15 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER ...@@ -230,15 +230,15 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
} }
bool bool
operator==(const _Self& __x) const operator==(const _Self& __x) const noexcept
{ return _M_node == __x._M_node; } { return _M_node == __x._M_node; }
bool bool
operator!=(const _Self& __x) const operator!=(const _Self& __x) const noexcept
{ return _M_node != __x._M_node; } { return _M_node != __x._M_node; }
_Self _Self
_M_next() const _M_next() const noexcept
{ {
if (this->_M_node) if (this->_M_node)
return _Fwd_list_const_iterator(_M_node->_M_next); return _Fwd_list_const_iterator(_M_node->_M_next);
...@@ -255,7 +255,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER ...@@ -255,7 +255,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
template<typename _Tp> template<typename _Tp>
inline bool inline bool
operator==(const _Fwd_list_iterator<_Tp>& __x, operator==(const _Fwd_list_iterator<_Tp>& __x,
const _Fwd_list_const_iterator<_Tp>& __y) const _Fwd_list_const_iterator<_Tp>& __y) noexcept
{ return __x._M_node == __y._M_node; } { return __x._M_node == __y._M_node; }
/** /**
...@@ -264,7 +264,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER ...@@ -264,7 +264,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
template<typename _Tp> template<typename _Tp>
inline bool inline bool
operator!=(const _Fwd_list_iterator<_Tp>& __x, operator!=(const _Fwd_list_iterator<_Tp>& __x,
const _Fwd_list_const_iterator<_Tp>& __y) const _Fwd_list_const_iterator<_Tp>& __y) noexcept
{ return __x._M_node != __y._M_node; } { return __x._M_node != __y._M_node; }
/** /**
......
...@@ -230,9 +230,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -230,9 +230,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ {
_Hash_node_base* _M_nxt; _Hash_node_base* _M_nxt;
_Hash_node_base() : _M_nxt() { } _Hash_node_base() noexcept : _M_nxt() { }
_Hash_node_base(_Hash_node_base* __next) : _M_nxt(__next) { } _Hash_node_base(_Hash_node_base* __next) noexcept : _M_nxt(__next) { }
}; };
/** /**
...@@ -281,7 +281,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -281,7 +281,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
std::size_t _M_hash_code; std::size_t _M_hash_code;
_Hash_node* _Hash_node*
_M_next() const { return static_cast<_Hash_node*>(this->_M_nxt); } _M_next() const noexcept
{ return static_cast<_Hash_node*>(this->_M_nxt); }
}; };
/** /**
...@@ -293,7 +294,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -293,7 +294,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
struct _Hash_node<_Value, false> : _Hash_node_value_base<_Value> struct _Hash_node<_Value, false> : _Hash_node_value_base<_Value>
{ {
_Hash_node* _Hash_node*
_M_next() const { return static_cast<_Hash_node*>(this->_M_nxt); } _M_next() const noexcept
{ return static_cast<_Hash_node*>(this->_M_nxt); }
}; };
/// Base class for node iterators. /// Base class for node iterators.
...@@ -304,11 +306,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -304,11 +306,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__node_type* _M_cur; __node_type* _M_cur;
_Node_iterator_base(__node_type* __p) _Node_iterator_base(__node_type* __p) noexcept
: _M_cur(__p) { } : _M_cur(__p) { }
void void
_M_incr() _M_incr() noexcept
{ _M_cur = _M_cur->_M_next(); } { _M_cur = _M_cur->_M_next(); }
}; };
...@@ -316,12 +318,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -316,12 +318,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
inline bool inline bool
operator==(const _Node_iterator_base<_Value, _Cache_hash_code>& __x, operator==(const _Node_iterator_base<_Value, _Cache_hash_code>& __x,
const _Node_iterator_base<_Value, _Cache_hash_code >& __y) const _Node_iterator_base<_Value, _Cache_hash_code >& __y)
noexcept
{ return __x._M_cur == __y._M_cur; } { return __x._M_cur == __y._M_cur; }
template<typename _Value, bool _Cache_hash_code> template<typename _Value, bool _Cache_hash_code>
inline bool inline bool
operator!=(const _Node_iterator_base<_Value, _Cache_hash_code>& __x, operator!=(const _Node_iterator_base<_Value, _Cache_hash_code>& __x,
const _Node_iterator_base<_Value, _Cache_hash_code>& __y) const _Node_iterator_base<_Value, _Cache_hash_code>& __y)
noexcept
{ return __x._M_cur != __y._M_cur; } { return __x._M_cur != __y._M_cur; }
/// Node iterators, used to iterate through all the hashtable. /// Node iterators, used to iterate through all the hashtable.
...@@ -344,30 +348,30 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -344,30 +348,30 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
using reference = typename std::conditional<__constant_iterators, using reference = typename std::conditional<__constant_iterators,
const _Value&, _Value&>::type; const _Value&, _Value&>::type;
_Node_iterator() _Node_iterator() noexcept
: __base_type(0) { } : __base_type(0) { }
explicit explicit
_Node_iterator(__node_type* __p) _Node_iterator(__node_type* __p) noexcept
: __base_type(__p) { } : __base_type(__p) { }
reference reference
operator*() const operator*() const noexcept
{ return this->_M_cur->_M_v(); } { return this->_M_cur->_M_v(); }
pointer pointer
operator->() const operator->() const noexcept
{ return this->_M_cur->_M_valptr(); } { return this->_M_cur->_M_valptr(); }
_Node_iterator& _Node_iterator&
operator++() operator++() noexcept
{ {
this->_M_incr(); this->_M_incr();
return *this; return *this;
} }
_Node_iterator _Node_iterator
operator++(int) operator++(int) noexcept
{ {
_Node_iterator __tmp(*this); _Node_iterator __tmp(*this);
this->_M_incr(); this->_M_incr();
...@@ -392,34 +396,34 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -392,34 +396,34 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
typedef const _Value* pointer; typedef const _Value* pointer;
typedef const _Value& reference; typedef const _Value& reference;
_Node_const_iterator() _Node_const_iterator() noexcept
: __base_type(0) { } : __base_type(0) { }
explicit explicit
_Node_const_iterator(__node_type* __p) _Node_const_iterator(__node_type* __p) noexcept
: __base_type(__p) { } : __base_type(__p) { }
_Node_const_iterator(const _Node_iterator<_Value, __constant_iterators, _Node_const_iterator(const _Node_iterator<_Value, __constant_iterators,
__cache>& __x) __cache>& __x) noexcept
: __base_type(__x._M_cur) { } : __base_type(__x._M_cur) { }
reference reference
operator*() const operator*() const noexcept
{ return this->_M_cur->_M_v(); } { return this->_M_cur->_M_v(); }
pointer pointer
operator->() const operator->() const noexcept
{ return this->_M_cur->_M_valptr(); } { return this->_M_cur->_M_valptr(); }
_Node_const_iterator& _Node_const_iterator&
operator++() operator++() noexcept
{ {
this->_M_incr(); this->_M_incr();
return *this; return *this;
} }
_Node_const_iterator _Node_const_iterator
operator++(int) operator++(int) noexcept
{ {
_Node_const_iterator __tmp(*this); _Node_const_iterator __tmp(*this);
this->_M_incr(); this->_M_incr();
......
...@@ -139,7 +139,7 @@ namespace __gnu_debug ...@@ -139,7 +139,7 @@ namespace __gnu_debug
typedef typename _Traits::pointer pointer; typedef typename _Traits::pointer pointer;
/// @post the iterator is singular and unattached /// @post the iterator is singular and unattached
_Safe_iterator() : _M_current() { } _Safe_iterator() _GLIBCXX_NOEXCEPT : _M_current() { }
/** /**
* @brief Safe iterator construction from an unsafe iterator and * @brief Safe iterator construction from an unsafe iterator and
...@@ -149,6 +149,7 @@ namespace __gnu_debug ...@@ -149,6 +149,7 @@ namespace __gnu_debug
* @post this is not singular * @post this is not singular
*/ */
_Safe_iterator(const _Iterator& __i, const _Sequence* __seq) _Safe_iterator(const _Iterator& __i, const _Sequence* __seq)
_GLIBCXX_NOEXCEPT
: _Safe_iterator_base(__seq, _M_constant()), _M_current(__i) : _Safe_iterator_base(__seq, _M_constant()), _M_current(__i)
{ {
_GLIBCXX_DEBUG_VERIFY(! this->_M_singular(), _GLIBCXX_DEBUG_VERIFY(! this->_M_singular(),
...@@ -159,7 +160,7 @@ namespace __gnu_debug ...@@ -159,7 +160,7 @@ namespace __gnu_debug
/** /**
* @brief Copy construction. * @brief Copy construction.
*/ */
_Safe_iterator(const _Safe_iterator& __x) _Safe_iterator(const _Safe_iterator& __x) _GLIBCXX_NOEXCEPT
: _Safe_iterator_base(__x, _M_constant()), _M_current(__x._M_current) : _Safe_iterator_base(__x, _M_constant()), _M_current(__x._M_current)
{ {
// _GLIBCXX_RESOLVE_LIB_DEFECTS // _GLIBCXX_RESOLVE_LIB_DEFECTS
...@@ -176,7 +177,7 @@ namespace __gnu_debug ...@@ -176,7 +177,7 @@ namespace __gnu_debug
* @brief Move construction. * @brief Move construction.
* @post __x is singular and unattached * @post __x is singular and unattached
*/ */
_Safe_iterator(_Safe_iterator&& __x) : _M_current() _Safe_iterator(_Safe_iterator&& __x) noexcept : _M_current()
{ {
_GLIBCXX_DEBUG_VERIFY(!__x._M_singular() _GLIBCXX_DEBUG_VERIFY(!__x._M_singular()
|| __x._M_current == _Iterator(), || __x._M_current == _Iterator(),
...@@ -198,7 +199,7 @@ namespace __gnu_debug ...@@ -198,7 +199,7 @@ namespace __gnu_debug
const _Safe_iterator<_MutableIterator, const _Safe_iterator<_MutableIterator,
typename __gnu_cxx::__enable_if<(std::__are_same<_MutableIterator, typename __gnu_cxx::__enable_if<(std::__are_same<_MutableIterator,
typename _Sequence::iterator::iterator_type>::__value), typename _Sequence::iterator::iterator_type>::__value),
_Sequence>::__type>& __x) _Sequence>::__type>& __x) _GLIBCXX_NOEXCEPT
: _Safe_iterator_base(__x, _M_constant()), _M_current(__x.base()) : _Safe_iterator_base(__x, _M_constant()), _M_current(__x.base())
{ {
// _GLIBCXX_RESOLVE_LIB_DEFECTS // _GLIBCXX_RESOLVE_LIB_DEFECTS
...@@ -214,7 +215,7 @@ namespace __gnu_debug ...@@ -214,7 +215,7 @@ namespace __gnu_debug
* @brief Copy assignment. * @brief Copy assignment.
*/ */
_Safe_iterator& _Safe_iterator&
operator=(const _Safe_iterator& __x) operator=(const _Safe_iterator& __x) _GLIBCXX_NOEXCEPT
{ {
// _GLIBCXX_RESOLVE_LIB_DEFECTS // _GLIBCXX_RESOLVE_LIB_DEFECTS
// DR 408. Is vector<reverse_iterator<char*> > forbidden? // DR 408. Is vector<reverse_iterator<char*> > forbidden?
...@@ -234,7 +235,7 @@ namespace __gnu_debug ...@@ -234,7 +235,7 @@ namespace __gnu_debug
* @post __x is singular and unattached * @post __x is singular and unattached
*/ */
_Safe_iterator& _Safe_iterator&
operator=(_Safe_iterator&& __x) operator=(_Safe_iterator&& __x) noexcept
{ {
_GLIBCXX_DEBUG_VERIFY(this != &__x, _GLIBCXX_DEBUG_VERIFY(this != &__x,
_M_message(__msg_self_move_assign) _M_message(__msg_self_move_assign)
...@@ -257,7 +258,7 @@ namespace __gnu_debug ...@@ -257,7 +258,7 @@ namespace __gnu_debug
* @pre iterator is dereferenceable * @pre iterator is dereferenceable
*/ */
reference reference
operator*() const operator*() const _GLIBCXX_NOEXCEPT
{ {
_GLIBCXX_DEBUG_VERIFY(this->_M_dereferenceable(), _GLIBCXX_DEBUG_VERIFY(this->_M_dereferenceable(),
_M_message(__msg_bad_deref) _M_message(__msg_bad_deref)
...@@ -271,7 +272,7 @@ namespace __gnu_debug ...@@ -271,7 +272,7 @@ namespace __gnu_debug
* @todo Make this correct w.r.t. iterators that return proxies * @todo Make this correct w.r.t. iterators that return proxies
*/ */
pointer pointer
operator->() const operator->() const _GLIBCXX_NOEXCEPT
{ {
_GLIBCXX_DEBUG_VERIFY(this->_M_dereferenceable(), _GLIBCXX_DEBUG_VERIFY(this->_M_dereferenceable(),
_M_message(__msg_bad_deref) _M_message(__msg_bad_deref)
...@@ -285,7 +286,7 @@ namespace __gnu_debug ...@@ -285,7 +286,7 @@ namespace __gnu_debug
* @pre iterator is incrementable * @pre iterator is incrementable
*/ */
_Safe_iterator& _Safe_iterator&
operator++() operator++() _GLIBCXX_NOEXCEPT
{ {
_GLIBCXX_DEBUG_VERIFY(this->_M_incrementable(), _GLIBCXX_DEBUG_VERIFY(this->_M_incrementable(),
_M_message(__msg_bad_inc) _M_message(__msg_bad_inc)
...@@ -299,7 +300,7 @@ namespace __gnu_debug ...@@ -299,7 +300,7 @@ namespace __gnu_debug
* @pre iterator is incrementable * @pre iterator is incrementable
*/ */
_Safe_iterator _Safe_iterator
operator++(int) operator++(int) _GLIBCXX_NOEXCEPT
{ {
_GLIBCXX_DEBUG_VERIFY(this->_M_incrementable(), _GLIBCXX_DEBUG_VERIFY(this->_M_incrementable(),
_M_message(__msg_bad_inc) _M_message(__msg_bad_inc)
...@@ -315,7 +316,7 @@ namespace __gnu_debug ...@@ -315,7 +316,7 @@ namespace __gnu_debug
* @pre iterator is decrementable * @pre iterator is decrementable
*/ */
_Safe_iterator& _Safe_iterator&
operator--() operator--() _GLIBCXX_NOEXCEPT
{ {
_GLIBCXX_DEBUG_VERIFY(this->_M_decrementable(), _GLIBCXX_DEBUG_VERIFY(this->_M_decrementable(),
_M_message(__msg_bad_dec) _M_message(__msg_bad_dec)
...@@ -329,7 +330,7 @@ namespace __gnu_debug ...@@ -329,7 +330,7 @@ namespace __gnu_debug
* @pre iterator is decrementable * @pre iterator is decrementable
*/ */
_Safe_iterator _Safe_iterator
operator--(int) operator--(int) _GLIBCXX_NOEXCEPT
{ {
_GLIBCXX_DEBUG_VERIFY(this->_M_decrementable(), _GLIBCXX_DEBUG_VERIFY(this->_M_decrementable(),
_M_message(__msg_bad_dec) _M_message(__msg_bad_dec)
...@@ -341,7 +342,7 @@ namespace __gnu_debug ...@@ -341,7 +342,7 @@ namespace __gnu_debug
// ------ Random access iterator requirements ------ // ------ Random access iterator requirements ------
reference reference
operator[](const difference_type& __n) const operator[](const difference_type& __n) const _GLIBCXX_NOEXCEPT
{ {
_GLIBCXX_DEBUG_VERIFY(this->_M_can_advance(__n) _GLIBCXX_DEBUG_VERIFY(this->_M_can_advance(__n)
&& this->_M_can_advance(__n+1), && this->_M_can_advance(__n+1),
...@@ -352,7 +353,7 @@ namespace __gnu_debug ...@@ -352,7 +353,7 @@ namespace __gnu_debug
} }
_Safe_iterator& _Safe_iterator&
operator+=(const difference_type& __n) operator+=(const difference_type& __n) _GLIBCXX_NOEXCEPT
{ {
_GLIBCXX_DEBUG_VERIFY(this->_M_can_advance(__n), _GLIBCXX_DEBUG_VERIFY(this->_M_can_advance(__n),
_M_message(__msg_advance_oob) _M_message(__msg_advance_oob)
...@@ -362,7 +363,7 @@ namespace __gnu_debug ...@@ -362,7 +363,7 @@ namespace __gnu_debug
} }
_Safe_iterator _Safe_iterator
operator+(const difference_type& __n) const operator+(const difference_type& __n) const _GLIBCXX_NOEXCEPT
{ {
_Safe_iterator __tmp(*this); _Safe_iterator __tmp(*this);
__tmp += __n; __tmp += __n;
...@@ -370,7 +371,7 @@ namespace __gnu_debug ...@@ -370,7 +371,7 @@ namespace __gnu_debug
} }
_Safe_iterator& _Safe_iterator&
operator-=(const difference_type& __n) operator-=(const difference_type& __n) _GLIBCXX_NOEXCEPT
{ {
_GLIBCXX_DEBUG_VERIFY(this->_M_can_advance(-__n), _GLIBCXX_DEBUG_VERIFY(this->_M_can_advance(-__n),
_M_message(__msg_retreat_oob) _M_message(__msg_retreat_oob)
...@@ -380,7 +381,7 @@ namespace __gnu_debug ...@@ -380,7 +381,7 @@ namespace __gnu_debug
} }
_Safe_iterator _Safe_iterator
operator-(const difference_type& __n) const operator-(const difference_type& __n) const _GLIBCXX_NOEXCEPT
{ {
_Safe_iterator __tmp(*this); _Safe_iterator __tmp(*this);
__tmp -= __n; __tmp -= __n;
...@@ -392,13 +393,13 @@ namespace __gnu_debug ...@@ -392,13 +393,13 @@ namespace __gnu_debug
* @brief Return the underlying iterator * @brief Return the underlying iterator
*/ */
_Iterator _Iterator
base() const { return _M_current; } base() const _GLIBCXX_NOEXCEPT { return _M_current; }
/** /**
* @brief Conversion to underlying non-debug iterator to allow * @brief Conversion to underlying non-debug iterator to allow
* better interaction with non-debug containers. * better interaction with non-debug containers.
*/ */
operator _Iterator() const { return _M_current; } operator _Iterator() const _GLIBCXX_NOEXCEPT { return _M_current; }
/** Attach iterator to the given sequence. */ /** Attach iterator to the given sequence. */
void void
...@@ -482,6 +483,7 @@ namespace __gnu_debug ...@@ -482,6 +483,7 @@ namespace __gnu_debug
inline bool inline bool
operator==(const _Safe_iterator<_IteratorL, _Sequence>& __lhs, operator==(const _Safe_iterator<_IteratorL, _Sequence>& __lhs,
const _Safe_iterator<_IteratorR, _Sequence>& __rhs) const _Safe_iterator<_IteratorR, _Sequence>& __rhs)
_GLIBCXX_NOEXCEPT
{ {
_GLIBCXX_DEBUG_VERIFY(! __lhs._M_singular() && ! __rhs._M_singular(), _GLIBCXX_DEBUG_VERIFY(! __lhs._M_singular() && ! __rhs._M_singular(),
_M_message(__msg_iter_compare_bad) _M_message(__msg_iter_compare_bad)
...@@ -498,6 +500,7 @@ namespace __gnu_debug ...@@ -498,6 +500,7 @@ namespace __gnu_debug
inline bool inline bool
operator==(const _Safe_iterator<_Iterator, _Sequence>& __lhs, operator==(const _Safe_iterator<_Iterator, _Sequence>& __lhs,
const _Safe_iterator<_Iterator, _Sequence>& __rhs) const _Safe_iterator<_Iterator, _Sequence>& __rhs)
_GLIBCXX_NOEXCEPT
{ {
_GLIBCXX_DEBUG_VERIFY(! __lhs._M_singular() && ! __rhs._M_singular(), _GLIBCXX_DEBUG_VERIFY(! __lhs._M_singular() && ! __rhs._M_singular(),
_M_message(__msg_iter_compare_bad) _M_message(__msg_iter_compare_bad)
...@@ -514,6 +517,7 @@ namespace __gnu_debug ...@@ -514,6 +517,7 @@ namespace __gnu_debug
inline bool inline bool
operator!=(const _Safe_iterator<_IteratorL, _Sequence>& __lhs, operator!=(const _Safe_iterator<_IteratorL, _Sequence>& __lhs,
const _Safe_iterator<_IteratorR, _Sequence>& __rhs) const _Safe_iterator<_IteratorR, _Sequence>& __rhs)
_GLIBCXX_NOEXCEPT
{ {
_GLIBCXX_DEBUG_VERIFY(! __lhs._M_singular() && ! __rhs._M_singular(), _GLIBCXX_DEBUG_VERIFY(! __lhs._M_singular() && ! __rhs._M_singular(),
_M_message(__msg_iter_compare_bad) _M_message(__msg_iter_compare_bad)
...@@ -530,6 +534,7 @@ namespace __gnu_debug ...@@ -530,6 +534,7 @@ namespace __gnu_debug
inline bool inline bool
operator!=(const _Safe_iterator<_Iterator, _Sequence>& __lhs, operator!=(const _Safe_iterator<_Iterator, _Sequence>& __lhs,
const _Safe_iterator<_Iterator, _Sequence>& __rhs) const _Safe_iterator<_Iterator, _Sequence>& __rhs)
_GLIBCXX_NOEXCEPT
{ {
_GLIBCXX_DEBUG_VERIFY(! __lhs._M_singular() && ! __rhs._M_singular(), _GLIBCXX_DEBUG_VERIFY(! __lhs._M_singular() && ! __rhs._M_singular(),
_M_message(__msg_iter_compare_bad) _M_message(__msg_iter_compare_bad)
...@@ -546,6 +551,7 @@ namespace __gnu_debug ...@@ -546,6 +551,7 @@ namespace __gnu_debug
inline bool inline bool
operator<(const _Safe_iterator<_IteratorL, _Sequence>& __lhs, operator<(const _Safe_iterator<_IteratorL, _Sequence>& __lhs,
const _Safe_iterator<_IteratorR, _Sequence>& __rhs) const _Safe_iterator<_IteratorR, _Sequence>& __rhs)
_GLIBCXX_NOEXCEPT
{ {
_GLIBCXX_DEBUG_VERIFY(! __lhs._M_singular() && ! __rhs._M_singular(), _GLIBCXX_DEBUG_VERIFY(! __lhs._M_singular() && ! __rhs._M_singular(),
_M_message(__msg_iter_order_bad) _M_message(__msg_iter_order_bad)
...@@ -562,6 +568,7 @@ namespace __gnu_debug ...@@ -562,6 +568,7 @@ namespace __gnu_debug
inline bool inline bool
operator<(const _Safe_iterator<_Iterator, _Sequence>& __lhs, operator<(const _Safe_iterator<_Iterator, _Sequence>& __lhs,
const _Safe_iterator<_Iterator, _Sequence>& __rhs) const _Safe_iterator<_Iterator, _Sequence>& __rhs)
_GLIBCXX_NOEXCEPT
{ {
_GLIBCXX_DEBUG_VERIFY(! __lhs._M_singular() && ! __rhs._M_singular(), _GLIBCXX_DEBUG_VERIFY(! __lhs._M_singular() && ! __rhs._M_singular(),
_M_message(__msg_iter_order_bad) _M_message(__msg_iter_order_bad)
...@@ -578,6 +585,7 @@ namespace __gnu_debug ...@@ -578,6 +585,7 @@ namespace __gnu_debug
inline bool inline bool
operator<=(const _Safe_iterator<_IteratorL, _Sequence>& __lhs, operator<=(const _Safe_iterator<_IteratorL, _Sequence>& __lhs,
const _Safe_iterator<_IteratorR, _Sequence>& __rhs) const _Safe_iterator<_IteratorR, _Sequence>& __rhs)
_GLIBCXX_NOEXCEPT
{ {
_GLIBCXX_DEBUG_VERIFY(! __lhs._M_singular() && ! __rhs._M_singular(), _GLIBCXX_DEBUG_VERIFY(! __lhs._M_singular() && ! __rhs._M_singular(),
_M_message(__msg_iter_order_bad) _M_message(__msg_iter_order_bad)
...@@ -594,6 +602,7 @@ namespace __gnu_debug ...@@ -594,6 +602,7 @@ namespace __gnu_debug
inline bool inline bool
operator<=(const _Safe_iterator<_Iterator, _Sequence>& __lhs, operator<=(const _Safe_iterator<_Iterator, _Sequence>& __lhs,
const _Safe_iterator<_Iterator, _Sequence>& __rhs) const _Safe_iterator<_Iterator, _Sequence>& __rhs)
_GLIBCXX_NOEXCEPT
{ {
_GLIBCXX_DEBUG_VERIFY(! __lhs._M_singular() && ! __rhs._M_singular(), _GLIBCXX_DEBUG_VERIFY(! __lhs._M_singular() && ! __rhs._M_singular(),
_M_message(__msg_iter_order_bad) _M_message(__msg_iter_order_bad)
...@@ -610,6 +619,7 @@ namespace __gnu_debug ...@@ -610,6 +619,7 @@ namespace __gnu_debug
inline bool inline bool
operator>(const _Safe_iterator<_IteratorL, _Sequence>& __lhs, operator>(const _Safe_iterator<_IteratorL, _Sequence>& __lhs,
const _Safe_iterator<_IteratorR, _Sequence>& __rhs) const _Safe_iterator<_IteratorR, _Sequence>& __rhs)
_GLIBCXX_NOEXCEPT
{ {
_GLIBCXX_DEBUG_VERIFY(! __lhs._M_singular() && ! __rhs._M_singular(), _GLIBCXX_DEBUG_VERIFY(! __lhs._M_singular() && ! __rhs._M_singular(),
_M_message(__msg_iter_order_bad) _M_message(__msg_iter_order_bad)
...@@ -626,6 +636,7 @@ namespace __gnu_debug ...@@ -626,6 +636,7 @@ namespace __gnu_debug
inline bool inline bool
operator>(const _Safe_iterator<_Iterator, _Sequence>& __lhs, operator>(const _Safe_iterator<_Iterator, _Sequence>& __lhs,
const _Safe_iterator<_Iterator, _Sequence>& __rhs) const _Safe_iterator<_Iterator, _Sequence>& __rhs)
_GLIBCXX_NOEXCEPT
{ {
_GLIBCXX_DEBUG_VERIFY(! __lhs._M_singular() && ! __rhs._M_singular(), _GLIBCXX_DEBUG_VERIFY(! __lhs._M_singular() && ! __rhs._M_singular(),
_M_message(__msg_iter_order_bad) _M_message(__msg_iter_order_bad)
...@@ -642,6 +653,7 @@ namespace __gnu_debug ...@@ -642,6 +653,7 @@ namespace __gnu_debug
inline bool inline bool
operator>=(const _Safe_iterator<_IteratorL, _Sequence>& __lhs, operator>=(const _Safe_iterator<_IteratorL, _Sequence>& __lhs,
const _Safe_iterator<_IteratorR, _Sequence>& __rhs) const _Safe_iterator<_IteratorR, _Sequence>& __rhs)
_GLIBCXX_NOEXCEPT
{ {
_GLIBCXX_DEBUG_VERIFY(! __lhs._M_singular() && ! __rhs._M_singular(), _GLIBCXX_DEBUG_VERIFY(! __lhs._M_singular() && ! __rhs._M_singular(),
_M_message(__msg_iter_order_bad) _M_message(__msg_iter_order_bad)
...@@ -658,6 +670,7 @@ namespace __gnu_debug ...@@ -658,6 +670,7 @@ namespace __gnu_debug
inline bool inline bool
operator>=(const _Safe_iterator<_Iterator, _Sequence>& __lhs, operator>=(const _Safe_iterator<_Iterator, _Sequence>& __lhs,
const _Safe_iterator<_Iterator, _Sequence>& __rhs) const _Safe_iterator<_Iterator, _Sequence>& __rhs)
_GLIBCXX_NOEXCEPT
{ {
_GLIBCXX_DEBUG_VERIFY(! __lhs._M_singular() && ! __rhs._M_singular(), _GLIBCXX_DEBUG_VERIFY(! __lhs._M_singular() && ! __rhs._M_singular(),
_M_message(__msg_iter_order_bad) _M_message(__msg_iter_order_bad)
...@@ -678,6 +691,7 @@ namespace __gnu_debug ...@@ -678,6 +691,7 @@ namespace __gnu_debug
inline typename _Safe_iterator<_IteratorL, _Sequence>::difference_type inline typename _Safe_iterator<_IteratorL, _Sequence>::difference_type
operator-(const _Safe_iterator<_IteratorL, _Sequence>& __lhs, operator-(const _Safe_iterator<_IteratorL, _Sequence>& __lhs,
const _Safe_iterator<_IteratorR, _Sequence>& __rhs) const _Safe_iterator<_IteratorR, _Sequence>& __rhs)
_GLIBCXX_NOEXCEPT
{ {
_GLIBCXX_DEBUG_VERIFY(! __lhs._M_singular() && ! __rhs._M_singular(), _GLIBCXX_DEBUG_VERIFY(! __lhs._M_singular() && ! __rhs._M_singular(),
_M_message(__msg_distance_bad) _M_message(__msg_distance_bad)
...@@ -694,6 +708,7 @@ namespace __gnu_debug ...@@ -694,6 +708,7 @@ namespace __gnu_debug
inline typename _Safe_iterator<_Iterator, _Sequence>::difference_type inline typename _Safe_iterator<_Iterator, _Sequence>::difference_type
operator-(const _Safe_iterator<_Iterator, _Sequence>& __lhs, operator-(const _Safe_iterator<_Iterator, _Sequence>& __lhs,
const _Safe_iterator<_Iterator, _Sequence>& __rhs) const _Safe_iterator<_Iterator, _Sequence>& __rhs)
_GLIBCXX_NOEXCEPT
{ {
_GLIBCXX_DEBUG_VERIFY(! __lhs._M_singular() && ! __rhs._M_singular(), _GLIBCXX_DEBUG_VERIFY(! __lhs._M_singular() && ! __rhs._M_singular(),
_M_message(__msg_distance_bad) _M_message(__msg_distance_bad)
...@@ -709,7 +724,7 @@ namespace __gnu_debug ...@@ -709,7 +724,7 @@ namespace __gnu_debug
template<typename _Iterator, typename _Sequence> template<typename _Iterator, typename _Sequence>
inline _Safe_iterator<_Iterator, _Sequence> inline _Safe_iterator<_Iterator, _Sequence>
operator+(typename _Safe_iterator<_Iterator,_Sequence>::difference_type __n, operator+(typename _Safe_iterator<_Iterator,_Sequence>::difference_type __n,
const _Safe_iterator<_Iterator, _Sequence>& __i) const _Safe_iterator<_Iterator, _Sequence>& __i) _GLIBCXX_NOEXCEPT
{ return __i + __n; } { return __i + __n; }
} // namespace __gnu_debug } // namespace __gnu_debug
......
...@@ -56,13 +56,14 @@ namespace __profile ...@@ -56,13 +56,14 @@ namespace __profile
typedef typename _Traits::reference reference; typedef typename _Traits::reference reference;
typedef typename _Traits::pointer pointer; typedef typename _Traits::pointer pointer;
__iterator_tracker() __iterator_tracker() _GLIBCXX_NOEXCEPT
: _M_current(), _M_ds(0) { } : _M_current(), _M_ds(0) { }
__iterator_tracker(const _Iterator& __i, const _Sequence* __seq) __iterator_tracker(const _Iterator& __i, const _Sequence* __seq)
_GLIBCXX_NOEXCEPT
: _M_current(__i), _M_ds(__seq) { } : _M_current(__i), _M_ds(__seq) { }
__iterator_tracker(const __iterator_tracker& __x) __iterator_tracker(const __iterator_tracker& __x) _GLIBCXX_NOEXCEPT
: _M_current(__x._M_current), _M_ds(__x._M_ds) { } : _M_current(__x._M_current), _M_ds(__x._M_ds) { }
template<typename _MutableIterator> template<typename _MutableIterator>
...@@ -70,23 +71,23 @@ namespace __profile ...@@ -70,23 +71,23 @@ namespace __profile
typename __gnu_cxx::__enable_if typename __gnu_cxx::__enable_if
<(std::__are_same<_MutableIterator, typename <(std::__are_same<_MutableIterator, typename
_Sequence::iterator::_Base_iterator>::__value), _Sequence::iterator::_Base_iterator>::__value),
_Sequence>::__type>& __x) _Sequence>::__type>& __x) _GLIBCXX_NOEXCEPT
: _M_current(__x.base()), _M_ds(__x._M_get_sequence()) { } : _M_current(__x.base()), _M_ds(__x._M_get_sequence()) { }
_Iterator _Iterator
base() const { return _M_current; } base() const _GLIBCXX_NOEXCEPT { return _M_current; }
/** /**
* @brief Conversion to underlying non-debug iterator to allow * @brief Conversion to underlying non-debug iterator to allow
* better interaction with non-profile containers. * better interaction with non-profile containers.
*/ */
operator _Iterator() const { return _M_current; } operator _Iterator() const _GLIBCXX_NOEXCEPT { return _M_current; }
pointer pointer
operator->() const { return &*_M_current; } operator->() const _GLIBCXX_NOEXCEPT { return &*_M_current; }
__iterator_tracker& __iterator_tracker&
operator++() operator++() _GLIBCXX_NOEXCEPT
{ {
_M_ds->_M_profile_iterate(); _M_ds->_M_profile_iterate();
++_M_current; ++_M_current;
...@@ -94,7 +95,7 @@ namespace __profile ...@@ -94,7 +95,7 @@ namespace __profile
} }
__iterator_tracker __iterator_tracker
operator++(int) operator++(int) _GLIBCXX_NOEXCEPT
{ {
_M_ds->_M_profile_iterate(); _M_ds->_M_profile_iterate();
__iterator_tracker __tmp(*this); __iterator_tracker __tmp(*this);
...@@ -103,7 +104,7 @@ namespace __profile ...@@ -103,7 +104,7 @@ namespace __profile
} }
__iterator_tracker& __iterator_tracker&
operator--() operator--() _GLIBCXX_NOEXCEPT
{ {
_M_ds->_M_profile_iterate(1); _M_ds->_M_profile_iterate(1);
--_M_current; --_M_current;
...@@ -111,7 +112,7 @@ namespace __profile ...@@ -111,7 +112,7 @@ namespace __profile
} }
__iterator_tracker __iterator_tracker
operator--(int) operator--(int) _GLIBCXX_NOEXCEPT
{ {
_M_ds->_M_profile_iterate(1); _M_ds->_M_profile_iterate(1);
__iterator_tracker __tmp(*this); __iterator_tracker __tmp(*this);
...@@ -120,30 +121,30 @@ namespace __profile ...@@ -120,30 +121,30 @@ namespace __profile
} }
__iterator_tracker& __iterator_tracker&
operator=(const __iterator_tracker& __x) operator=(const __iterator_tracker& __x) _GLIBCXX_NOEXCEPT
{ {
_M_current = __x._M_current; _M_current = __x._M_current;
return *this; return *this;
} }
reference reference
operator*() const operator*() const _GLIBCXX_NOEXCEPT
{ return *_M_current; } { return *_M_current; }
// ------ Random access iterator requirements ------ // ------ Random access iterator requirements ------
reference reference
operator[](const difference_type& __n) const operator[](const difference_type& __n) const _GLIBCXX_NOEXCEPT
{ return _M_current[__n]; } { return _M_current[__n]; }
__iterator_tracker& __iterator_tracker&
operator+=(const difference_type& __n) operator+=(const difference_type& __n) _GLIBCXX_NOEXCEPT
{ {
_M_current += __n; _M_current += __n;
return *this; return *this;
} }
__iterator_tracker __iterator_tracker
operator+(const difference_type& __n) const operator+(const difference_type& __n) const _GLIBCXX_NOEXCEPT
{ {
__iterator_tracker __tmp(*this); __iterator_tracker __tmp(*this);
__tmp += __n; __tmp += __n;
...@@ -151,14 +152,14 @@ namespace __profile ...@@ -151,14 +152,14 @@ namespace __profile
} }
__iterator_tracker& __iterator_tracker&
operator-=(const difference_type& __n) operator-=(const difference_type& __n) _GLIBCXX_NOEXCEPT
{ {
_M_current += -__n; _M_current += -__n;
return *this; return *this;
} }
__iterator_tracker __iterator_tracker
operator-(const difference_type& __n) const operator-(const difference_type& __n) const _GLIBCXX_NOEXCEPT
{ {
__iterator_tracker __tmp(*this); __iterator_tracker __tmp(*this);
__tmp -= __n; __tmp -= __n;
...@@ -178,72 +179,84 @@ namespace __profile ...@@ -178,72 +179,84 @@ namespace __profile
inline bool inline bool
operator==(const __iterator_tracker<_IteratorL, _Sequence>& __lhs, operator==(const __iterator_tracker<_IteratorL, _Sequence>& __lhs,
const __iterator_tracker<_IteratorR, _Sequence>& __rhs) const __iterator_tracker<_IteratorR, _Sequence>& __rhs)
_GLIBCXX_NOEXCEPT
{ return __lhs.base() == __rhs.base(); } { return __lhs.base() == __rhs.base(); }
template<typename _Iterator, typename _Sequence> template<typename _Iterator, typename _Sequence>
inline bool inline bool
operator==(const __iterator_tracker<_Iterator, _Sequence>& __lhs, operator==(const __iterator_tracker<_Iterator, _Sequence>& __lhs,
const __iterator_tracker<_Iterator, _Sequence>& __rhs) const __iterator_tracker<_Iterator, _Sequence>& __rhs)
_GLIBCXX_NOEXCEPT
{ return __lhs.base() == __rhs.base(); } { return __lhs.base() == __rhs.base(); }
template<typename _IteratorL, typename _IteratorR, typename _Sequence> template<typename _IteratorL, typename _IteratorR, typename _Sequence>
inline bool inline bool
operator!=(const __iterator_tracker<_IteratorL, _Sequence>& __lhs, operator!=(const __iterator_tracker<_IteratorL, _Sequence>& __lhs,
const __iterator_tracker<_IteratorR, _Sequence>& __rhs) const __iterator_tracker<_IteratorR, _Sequence>& __rhs)
_GLIBCXX_NOEXCEPT
{ return __lhs.base() != __rhs.base(); } { return __lhs.base() != __rhs.base(); }
template<typename _Iterator, typename _Sequence> template<typename _Iterator, typename _Sequence>
inline bool inline bool
operator!=(const __iterator_tracker<_Iterator, _Sequence>& __lhs, operator!=(const __iterator_tracker<_Iterator, _Sequence>& __lhs,
const __iterator_tracker<_Iterator, _Sequence>& __rhs) const __iterator_tracker<_Iterator, _Sequence>& __rhs)
_GLIBCXX_NOEXCEPT
{ return __lhs.base() != __rhs.base(); } { return __lhs.base() != __rhs.base(); }
template<typename _IteratorL, typename _IteratorR, typename _Sequence> template<typename _IteratorL, typename _IteratorR, typename _Sequence>
inline bool inline bool
operator<(const __iterator_tracker<_IteratorL, _Sequence>& __lhs, operator<(const __iterator_tracker<_IteratorL, _Sequence>& __lhs,
const __iterator_tracker<_IteratorR, _Sequence>& __rhs) const __iterator_tracker<_IteratorR, _Sequence>& __rhs)
_GLIBCXX_NOEXCEPT
{ return __lhs.base() < __rhs.base(); } { return __lhs.base() < __rhs.base(); }
template<typename _Iterator, typename _Sequence> template<typename _Iterator, typename _Sequence>
inline bool inline bool
operator<(const __iterator_tracker<_Iterator, _Sequence>& __lhs, operator<(const __iterator_tracker<_Iterator, _Sequence>& __lhs,
const __iterator_tracker<_Iterator, _Sequence>& __rhs) const __iterator_tracker<_Iterator, _Sequence>& __rhs)
_GLIBCXX_NOEXCEPT
{ return __lhs.base() < __rhs.base(); } { return __lhs.base() < __rhs.base(); }
template<typename _IteratorL, typename _IteratorR, typename _Sequence> template<typename _IteratorL, typename _IteratorR, typename _Sequence>
inline bool inline bool
operator<=(const __iterator_tracker<_IteratorL, _Sequence>& __lhs, operator<=(const __iterator_tracker<_IteratorL, _Sequence>& __lhs,
const __iterator_tracker<_IteratorR, _Sequence>& __rhs) const __iterator_tracker<_IteratorR, _Sequence>& __rhs)
_GLIBCXX_NOEXCEPT
{ return __lhs.base() <= __rhs.base(); } { return __lhs.base() <= __rhs.base(); }
template<typename _Iterator, typename _Sequence> template<typename _Iterator, typename _Sequence>
inline bool inline bool
operator<=(const __iterator_tracker<_Iterator, _Sequence>& __lhs, operator<=(const __iterator_tracker<_Iterator, _Sequence>& __lhs,
const __iterator_tracker<_Iterator, _Sequence>& __rhs) const __iterator_tracker<_Iterator, _Sequence>& __rhs)
_GLIBCXX_NOEXCEPT
{ return __lhs.base() <= __rhs.base(); } { return __lhs.base() <= __rhs.base(); }
template<typename _IteratorL, typename _IteratorR, typename _Sequence> template<typename _IteratorL, typename _IteratorR, typename _Sequence>
inline bool inline bool
operator>(const __iterator_tracker<_IteratorL, _Sequence>& __lhs, operator>(const __iterator_tracker<_IteratorL, _Sequence>& __lhs,
const __iterator_tracker<_IteratorR, _Sequence>& __rhs) const __iterator_tracker<_IteratorR, _Sequence>& __rhs)
_GLIBCXX_NOEXCEPT
{ return __lhs.base() > __rhs.base(); } { return __lhs.base() > __rhs.base(); }
template<typename _Iterator, typename _Sequence> template<typename _Iterator, typename _Sequence>
inline bool inline bool
operator>(const __iterator_tracker<_Iterator, _Sequence>& __lhs, operator>(const __iterator_tracker<_Iterator, _Sequence>& __lhs,
const __iterator_tracker<_Iterator, _Sequence>& __rhs) const __iterator_tracker<_Iterator, _Sequence>& __rhs)
_GLIBCXX_NOEXCEPT
{ return __lhs.base() > __rhs.base(); } { return __lhs.base() > __rhs.base(); }
template<typename _IteratorL, typename _IteratorR, typename _Sequence> template<typename _IteratorL, typename _IteratorR, typename _Sequence>
inline bool inline bool
operator>=(const __iterator_tracker<_IteratorL, _Sequence>& __lhs, operator>=(const __iterator_tracker<_IteratorL, _Sequence>& __lhs,
const __iterator_tracker<_IteratorR, _Sequence>& __rhs) const __iterator_tracker<_IteratorR, _Sequence>& __rhs)
_GLIBCXX_NOEXCEPT
{ return __lhs.base() >= __rhs.base(); } { return __lhs.base() >= __rhs.base(); }
template<typename _Iterator, typename _Sequence> template<typename _Iterator, typename _Sequence>
inline bool inline bool
operator>=(const __iterator_tracker<_Iterator, _Sequence>& __lhs, operator>=(const __iterator_tracker<_Iterator, _Sequence>& __lhs,
const __iterator_tracker<_Iterator, _Sequence>& __rhs) const __iterator_tracker<_Iterator, _Sequence>& __rhs)
_GLIBCXX_NOEXCEPT
{ return __lhs.base() >= __rhs.base(); } { return __lhs.base() >= __rhs.base(); }
// _GLIBCXX_RESOLVE_LIB_DEFECTS // _GLIBCXX_RESOLVE_LIB_DEFECTS
...@@ -254,12 +267,14 @@ namespace __profile ...@@ -254,12 +267,14 @@ namespace __profile
inline typename __iterator_tracker<_IteratorL, _Sequence>::difference_type inline typename __iterator_tracker<_IteratorL, _Sequence>::difference_type
operator-(const __iterator_tracker<_IteratorL, _Sequence>& __lhs, operator-(const __iterator_tracker<_IteratorL, _Sequence>& __lhs,
const __iterator_tracker<_IteratorR, _Sequence>& __rhs) const __iterator_tracker<_IteratorR, _Sequence>& __rhs)
_GLIBCXX_NOEXCEPT
{ return __lhs.base() - __rhs.base(); } { return __lhs.base() - __rhs.base(); }
template<typename _Iterator, typename _Sequence> template<typename _Iterator, typename _Sequence>
inline typename __iterator_tracker<_Iterator, _Sequence>::difference_type inline typename __iterator_tracker<_Iterator, _Sequence>::difference_type
operator-(const __iterator_tracker<_Iterator, _Sequence>& __lhs, operator-(const __iterator_tracker<_Iterator, _Sequence>& __lhs,
const __iterator_tracker<_Iterator, _Sequence>& __rhs) const __iterator_tracker<_Iterator, _Sequence>& __rhs)
_GLIBCXX_NOEXCEPT
{ return __lhs.base() - __rhs.base(); } { return __lhs.base() - __rhs.base(); }
template<typename _Iterator, typename _Sequence> template<typename _Iterator, typename _Sequence>
...@@ -267,6 +282,7 @@ namespace __profile ...@@ -267,6 +282,7 @@ namespace __profile
operator+(typename __iterator_tracker<_Iterator,_Sequence>::difference_type operator+(typename __iterator_tracker<_Iterator,_Sequence>::difference_type
__n, __n,
const __iterator_tracker<_Iterator, _Sequence>& __i) const __iterator_tracker<_Iterator, _Sequence>& __i)
_GLIBCXX_NOEXCEPT
{ return __i + __n; } { return __i + __n; }
} // namespace __profile } // namespace __profile
......
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