libstdc++: Add remaining C++20 changes to iterator adaptors
authorJonathan Wakely <jwakely@redhat.com>
Fri, 27 Mar 2020 23:21:58 +0000 (23:21 +0000)
committerJonathan Wakely <jwakely@redhat.com>
Fri, 27 Mar 2020 23:26:03 +0000 (23:26 +0000)
commit81a8d137c22953df2ea046466c62cd26c0dba103
tree91352bc2ddb369ad0874532af65cc54611d7639f
parentae6076b5bc1e0b689eaa8521571b0516de336553
libstdc++: Add remaining C++20 changes to iterator adaptors

This adds the missing parts of P0896R4 to reverse_iterator and
move_iterator, so that they meet the C++20 requirements. This should be
the last piece of P0896R4, meaning ranges support is now complete.

The PR 94354 bug with reverse_iterator's comparisons is fixed for C++20
only, but that change should be extended to C++11, C++14 and C++17 modes
in stage 1.

* include/bits/stl_iterator.h (reverse_iterator::iterator_concept)
(reverse_iterator::iterator_category): Define for C++20.
(reverse_iterator): Define comparison operators correctly for C++20.
(__normal_iterator): Add constraints to comparison operators for C++20.
(move_iterator::operator++(int)) [__cpp_lib_concepts]: Define new
overload for input iterators.
(move_iterator): Add constraints to comparison operators for C++20.
Define operator<=> for C++20.
* testsuite/24_iterators/move_iterator/input_iterator.cc: New test.
* testsuite/24_iterators/move_iterator/move_only.cc: New test.
* testsuite/24_iterators/move_iterator/rel_ops_c++20.cc: New test.
* testsuite/24_iterators/reverse_iterator/rel_ops_c++20.cc: New test.
libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/stl_iterator.h
libstdc++-v3/testsuite/24_iterators/move_iterator/input_iterator.cc [new file with mode: 0644]
libstdc++-v3/testsuite/24_iterators/move_iterator/move_only.cc [new file with mode: 0644]
libstdc++-v3/testsuite/24_iterators/move_iterator/rel_ops_c++20.cc [new file with mode: 0644]
libstdc++-v3/testsuite/24_iterators/reverse_iterator/rel_ops_c++20.cc [new file with mode: 0644]