On 01/10/20 10:35 -0400, Patrick Palka via Libstdc++ wrote:
I noticed that the following changes from this paper were not yet implemented.
Oops, thanks.
OK to commit after testing on x86_64-pc-linux-gnu finishes successfully? libstdc++-v3/ChangeLog: * include/bits/stl_iterator.h (reverse_iterator::iter_move): Define for C++20 as per P0896. (reverse_iterator::iter_swap): Likewise. (move_iterator::operator*): Apply P0896 changes for C++20. (move_iterator::operator[]): Likewise. * testsuite/24_iterators/reverse_iterator/cust.cc: New test. --- libstdc++-v3/include/bits/stl_iterator.h | 33 ++++++++++++ .../24_iterators/reverse_iterator/cust.cc | 51 +++++++++++++++++++ 2 files changed, 84 insertions(+) create mode 100644 libstdc++-v3/testsuite/24_iterators/reverse_iterator/cust.cc diff --git a/libstdc++-v3/include/bits/stl_iterator.h b/libstdc++-v3/include/bits/stl_iterator.h index f29bae92706..ca3c4cda329 100644 --- a/libstdc++-v3/include/bits/stl_iterator.h +++ b/libstdc++-v3/include/bits/stl_iterator.h @@ -362,6 +362,31 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION operator[](difference_type __n) const { return *(*this + __n); } +#if __cplusplus > 201703L && __cpp_lib_concepts + friend constexpr iter_rvalue_reference_t<_Iterator> + iter_move(const reverse_iterator& __i) + noexcept(is_nothrow_copy_constructible_v<_Iterator> + && noexcept(ranges::iter_move(--declval<_Iterator&>())))
All the declval calls need to be std::-qualified. OK for master and gcc-10 with that change, thanks.