diff --git a/stl/inc/algorithm b/stl/inc/algorithm index 6b1e1d99d07..d52591085a8 100644 --- a/stl/inc/algorithm +++ b/stl/inc/algorithm @@ -5118,7 +5118,9 @@ namespace ranges { return {_STD move(_First), _STD move(_Final)}; } else { - auto [_Mid_first, _Mid_last] = _Reverse_until_mid_unchecked(_STD move(_First), _Mid, _Final); + const auto _Result = _Reverse_until_mid_unchecked(_STD move(_First), _Mid, _Final); + auto _Mid_first = _Result.begin(); + auto _Mid_last = _Result.end(); _Reverse_common(_Mid_first, _Mid_last); if (_Mid_first == _Mid) { diff --git a/tests/std/tests/P0896R4_P1614R2_comparisons/test.cpp b/tests/std/tests/P0896R4_P1614R2_comparisons/test.cpp index ebf0022a565..d590d917b7a 100644 --- a/tests/std/tests/P0896R4_P1614R2_comparisons/test.cpp +++ b/tests/std/tests/P0896R4_P1614R2_comparisons/test.cpp @@ -433,9 +433,9 @@ constexpr void ordering_test_cases() { derived const some_deriveds[2] = {}; test_strongly_ordered(&some_deriveds[0], &some_deriveds[1]); -#if !defined(__clang__) && !defined(__EDG__) // TRANSITION, VSO-938163 +#if !defined(__clang__) && !defined(__EDG__) // TRANSITION, VSO-1168721 if (!std::is_constant_evaluated()) -#endif // TRANSITION, VSO-938163 +#endif // TRANSITION, VSO-1168721 { test_strongly_ordered(static_cast(&some_deriveds[0]), &some_deriveds[1]); test_strongly_ordered(&some_deriveds[0], static_cast(&some_deriveds[1])); diff --git a/tests/std/tests/P0896R4_ranges_alg_partition/test.cpp b/tests/std/tests/P0896R4_ranges_alg_partition/test.cpp index 785d6ef20d8..c7807e78c3d 100644 --- a/tests/std/tests/P0896R4_ranges_alg_partition/test.cpp +++ b/tests/std/tests/P0896R4_ranges_alg_partition/test.cpp @@ -63,15 +63,17 @@ struct partition_test { using ranges::is_partitioned, ranges::partition, ranges::partition_point, ranges::is_permutation, ranges::subrange; - auto pairs = elements; + { // Validate is_partitioned + auto pairs = elements; - { - Range range{pairs}; - ASSERT(!is_partitioned(range, is_even, get_first)); - } - { - Range range{pairs}; - ASSERT(!is_partitioned(range.begin(), range.end(), is_even, get_first)); + { + Range range{pairs}; + ASSERT(!is_partitioned(range, is_even, get_first)); + } + { + Range range{pairs}; + ASSERT(!is_partitioned(range.begin(), range.end(), is_even, get_first)); + } } #if !defined(__clang__) && !defined(__EDG__) // TRANSITION, VSO-938163 @@ -79,28 +81,37 @@ struct partition_test { #endif // TRANSITION, VSO-938163 { if constexpr (ranges::forward_range) { - const Range range{pairs}; - const auto mid = ranges::next(range.begin(), 4); - - { - auto result = partition(range, is_even, get_first); - ASSERT(result.begin() == mid); - ASSERT(result.end() == range.end()); + { // Validate range overloads of partition, is_partitioned, partition_point + auto pairs = elements; + const Range range{pairs}; + const auto mid = ranges::next(range.begin(), 4); + + { + auto result = partition(range, is_even, get_first); + ASSERT(result.begin() == mid); + ASSERT(result.end() == range.end()); + } + ASSERT( + is_permutation(subrange{range.begin(), mid}, array{0, 2, 4, 6}, ranges::equal_to{}, get_first)); + ASSERT(is_partitioned(range, is_even, get_first)); + ASSERT(partition_point(range, is_even, get_first) == mid); } - ASSERT(is_permutation(subrange{range.begin(), mid}, array{0, 2, 4, 6}, ranges::equal_to{}, get_first)); - ASSERT(is_partitioned(range, is_even, get_first)); - ASSERT(partition_point(range, is_even, get_first) == mid); - - pairs = elements; - { - auto result = partition(range.begin(), range.end(), is_even, get_first); - ASSERT(result.begin() == mid); - ASSERT(result.end() == range.end()); + { // Validate iterator overloads of partition, is_partitioned, partition_point + auto pairs = elements; + const Range range{pairs}; + const auto mid = ranges::next(range.begin(), 4); + + { + auto result = partition(range.begin(), range.end(), is_even, get_first); + ASSERT(result.begin() == mid); + ASSERT(result.end() == range.end()); + } + ASSERT( + is_permutation(subrange{range.begin(), mid}, array{0, 2, 4, 6}, ranges::equal_to{}, get_first)); + ASSERT(is_partitioned(range.begin(), range.end(), is_even, get_first)); + ASSERT(partition_point(range.begin(), range.end(), is_even, get_first) == mid); } - ASSERT(is_permutation(subrange{range.begin(), mid}, array{0, 2, 4, 6}, ranges::equal_to{}, get_first)); - ASSERT(is_partitioned(range.begin(), range.end(), is_even, get_first)); - ASSERT(partition_point(range.begin(), range.end(), is_even, get_first) == mid); } } } diff --git a/tests/std/tests/P0896R4_ranges_iterator_machinery/test.cpp b/tests/std/tests/P0896R4_ranges_iterator_machinery/test.cpp index f571db14fd8..e2890d284f2 100644 --- a/tests/std/tests/P0896R4_ranges_iterator_machinery/test.cpp +++ b/tests/std/tests/P0896R4_ranges_iterator_machinery/test.cpp @@ -1173,7 +1173,7 @@ namespace iterator_cust_swap_test { STATIC_ASSERT(noexcept(ranges::iter_swap(&i0, &i1))); return true; } -#ifdef __clang__ // TRANSITION, VSO-938163 +#if defined(__clang__) || defined(__EDG__) // TRANSITION, VSO-938163 STATIC_ASSERT(test()); #endif // TRANSITION, VSO-938163