Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion stl/inc/algorithm
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
4 changes: 2 additions & 2 deletions tests/std/tests/P0896R4_P1614R2_comparisons/test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<base const*>(&some_deriveds[0]), &some_deriveds[1]);
test_strongly_ordered(&some_deriveds[0], static_cast<base const*>(&some_deriveds[1]));
Expand Down
65 changes: 38 additions & 27 deletions tests/std/tests/P0896R4_ranges_alg_partition/test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -63,44 +63,55 @@ 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
if (!is_constant_evaluated())
#endif // TRANSITION, VSO-938163
{
if constexpr (ranges::forward_range<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);
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion tests/std/tests/P0896R4_ranges_iterator_machinery/test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down