From 64ffe632c18b72eca771515717c750e24111e3aa Mon Sep 17 00:00:00 2001 From: Jakub Mazurkiewicz Date: Thu, 9 Mar 2023 01:41:02 +0100 Subject: [PATCH 1/3] Fix #3550 --- stl/inc/algorithm | 2 +- tests/std/tests/P0896R4_ranges_alg_equal/test.cpp | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/stl/inc/algorithm b/stl/inc/algorithm index ce0a039bb16..25382c06985 100644 --- a/stl/inc/algorithm +++ b/stl/inc/algorithm @@ -638,7 +638,7 @@ _NODISCARD pair<_FwdIt1, _FwdIt2> mismatch( #ifdef __cpp_lib_concepts namespace ranges { - template + template requires indirectly_comparable<_It1, _It2, _Pr, _Pj1, _Pj2> _NODISCARD constexpr bool _Equal_count( _It1 _First1, _It2 _First2, _Size _Count, _Pr _Pred, _Pj1 _Proj1, _Pj2 _Proj2) { diff --git a/tests/std/tests/P0896R4_ranges_alg_equal/test.cpp b/tests/std/tests/P0896R4_ranges_alg_equal/test.cpp index 7a85024c423..2307a6846c4 100644 --- a/tests/std/tests/P0896R4_ranges_alg_equal/test.cpp +++ b/tests/std/tests/P0896R4_ranges_alg_equal/test.cpp @@ -79,6 +79,11 @@ constexpr void smoke_test() { assert(!equal(begin(arr1), unreachable_sentinel, begin(arr2), end(arr2))); assert(!equal(begin(arr1), end(arr1), begin(arr2), unreachable_sentinel)); } + { + // Validate GH-3550: ": ranges::equal does not work for ranges with integer-class range_difference_t" + auto v = std::ranges::subrange{std::views::iota(0ull, 10ull)} | std::views::drop(2); + assert(equal(v, v)); + } } int main() { From b39fbb905a5564cd0f7934525cee3dfd8ed78cb3 Mon Sep 17 00:00:00 2001 From: "Stephan T. Lavavej" Date: Wed, 8 Mar 2023 20:43:10 -0800 Subject: [PATCH 2/3] Use the ranges namespace alias. --- tests/std/tests/P0896R4_ranges_alg_equal/test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/std/tests/P0896R4_ranges_alg_equal/test.cpp b/tests/std/tests/P0896R4_ranges_alg_equal/test.cpp index 2307a6846c4..3080000d0be 100644 --- a/tests/std/tests/P0896R4_ranges_alg_equal/test.cpp +++ b/tests/std/tests/P0896R4_ranges_alg_equal/test.cpp @@ -81,7 +81,7 @@ constexpr void smoke_test() { } { // Validate GH-3550: ": ranges::equal does not work for ranges with integer-class range_difference_t" - auto v = std::ranges::subrange{std::views::iota(0ull, 10ull)} | std::views::drop(2); + auto v = ranges::subrange{std::views::iota(0ull, 10ull)} | std::views::drop(2); assert(equal(v, v)); } } From 9a3de001006ffe1abc08735137538d12f5169fe5 Mon Sep 17 00:00:00 2001 From: "Stephan T. Lavavej" Date: Fri, 10 Mar 2023 16:34:43 -0800 Subject: [PATCH 3/3] Work around /clr bug VSO-1666180. --- tests/std/tests/P0896R4_ranges_alg_equal/test.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/std/tests/P0896R4_ranges_alg_equal/test.cpp b/tests/std/tests/P0896R4_ranges_alg_equal/test.cpp index 3080000d0be..3b3487887e6 100644 --- a/tests/std/tests/P0896R4_ranges_alg_equal/test.cpp +++ b/tests/std/tests/P0896R4_ranges_alg_equal/test.cpp @@ -79,11 +79,13 @@ constexpr void smoke_test() { assert(!equal(begin(arr1), unreachable_sentinel, begin(arr2), end(arr2))); assert(!equal(begin(arr1), end(arr1), begin(arr2), unreachable_sentinel)); } +#ifndef _M_CEE // TRANSITION, VSO-1666180 { // Validate GH-3550: ": ranges::equal does not work for ranges with integer-class range_difference_t" auto v = ranges::subrange{std::views::iota(0ull, 10ull)} | std::views::drop(2); assert(equal(v, v)); } +#endif // _M_CEE } int main() {