From 8c46c7d647bf42aafab17f7e3dd4c2e18722241f Mon Sep 17 00:00:00 2001 From: Patrick Palka Date: Fri, 10 Apr 2026 10:14:47 -0400 Subject: [PATCH] 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 --- libstdc++-v3/include/std/ranges | 7 ++++++- .../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 ca91e081ad4..4f2082487d1 100644 --- a/libstdc++-v3/include/std/ranges +++ b/libstdc++-v3/include/std/ranges @@ -3807,8 +3807,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 + && forward_range { return _OuterIter{this, ranges::begin(_M_base)}; } @@ -3826,7 +3830,8 @@ namespace views::__adaptor { if constexpr (forward_range<_Vp> && forward_range - && common_range) + && common_range + && forward_range) return _OuterIter{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 60ee7d70580..1c69b8f27cf 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(); } -- 2.47.3