diff --git a/tests/std/tests/P0896R4_P1614R2_comparisons/test.cpp b/tests/std/tests/P0896R4_P1614R2_comparisons/test.cpp index 14cf382b110..04593749741 100644 --- a/tests/std/tests/P0896R4_P1614R2_comparisons/test.cpp +++ b/tests/std/tests/P0896R4_P1614R2_comparisons/test.cpp @@ -254,12 +254,13 @@ constexpr bool test_compare_three_way() { enum class some_enum { value }; -#if defined(__clang__) || defined(__EDG__) // TRANSITION, VSO-905257 STATIC_ASSERT(test_compare_three_way()); STATIC_ASSERT(test_compare_three_way()); STATIC_ASSERT(test_compare_three_way()); STATIC_ASSERT(test_compare_three_way()); +#if defined(__clang__) || defined(__EDG__) // TRANSITION, DevCom-1044530 STATIC_ASSERT(test_compare_three_way()); +#endif // TRANSITION, DevCom-1044530 STATIC_ASSERT(test_compare_three_way()); STATIC_ASSERT(test_compare_three_way()); @@ -270,7 +271,6 @@ STATIC_ASSERT(test_compare_three_way()); STATIC_ASSERT(test_compare_three_way()); STATIC_ASSERT(test_compare_three_way()); -#endif // TRANSITION, VSO-905257 template struct compares_as {}; @@ -293,19 +293,7 @@ STATIC_ASSERT(test_compare_three_way, compares_as -constexpr void assert_three_way(T const& t, U const& u, R const result) { // TRANSITION, VSO-905257 -#if !defined(__clang__) && !defined(__EDG__) - // <=> expressions that resolve to builtin operators are incorrectly lvalues of const-qualified type on MSVC, so - // they are rejected by std::three_way_comparable and std::three_way_comparable_with. - if constexpr (!std::is_class_v> && !std::is_class_v>) { - return; - } else -#endif // !defined(__clang__) && !defined(__EDG__) - { - assert(compare_three_way{}(t, u) == result); - } -} +#define assert_three_way(t, u, result) assert(compare_three_way{}((t), (u)) == (result)) template constexpr void test_equality_comparable(T const& t, U const& u, strong_ordering const o) { @@ -465,9 +453,14 @@ constexpr void ordering_test_cases() { test_partially_ordered(1.414f, 3.14, partial_ordering::less); test_partially_ordered(1.414, 3.14f, partial_ordering::less); test_partially_ordered(31.625f, 31.625, partial_ordering::equivalent); - test_partially_ordered(3.14, NaN, partial_ordering::unordered); - test_partially_ordered(3.14f, NaN, partial_ordering::unordered); - test_partially_ordered(3.14, NaNf, partial_ordering::unordered); +#if !defined(__clang__) && !defined(__EDG__) // TRANSITION, VSO-1062601 + if (!std::is_constant_evaluated()) +#endif // TRANSITION, VSO-1062601 + { + test_partially_ordered(3.14, NaN, partial_ordering::unordered); + test_partially_ordered(3.14f, NaN, partial_ordering::unordered); + test_partially_ordered(3.14, NaNf, partial_ordering::unordered); + } // Validate types with no builtin <=> operators that are nonetheless totally_ordered (within a // limited domain) or equality_comparable @@ -499,9 +492,7 @@ constexpr void ordering_test_cases() { } }; test_equality_comparable(&has_members::x, &has_members::y, strong_ordering::less); // Ditto "not equal" -#if defined(__clang__) || defined(__EDG__) // TRANSITION, VSO-1070391 test_equality_comparable(&has_members::f, &has_members::g, strong_ordering::less); // Ditto "not equal" -#endif // TRANSITION, VSO-1070391 test_equality_comparable(nullptr, nullptr, strong_ordering::equal);