Make safe_iterator inline friends

François Dumont frs.dumont@gmail.com
Thu Aug 30 19:56:00 GMT 2018


Thanks for all those explanations. It helped me to find the solution.

So here is the final patch with all operators inline friends.

Tested under Linux x86_64.

     * include/debug/safe_iterator.h
     (_Safe_iterator<_It, _Seq, std::random_access_iterator_tag>::_Self):
     New.
     (_Safe_iterator<_It, _Seq, std::random_access_iterator_tag>
     ::_OtherSelf): New.
     (_GLIBCXX_DEBUG_VERIFY_OPERANDS, _GLIBCXX_DEBUG_VERIFY_CMP_OPERANDS)
     (_GLIBCXX_DEBUG_VERIFY_ORDER_OPERANDS)
     (_GLIBCXX_DEBUG_VERIFY_DIST_OPERANDS): Define macros.
     (_Safe_iterator<_It, _Seq, std::random_access_iterator_tag>
     ::operator+(difference_type)): Use latters, inline as friend.
     (_Safe_iterator<_It, _Seq, std::random_access_iterator_tag>
     ::operator-(difference_type)): Likewise.
     (operator==(const _Safe_iterator<>&, const _Safe_iterator<>&)):
     Likewise.
     (operator!=(const _Safe_iterator<>&, const _Safe_iterator<>&)):
     Likewise.
     (operator<(const _Safe_iterator<>&, const _Safe_iterator<>&)): 
Likewise.
     (operator<=(const _Safe_iterator<>&, const _Safe_iterator<>&)):
     Likewise.
     (operator>(const _Safe_iterator<>&, const _Safe_iterator<>&)): 
Likewise.
     (operator>=(const _Safe_iterator<>&, const _Safe_iterator<>&)):
     Likewise.
     (operator-(const _Safe_iterator<>&, const _Safe_iterator<>&)): 
Likewise.
     (operator+(difference_type, const _Safe_iterator<>&)): Likewise.
     (operator-(const _Safe_iterator<>&, difference_type)): Likewise.
     * include/debug/safe_iterator.tcc
     (_Safe_iterator<>::_M_can_advance(difference_type)): Take parameter by
     copy.
     * include/debug/safe_local_iterator.h
     (_Safe_local_iterator<_It, _Seq>::_Self): New.
     (_Safe_local_iterator<_It, _Seq>::_OtherSelf): New.
     (_GLIBCXX_DEBUG_VERIFY_OPERANDS): Define macro.
     (operator==(const _Safe_local_iterator<>&,
     const _Safe_local_iterator<>&)): Use latter, inline as friend.
     (operator!=(const _Safe_local_iterator<>&,
     const _Safe_local_iterator<>&)): Likewise.
     * testsuite/util/testsuite_containers.h
     (struct forward_members_unordered<_Tp, bool>): Remove 2nd template
     parameter.
(forward_members_unordered<>::forward_members_unordered(value_type&)):
     Add using namespace std::rel_ops.
     Add iterator_concept_checks on local_iterator and const_local_iterator.
     Add asserts on comparison between const_local_iterator and
     local_iterator.
     (struct forward_members_unordered<_Tp, false>): Remove partial
     specialization.
     * testsuite/23_containers/forward_list/types/1.cc: New.
     * testsuite/23_containers/list/types/1.cc: New.

Ok to commit ?

François
-------------- next part --------------
A non-text attachment was scrubbed...
Name: safe_iterator_operators.patch
Type: text/x-patch
Size: 33702 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/libstdc++/attachments/20180830/19132b38/attachment.bin>


More information about the Libstdc++ mailing list