]> git.ipfire.org Git - thirdparty/gcc.git/commit
libstdc++/ranges: Implement various small LWG issues
authorPatrick Palka <ppalka@redhat.com>
Fri, 4 Oct 2024 14:01:39 +0000 (10:01 -0400)
committerPatrick Palka <ppalka@redhat.com>
Tue, 22 Oct 2024 01:38:40 +0000 (21:38 -0400)
commit07ee6874963d2f8a787ba48341a5392ee8b6ba56
tree6fe65e04c04e64c06041f2497de9c95000068d57
parentbe56fee60a62014709605af19a84a48b7aa0835a
libstdc++/ranges: Implement various small LWG issues

This implements the following small LWG issues:

  3848. adjacent_view, adjacent_transform_view and slide_view missing base accessor
  3851. chunk_view::inner-iterator missing custom iter_move and iter_swap
  3947. Unexpected constraints on adjacent_transform_view::base()
  4001. iota_view should provide empty
  4012. common_view::begin/end are missing the simple-view check
  4013. lazy_split_view::outer-iterator::value_type should not provide default constructor
  4035. single_view should provide empty
  4053. Unary call to std::views::repeat does not decay the argument
  4054. Repeating a repeat_view should repeat the view

libstdc++-v3/ChangeLog:

* include/std/ranges (single_view::empty): Define as per LWG 4035.
(iota_view::empty): Define as per LWG 4001.
(lazy_split_view::_OuterIter::value_type): Remove default
constructor and make other constructor private as per LWG 4013.
(common_view::begin): Disable non-const overload for simple
views as per LWG 4012.
(common_view::end): Likewise.
(adjacent_view::base): Define as per LWG 3848.
(adjacent_transform_view::base): Likewise.
(chunk_view::_InnerIter::iter_move): Define as per LWG 3851.
(chunk_view::_InnerIter::itep_swap): Likewise.
(slide_view::base): Define as per LWG 3848.
(repeat_view): Adjust deduction guide as per LWG 4053.
(_Repeat::operator()): Adjust single-parameter overload as per
LWG 4054.
* testsuite/std/ranges/adaptors/adjacent/1.cc: Verify existence
of base member function.
* testsuite/std/ranges/adaptors/adjacent_transform/1.cc: Likewise.
* testsuite/std/ranges/adaptors/chunk/1.cc: Test LWG 3851 example.
* testsuite/std/ranges/adaptors/slide/1.cc: Verify existence of
base member function.
* testsuite/std/ranges/iota/iota_view.cc: Test LWG 4001 example.
* testsuite/std/ranges/repeat/1.cc: Test LWG 4053/4054 examples.

Reviewed-by: Jonathan Wakely <jwakely@redhat.com>
(cherry picked from commit 20165d0107abd0f839f2519818b904f029f4ae55)
libstdc++-v3/include/std/ranges
libstdc++-v3/testsuite/std/ranges/adaptors/adjacent/1.cc
libstdc++-v3/testsuite/std/ranges/adaptors/adjacent_transform/1.cc
libstdc++-v3/testsuite/std/ranges/adaptors/chunk/1.cc
libstdc++-v3/testsuite/std/ranges/adaptors/slide/1.cc
libstdc++-v3/testsuite/std/ranges/iota/iota_view.cc
libstdc++-v3/testsuite/std/ranges/repeat/1.cc