gcc/libstdc++-v3/testsuite/24_iterators
Jonathan Wakely 979e89a9a9 libstdc++: Fix std::reverse_iterator comparisons (PR 94354)
The std::reverse_iterator comparisons have always been implemented only
in terms of equality and less than. In C++98 that made no difference for
reasonable code, because when the underlying operators are the same type
they are required to support all comparisons anyway.

But since LWG 280 it's possible to compare reverse_iterator<X> and
reverse_iterator<Y>, and comparisons between X and Y might not support
the full set of equality and relational operators. This means that it
matters whether we implement operator!= as x.base() != y.base() or
!(x.base() == y.base()), and the current implementation is
non-conforming.

This was already fixed in GCC 10.1 for C++20, this change also fixes it
for all other -std modes.

	PR libstdc++/94354
	* include/bits/stl_iterator.h (reverse_iterator): Fix comparison
	operators to use the correct operations on the underlying
	iterators.
	* testsuite/24_iterators/reverse_iterator/rel_ops.cc: New test.
2020-05-27 21:58:56 +01:00
..
associated_types libstdc++: Implement P1878R1 "Constraining Readable Types" 2020-02-07 16:58:43 +00:00
back_insert_iterator libstdc++: Implement C++20 changes to insert iterators 2020-03-27 23:26:01 +00:00
bidirectional Update copyright years. 2020-01-01 12:51:42 +01:00
common_iterator libstdc++: Fix common_iterator::operator-> [PR95322] 2020-05-26 16:17:34 -04:00
contiguous Update copyright years. 2020-01-01 12:51:42 +01:00
counted_iterator libstdc++: Add a move-only testsuite iterator type 2020-03-03 22:44:35 -05:00
customization_points libstdc++: Avoid constraint recursion with iterator_traits (PR 93983) 2020-05-21 07:32:15 +01:00
forward Update copyright years. 2020-01-01 12:51:42 +01:00
front_insert_iterator libstdc++: Implement C++20 changes to insert iterators 2020-03-27 23:26:01 +00:00
headers/iterator libstdc++: Implement C++20 changes to insert iterators 2020-03-27 23:26:01 +00:00
indirect_callable libstdc++: Replace deduced return type in ranges::iter_move (PR 92894) 2020-05-01 14:27:25 +01:00
input Update copyright years. 2020-01-01 12:51:42 +01:00
insert_iterator libstdc++: Fixes for feature test macros (PR 91480) 2020-04-28 23:40:18 +01:00
istream_iterator libstdc++: Fix noexcept-specifier for istream_iterator 2020-02-24 14:22:21 +00:00
istreambuf_iterator libstdc++: Add test for using istreambuf_iterator with sentinel 2020-04-20 22:06:32 +01:00
move_iterator libstdc++: Fix std::reverse_iterator relational operators 2020-03-28 21:52:13 +00:00
normal_iterator libstdc++: Fix __normal_iterator comparisons for C++20 2020-04-21 23:46:54 +01:00
operations Update copyright years. 2020-01-01 12:51:42 +01:00
ostream_iterator libstdc++: Change compile-only test to run 2020-03-10 09:47:15 +00:00
ostreambuf_iterator Update copyright years. 2020-01-01 12:51:42 +01:00
output Update copyright years. 2020-01-01 12:51:42 +01:00
random_access Update copyright years. 2020-01-01 12:51:42 +01:00
range_access Update copyright years. 2020-01-01 12:51:42 +01:00
range_operations libstdc++: test for failing assertion should use 'run' not 'compile' 2020-02-28 18:41:18 +00:00
reverse_iterator libstdc++: Fix std::reverse_iterator comparisons (PR 94354) 2020-05-27 21:58:56 +01:00
aliases.cc libstdc++: Remove workarounds for constraints on alias templates 2020-02-05 15:09:23 +00:00
container_access.cc Update copyright years. 2020-01-01 12:51:42 +01:00