diff --git a/libstdc++-v3/include/std/ranges b/libstdc++-v3/include/std/ranges
index 0aa4191e04f6..41175fd45e4b 100644
--- a/libstdc++-v3/include/std/ranges
+++ b/libstdc++-v3/include/std/ranges
@@ -3809,6 +3809,7 @@ namespace views::__adaptor
 
       constexpr auto
       begin() const requires forward_range<_Vp> && forward_range<const _Vp>
+	&& forward_range<const _Pattern>
       {
 	return _OuterIter<true>{this, ranges::begin(_M_base)};
       }
@@ -3826,7 +3827,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 60ee7d70580e..1c69b8f27cfd 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();
 }
