[gcc r15-11190] libstdc++/ranges: Implement LWG 3599 change to lazy_split_view
Patrick Palka
ppalka@gcc.gnu.org
Thu May 21 17:20:23 GMT 2026
https://gcc.gnu.org/g:4b8e6ab3a95a871f6ff155913e750ce11f8bf587
commit r15-11190-g4b8e6ab3a95a871f6ff155913e750ce11f8bf587
Author: Patrick Palka <ppalka@redhat.com>
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 <jwakely@redhat.com>
(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();
}
More information about the Libstdc++-cvs
mailing list