https://gcc.gnu.org/g:4b8e6ab3a95a871f6ff155913e750ce11f8bf587
commit r15-11190-g4b8e6ab3a95a871f6ff155913e750ce11f8bf587 Author: Patrick Palka <[email protected]> Date: Fri Apr 10 10:14:47 2026 -0400 libstdc++/ranges: Implement LWG 3599 change to lazy_split_view libstdc++-v3/ChangeLog: * include/std/ranges (lazy_split_view::begin): Add const _Pattern constraint on const overload as per LWG 3599. (lazy_split_view::end): Likewise. * testsuite/std/ranges/adaptors/lazy_split.cc (test14): New test. Reviewed-by: Jonathan Wakely <[email protected]> (cherry picked from commit 8c46c7d647bf42aafab17f7e3dd4c2e18722241f) Diff: --- libstdc++-v3/include/std/ranges | 7 ++++++- libstdc++-v3/testsuite/std/ranges/adaptors/lazy_split.cc | 10 ++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/libstdc++-v3/include/std/ranges b/libstdc++-v3/include/std/ranges index 5954aa1b54b5..569b681b9fe1 100644 --- a/libstdc++-v3/include/std/ranges +++ b/libstdc++-v3/include/std/ranges @@ -3681,8 +3681,12 @@ namespace views::__adaptor } } + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 3599. The const overload of lazy_split_view::begin should be + // constrained by const Pattern constexpr auto begin() const requires forward_range<_Vp> && forward_range<const _Vp> + && forward_range<const _Pattern> { return _OuterIter<true>{this, ranges::begin(_M_base)}; } @@ -3700,7 +3704,8 @@ namespace views::__adaptor { if constexpr (forward_range<_Vp> && forward_range<const _Vp> - && common_range<const _Vp>) + && common_range<const _Vp> + && forward_range<const _Pattern>) return _OuterIter<true>{this, ranges::end(_M_base)}; else return default_sentinel; diff --git a/libstdc++-v3/testsuite/std/ranges/adaptors/lazy_split.cc b/libstdc++-v3/testsuite/std/ranges/adaptors/lazy_split.cc index 321ae271bf2b..498b6f3b0bdf 100644 --- a/libstdc++-v3/testsuite/std/ranges/adaptors/lazy_split.cc +++ b/libstdc++-v3/testsuite/std/ranges/adaptors/lazy_split.cc @@ -239,6 +239,15 @@ test13() constexpr decltype(views::lazy_split(views::single(0), 0).begin()) it; } +void +test14() +{ + // LWG 3599 + auto p = views::iota(0) | views::take(1) | views::reverse; + auto r = views::single(42) | views::lazy_split(p); + auto f = r.front(); +} + int main() { @@ -255,4 +264,5 @@ main() test11(); static_assert(test12()); test13(); + test14(); }
