diff --git a/stl/inc/ranges b/stl/inc/ranges index 30d22d9c4f5..c34962d8497 100644 --- a/stl/inc/ranges +++ b/stl/inc/ranges @@ -6386,7 +6386,7 @@ namespace ranges { _NODISCARD constexpr auto end() noexcept(_Is_end_nothrow_v<_Vw>) // strengthened requires (!_Simple_view<_Vw>) { - if constexpr (common_range<_Vw> && sized_range<_Vw>) { + if constexpr (forward_range<_Vw> && common_range<_Vw> && sized_range<_Vw>) { return _Iterator{_RANGES end(_Range), _RANGES distance(_Range)}; } else { return _Sentinel{_RANGES end(_Range)}; @@ -6396,7 +6396,7 @@ namespace ranges { _NODISCARD constexpr auto end() const noexcept(_Is_end_nothrow_v) // strengthened requires _Range_with_movable_references { - if constexpr (common_range && sized_range) { + if constexpr (forward_range && common_range && sized_range) { return _Iterator{_RANGES end(_Range), _RANGES distance(_Range)}; } else { return _Sentinel{_RANGES end(_Range)}; diff --git a/tests/std/tests/P2164R9_views_enumerate/test.cpp b/tests/std/tests/P2164R9_views_enumerate/test.cpp index b0b26ed5db7..36d2d010d6f 100644 --- a/tests/std/tests/P2164R9_views_enumerate/test.cpp +++ b/tests/std/tests/P2164R9_views_enumerate/test.cpp @@ -203,7 +203,7 @@ constexpr bool test_one(Rng&& rng, Expected&& expected) { assert((as_const(r).begin() == s) == is_empty); } - STATIC_ASSERT(common_range == (common_range && sized_range) ); + STATIC_ASSERT(common_range == (forward_range && common_range && sized_range) ); if constexpr (common_range && sized_range && bidirectional_range) { if (!is_empty) { assert(*prev(s) == *prev(end(expected))); @@ -228,7 +228,8 @@ constexpr bool test_one(Rng&& rng, Expected&& expected) { assert((r.begin() == cs) == is_empty); } - STATIC_ASSERT(common_range == (common_range && sized_range) ); + STATIC_ASSERT( + common_range == (forward_range && common_range && sized_range) ); if constexpr (common_range && sized_range && bidirectional_range) { if (!is_empty) { assert(*prev(cs) == *prev(end(expected)));