From 64da81bb097acd3f8e40ee84067871bd995580dd Mon Sep 17 00:00:00 2001 From: "A. Jiang" Date: Fri, 29 Mar 2024 00:54:19 +0800 Subject: [PATCH 1/2] Implement LWG-4054 --- stl/inc/ranges | 6 +++--- tests/std/tests/P2474R2_views_repeat/test.cpp | 10 ++++++++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/stl/inc/ranges b/stl/inc/ranges index 37e9db92824..063e479705b 100644 --- a/stl/inc/ranges +++ b/stl/inc/ranges @@ -1705,10 +1705,10 @@ namespace ranges { struct _Repeat_fn { template _NODISCARD _STATIC_CALL_OPERATOR constexpr auto operator()(_Ty&& _Value) _CONST_CALL_OPERATOR - noexcept(noexcept(repeat_view(_STD forward<_Ty>(_Value)))) - requires requires { repeat_view(_STD forward<_Ty>(_Value)); } + noexcept(noexcept(repeat_view>(_STD forward<_Ty>(_Value)))) + requires requires { repeat_view>(_STD forward<_Ty>(_Value)); } { - return repeat_view(_STD forward<_Ty>(_Value)); + return repeat_view>(_STD forward<_Ty>(_Value)); } template diff --git a/tests/std/tests/P2474R2_views_repeat/test.cpp b/tests/std/tests/P2474R2_views_repeat/test.cpp index ed198b9ab03..0044ab3c9a7 100644 --- a/tests/std/tests/P2474R2_views_repeat/test.cpp +++ b/tests/std/tests/P2474R2_views_repeat/test.cpp @@ -363,14 +363,20 @@ constexpr bool test() { return true; } -// Check LWG-3875 +// Check LWG-3875 "std::ranges::repeat_view::iterator may be ill-formed" static_assert(CanViewRepeat); static_assert(CanViewRepeat); static_assert(CanViewRepeat); static_assert( !CanViewRepeat); // _Unsigned128 does not satisfy 'integer-like-with-usable-difference-type' -// Check GH-3392 +// Check LWG-4054 "Repeating a repeat_view should repeat the view" +static_assert( + std::is_same_v>>); +static_assert(std::is_same_v>); +static_assert(std::is_same_v>); + +// Check GH-3392 ": views::repeat(...) | views::take(...) is not always a valid range" static_assert(ranges::range); static_assert(ranges::range); From d3d992963e13f3df7ee18262682c0a5abcaaf6a2 Mon Sep 17 00:00:00 2001 From: "Stephan T. Lavavej" Date: Sat, 30 Mar 2024 04:47:54 -0700 Subject: [PATCH 2/2] Drop unnecessary `std::`. --- tests/std/tests/P2474R2_views_repeat/test.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/tests/std/tests/P2474R2_views_repeat/test.cpp b/tests/std/tests/P2474R2_views_repeat/test.cpp index 0044ab3c9a7..c559b170407 100644 --- a/tests/std/tests/P2474R2_views_repeat/test.cpp +++ b/tests/std/tests/P2474R2_views_repeat/test.cpp @@ -371,10 +371,9 @@ static_assert( !CanViewRepeat); // _Unsigned128 does not satisfy 'integer-like-with-usable-difference-type' // Check LWG-4054 "Repeating a repeat_view should repeat the view" -static_assert( - std::is_same_v>>); -static_assert(std::is_same_v>); -static_assert(std::is_same_v>); +static_assert(is_same_v>>); +static_assert(is_same_v>); +static_assert(is_same_v>); // Check GH-3392 ": views::repeat(...) | views::take(...) is not always a valid range" static_assert(ranges::range);