diff --git a/stl/inc/memory b/stl/inc/memory index 8ad20eb7cd..842186a362 100644 --- a/stl/inc/memory +++ b/stl/inc/memory @@ -526,7 +526,11 @@ namespace ranges { noexcept(noexcept(::new (static_cast(_Location)) _Ty(_STD forward<_Types>(_Args)...))) /* strengthened */ { // clang-format on +#ifdef __EDG__ + return _STD construct_at(_Location, _STD forward<_Types>(_Args)...); +#else // ^^^ EDG / Other vvv _MSVC_CONSTEXPR return ::new (static_cast(_Location)) _Ty(_STD forward<_Types>(_Args)...); +#endif // ^^^ Other ^^^ } }; diff --git a/stl/inc/ranges b/stl/inc/ranges index e0c1d7a9bf..73b5324dad 100644 --- a/stl/inc/ranges +++ b/stl/inc/ranges @@ -57,9 +57,17 @@ namespace ranges { template inline constexpr auto _Compile_time_max_size<_Ty> = (numeric_limits>::max)(); +#ifdef __EDG__ // TRANSITION, VSO-1898880 + template + concept _Constant_sized_range = sized_range<_Ty> && requires { typename _Require_constant<_Ty::size()>; }; + + template <_Constant_sized_range _Ty> + inline constexpr auto _Compile_time_max_size<_Ty> = _Ty::size(); +#else // ^^^ workaround / no workaround vvv template requires requires { typename _Require_constant<_Ty::size()>; } inline constexpr auto _Compile_time_max_size<_Ty> = _Ty::size(); +#endif // ^^^ no workaround ^^^ template inline constexpr auto _Compile_time_max_size<_Ty[_Size]> = _Size; @@ -9768,7 +9776,7 @@ namespace ranges { template _NODISCARD consteval int _Cartesian_product_max_size_bit_width() { using _Size_type = decltype(_Compile_time_max_size<_Rng>); - if constexpr (requires(_Size_type _Val) { _STD bit_width(_Val); }) { + if constexpr (requires { _STD bit_width(_Compile_time_max_size<_Rng>); }) { return _STD bit_width(_Compile_time_max_size<_Rng>); } else { return numeric_limits<_Size_type>::digits; diff --git a/stl/inc/tuple b/stl/inc/tuple index 217c4d7030..3f1f58cb47 100644 --- a/stl/inc/tuple +++ b/stl/inc/tuple @@ -186,7 +186,7 @@ template inline constexpr bool _Can_construct_values_from_tuple_like_v, _Other, index_sequence<_Indices...>> = conjunction_v(_STD declval<_Other>()))>...>; -#ifdef __clang__ // TRANSITION, LLVM-59827 +#if defined(__clang__) || defined(__EDG__) // TRANSITION, LLVM-59827 and VSO-1900279 template concept _Can_construct_from_tuple_like = _Different_from<_TupleLike, _Tuple> && _Tuple_like<_TupleLike> && !_Is_subrange_v> @@ -195,16 +195,16 @@ concept _Can_construct_from_tuple_like = && (tuple_size_v<_Tuple> != 1 || (!is_convertible_v<_TupleLike, tuple_element_t<0, _Tuple>> && !is_constructible_v, _TupleLike>) ); -#endif // defined(__clang__) +#endif // defined(__clang__) || defined(__EDG__) template >> struct _Three_way_comparison_result_with_tuple_like {}; template requires -#ifndef __clang__ // TRANSITION, DevCom-10265237 +#if !defined(__clang__) && !defined(__EDG__) // TRANSITION, DevCom-10265237 (sizeof...(_TTypes) == sizeof...(_Indices)) && -#endif // !defined(__clang__) +#endif // ^^^ workaround ^^^ (requires { typename _Synth_three_way_result<_TTypes, tuple_element_t<_Indices, _UTuple>>; } && ...) struct _Three_way_comparison_result_with_tuple_like, _UTuple, index_sequence<_Indices...>> { using type = common_comparison_category_t<_Synth_three_way_result<_TTypes, tuple_element_t<_Indices, _UTuple>>...>; @@ -432,7 +432,7 @@ public: negation_v(_STD declval<_Other>())), _This>, is_convertible(_STD declval<_Other>())), _Rest>...>>; -#ifdef __clang__ // TRANSITION, LLVM-59827 +#if defined(__clang__) || defined(__EDG__) // TRANSITION, LLVM-59827 and VSO-1900279 template , int> = 0> #else // ^^^ workaround / no workaround vvv template <_Different_from _Other> @@ -540,7 +540,7 @@ public: : tuple(_Alloc_unpack_tuple_t{}, _Al, _STD move(_Right)) {} #ifdef __cpp_lib_concepts -#ifdef __clang__ // TRANSITION, LLVM-59827 +#if defined(__clang__) || defined(__EDG__) // TRANSITION, LLVM-59827 and VSO-1900279 template , int> = 0> #else // ^^^ workaround / no workaround vvv template _Other> diff --git a/stl/inc/utility b/stl/inc/utility index 74af596872..7578cf0041 100644 --- a/stl/inc/utility +++ b/stl/inc/utility @@ -209,12 +209,12 @@ concept _Tuple_like = _Tuple_like_impl>; template concept _Pair_like = _Tuple_like<_Ty> && tuple_size_v> == 2; -#ifdef __clang__ // TRANSITION, LLVM-59827 +#if defined(__clang__) || defined(__EDG__) // TRANSITION, LLVM-59827 and VSO-1900279 template concept _Can_construct_from_pair_like = _Pair_like<_PairLike> && !_Is_subrange_v> && is_constructible_v<_Ty1, decltype(_STD get<0>(_STD declval<_PairLike>()))> && is_constructible_v<_Ty2, decltype(_STD get<1>(_STD declval<_PairLike>()))>; -#endif // defined(__clang__) +#endif // defined(__clang__) || defined(__EDG__) #endif // _HAS_CXX23 #endif // defined(__cpp_lib_concepts) @@ -289,7 +289,7 @@ struct pair { // store a pair of values : first(_STD forward(_Right.first)), second(_STD forward(_Right.second)) {} #ifdef __cpp_lib_concepts -#ifdef __clang__ // TRANSITION, LLVM-59827 +#if defined(__clang__) || defined(__EDG__) // TRANSITION, LLVM-59827 and VSO-1900279 template , int> = 0> #else // ^^^ workaround / no workaround vvv template <_Pair_like _Other> diff --git a/stl/inc/xutility b/stl/inc/xutility index b8a1b6995e..6175050243 100644 --- a/stl/inc/xutility +++ b/stl/inc/xutility @@ -230,7 +230,7 @@ struct _Get_rebind_alias<_Ty, _Other, void_t(_STD declval<_Ty*>())) _Ty(_STD declval<_Types>()...))>> @@ -3972,6 +3972,9 @@ struct _Move_iterator_category { _EXPORT_STD template class move_iterator : public _Move_iterator_category<_Iter> { +private: + _Iter _Current{}; + public: using iterator_type = _Iter; using value_type = _Iter_value_t<_Iter>; @@ -4211,9 +4214,6 @@ public: _NODISCARD constexpr iterator_type&& _Get_current() && noexcept { return _STD move(_Current); } - -private: - iterator_type _Current{}; }; _EXPORT_STD template diff --git a/stl/inc/yvals_core.h b/stl/inc/yvals_core.h index b18f335ac4..cf2ddef664 100644 --- a/stl/inc/yvals_core.h +++ b/stl/inc/yvals_core.h @@ -1716,62 +1716,43 @@ _EMIT_STL_ERROR(STL1004, "C++98 unexpected() is incompatible with C++23 unexpect #endif // defined(__cpp_impl_coroutine) #if _HAS_CXX20 -#if !defined(__EDG__) || defined(__INTELLISENSE__) // TRANSITION, GH-395 -#if _HAS_CXX23 // TRANSITION, GH-395 - move down to "macros with language mode sensitivity" section -#define __cpp_lib_concepts 202207L // P2404R3 Move-Only Types For Comparison Concepts -#else // ^^^ C++23 / C++20 vvv -#define __cpp_lib_concepts 202002L // P1964R2 Replacing boolean With boolean-testable -#endif // C++20 -#endif // !defined(__EDG__) || defined(__INTELLISENSE__) - -#ifdef __cpp_lib_concepts #define __cpp_lib_algorithm_iterator_requirements 202207L -#endif // defined(__cpp_lib_concepts) - -#define __cpp_lib_assume_aligned 201811L -#define __cpp_lib_atomic_flag_test 201907L -#define __cpp_lib_atomic_float 201711L -#define __cpp_lib_atomic_lock_free_type_aliases 201907L -#define __cpp_lib_atomic_ref 201806L -#define __cpp_lib_atomic_shared_ptr 201711L -#define __cpp_lib_atomic_wait 201907L -#define __cpp_lib_barrier 202302L -#define __cpp_lib_bind_front 201907L -#define __cpp_lib_bit_cast 201806L -#define __cpp_lib_bitops 201907L -#define __cpp_lib_bounded_array_traits 201902L - -#ifdef __cpp_lib_concepts -#define __cpp_lib_common_reference 202302L -#define __cpp_lib_common_reference_wrapper 202302L -#endif // defined(__cpp_lib_concepts) - -#define __cpp_lib_constexpr_algorithms 201806L -#define __cpp_lib_constexpr_complex 201711L -#define __cpp_lib_constexpr_dynamic_alloc 201907L -#define __cpp_lib_constexpr_functional 201907L -#define __cpp_lib_constexpr_iterator 201811L -#define __cpp_lib_constexpr_numeric 201911L -#define __cpp_lib_constexpr_string 201907L -#define __cpp_lib_constexpr_string_view 201811L -#define __cpp_lib_constexpr_tuple 201811L -#define __cpp_lib_constexpr_utility 201811L -#define __cpp_lib_constexpr_vector 201907L -#define __cpp_lib_destroying_delete 201806L -#define __cpp_lib_endian 201907L -#define __cpp_lib_erase_if 202002L - -#ifdef __cpp_lib_concepts -#define __cpp_lib_format 202304L -#define __cpp_lib_format_uchar 202311L -#define __cpp_lib_freestanding_ranges 202306L -#endif // defined(__cpp_lib_concepts) - -#define __cpp_lib_generic_unordered_lookup 201811L -#define __cpp_lib_int_pow2 202002L -#define __cpp_lib_integer_comparison_functions 202002L -#define __cpp_lib_interpolate 201902L -#define __cpp_lib_is_constant_evaluated 201811L +#define __cpp_lib_assume_aligned 201811L +#define __cpp_lib_atomic_flag_test 201907L +#define __cpp_lib_atomic_float 201711L +#define __cpp_lib_atomic_lock_free_type_aliases 201907L +#define __cpp_lib_atomic_ref 201806L +#define __cpp_lib_atomic_shared_ptr 201711L +#define __cpp_lib_atomic_wait 201907L +#define __cpp_lib_barrier 202302L +#define __cpp_lib_bind_front 201907L +#define __cpp_lib_bit_cast 201806L +#define __cpp_lib_bitops 201907L +#define __cpp_lib_bounded_array_traits 201902L +#define __cpp_lib_common_reference 202302L +#define __cpp_lib_common_reference_wrapper 202302L +#define __cpp_lib_constexpr_algorithms 201806L +#define __cpp_lib_constexpr_complex 201711L +#define __cpp_lib_constexpr_dynamic_alloc 201907L +#define __cpp_lib_constexpr_functional 201907L +#define __cpp_lib_constexpr_iterator 201811L +#define __cpp_lib_constexpr_numeric 201911L +#define __cpp_lib_constexpr_string 201907L +#define __cpp_lib_constexpr_string_view 201811L +#define __cpp_lib_constexpr_tuple 201811L +#define __cpp_lib_constexpr_utility 201811L +#define __cpp_lib_constexpr_vector 201907L +#define __cpp_lib_destroying_delete 201806L +#define __cpp_lib_endian 201907L +#define __cpp_lib_erase_if 202002L +#define __cpp_lib_format 202304L +#define __cpp_lib_format_uchar 202311L +#define __cpp_lib_freestanding_ranges 202306L +#define __cpp_lib_generic_unordered_lookup 201811L +#define __cpp_lib_int_pow2 202002L +#define __cpp_lib_integer_comparison_functions 202002L +#define __cpp_lib_interpolate 201902L +#define __cpp_lib_is_constant_evaluated 201811L #ifndef __clang__ // TRANSITION, LLVM-48860 #define __cpp_lib_is_layout_compatible 201907L @@ -1792,10 +1773,7 @@ _EMIT_STL_ERROR(STL1004, "C++98 unexpected() is incompatible with C++23 unexpect #define __cpp_lib_modules 202207L #endif // !defined(__clang__) && !defined(__EDG__) -#ifdef __cpp_lib_concepts -#define __cpp_lib_move_iterator_concept 202207L -#endif // defined(__cpp_lib_concepts) - +#define __cpp_lib_move_iterator_concept 202207L #define __cpp_lib_polymorphic_allocator 201902L #define __cpp_lib_remove_cvref 201711L #define __cpp_lib_semaphore 201907L @@ -1805,15 +1783,11 @@ _EMIT_STL_ERROR(STL1004, "C++98 unexpected() is incompatible with C++23 unexpect #define __cpp_lib_ssize 201902L #define __cpp_lib_starts_ends_with 201711L #define __cpp_lib_syncbuf 201803L - -#ifdef __cpp_lib_concepts -#define __cpp_lib_three_way_comparison 201907L -#endif // defined(__cpp_lib_concepts) - -#define __cpp_lib_to_address 201711L -#define __cpp_lib_to_array 201907L -#define __cpp_lib_type_identity 201806L -#define __cpp_lib_unwrap_ref 201811L +#define __cpp_lib_three_way_comparison 201907L +#define __cpp_lib_to_address 201711L +#define __cpp_lib_to_array 201907L +#define __cpp_lib_type_identity 201806L +#define __cpp_lib_unwrap_ref 201811L #endif // _HAS_CXX20 // C++23 @@ -1826,58 +1800,42 @@ _EMIT_STL_ERROR(STL1004, "C++98 unexpected() is incompatible with C++23 unexpect #define __cpp_lib_constexpr_bitset 202207L #define __cpp_lib_constexpr_charconv 202207L #define __cpp_lib_constexpr_typeinfo 202106L - -#ifdef __cpp_lib_concepts -#define __cpp_lib_containers_ranges 202202L -#define __cpp_lib_expected 202211L -#define __cpp_lib_formatters 202302L -#endif // defined(__cpp_lib_concepts) - -#define __cpp_lib_forward_like 202207L -#define __cpp_lib_invoke_r 202106L -#define __cpp_lib_ios_noreplace 202207L -#define __cpp_lib_is_scoped_enum 202011L - -#ifdef __cpp_lib_concepts -#define __cpp_lib_mdspan 202207L -#endif // defined(__cpp_lib_concepts) - -#define __cpp_lib_move_only_function 202110L - -#ifdef __cpp_lib_concepts -#define __cpp_lib_out_ptr 202106L -#define __cpp_lib_print 202207L -#define __cpp_lib_ranges_as_const 202311L -#define __cpp_lib_ranges_as_rvalue 202207L -#define __cpp_lib_ranges_cartesian_product 202207L -#define __cpp_lib_ranges_chunk 202202L -#define __cpp_lib_ranges_chunk_by 202202L -#define __cpp_lib_ranges_contains 202207L -#define __cpp_lib_ranges_enumerate 202302L -#define __cpp_lib_ranges_find_last 202207L -#define __cpp_lib_ranges_fold 202207L -#define __cpp_lib_ranges_iota 202202L -#define __cpp_lib_ranges_join_with 202202L -#define __cpp_lib_ranges_repeat 202207L -#define __cpp_lib_ranges_slide 202202L -#define __cpp_lib_ranges_starts_ends_with 202106L -#define __cpp_lib_ranges_stride 202207L -#define __cpp_lib_ranges_to_container 202202L -#define __cpp_lib_ranges_zip 202110L -#endif // defined(__cpp_lib_concepts) - -#define __cpp_lib_spanstream 202106L -#define __cpp_lib_stacktrace 202011L -#define __cpp_lib_stdatomic_h 202011L -#define __cpp_lib_string_contains 202011L -#define __cpp_lib_string_resize_and_overwrite 202110L -#define __cpp_lib_to_underlying 202102L - -#ifdef __cpp_lib_concepts -#define __cpp_lib_tuple_like 202207L -#endif // defined(__cpp_lib_concepts) - -#define __cpp_lib_unreachable 202202L +#define __cpp_lib_containers_ranges 202202L +#define __cpp_lib_expected 202211L +#define __cpp_lib_formatters 202302L +#define __cpp_lib_forward_like 202207L +#define __cpp_lib_invoke_r 202106L +#define __cpp_lib_ios_noreplace 202207L +#define __cpp_lib_is_scoped_enum 202011L +#define __cpp_lib_mdspan 202207L +#define __cpp_lib_move_only_function 202110L +#define __cpp_lib_out_ptr 202106L +#define __cpp_lib_print 202207L +#define __cpp_lib_ranges_as_const 202311L +#define __cpp_lib_ranges_as_rvalue 202207L +#define __cpp_lib_ranges_cartesian_product 202207L +#define __cpp_lib_ranges_chunk 202202L +#define __cpp_lib_ranges_chunk_by 202202L +#define __cpp_lib_ranges_contains 202207L +#define __cpp_lib_ranges_enumerate 202302L +#define __cpp_lib_ranges_find_last 202207L +#define __cpp_lib_ranges_fold 202207L +#define __cpp_lib_ranges_iota 202202L +#define __cpp_lib_ranges_join_with 202202L +#define __cpp_lib_ranges_repeat 202207L +#define __cpp_lib_ranges_slide 202202L +#define __cpp_lib_ranges_starts_ends_with 202106L +#define __cpp_lib_ranges_stride 202207L +#define __cpp_lib_ranges_to_container 202202L +#define __cpp_lib_ranges_zip 202110L +#define __cpp_lib_spanstream 202106L +#define __cpp_lib_stacktrace 202011L +#define __cpp_lib_stdatomic_h 202011L +#define __cpp_lib_string_contains 202011L +#define __cpp_lib_string_resize_and_overwrite 202110L +#define __cpp_lib_to_underlying 202102L +#define __cpp_lib_tuple_like 202207L +#define __cpp_lib_unreachable 202202L #endif // _HAS_CXX23 // macros with language mode sensitivity @@ -1887,7 +1845,7 @@ _EMIT_STL_ERROR(STL1004, "C++98 unexpected() is incompatible with C++23 unexpect #define __cpp_lib_array_constexpr 201803L // P0858R0 Constexpr Iterator Requirements #endif // _HAS_CXX17 -#ifdef __cpp_lib_concepts +#if _HAS_CXX20 #define __cpp_lib_chrono 201907L // P1466R3 Miscellaneous Minor Fixes For #elif _HAS_CXX17 #define __cpp_lib_chrono 201611L // P0505R0 constexpr For (Again) @@ -1895,6 +1853,12 @@ _EMIT_STL_ERROR(STL1004, "C++98 unexpected() is incompatible with C++23 unexpect #define __cpp_lib_chrono 201510L // P0092R1 floor(), ceil(), round(), abs() #endif // ^^^ !_HAS_CXX17 ^^^ +#if _HAS_CXX23 +#define __cpp_lib_concepts 202207L // P2404R3 Move-Only Types For Comparison Concepts +#elif _HAS_CXX20 // ^^^ C++23 / C++20 vvv +#define __cpp_lib_concepts 202002L // P1964R2 Replacing boolean With boolean-testable +#endif // C++20 + #if _HAS_CXX23 #define __cpp_lib_constexpr_memory 202202L // P2273R3 constexpr unique_ptr #elif _HAS_CXX20 @@ -1909,7 +1873,7 @@ _EMIT_STL_ERROR(STL1004, "C++98 unexpected() is incompatible with C++23 unexpect #endif // language mode #endif // !defined(_M_CEE_PURE) -#if _HAS_CXX23 && defined(__cpp_lib_concepts) // TRANSITION, GH-395 +#if _HAS_CXX23 #define __cpp_lib_optional 202110L // P0798R8 Monadic Operations For optional #elif _HAS_CXX20 // ^^^ _HAS_CXX23 / _HAS_CXX20 vvv #define __cpp_lib_optional 202106L // P2231R1 Completing constexpr In optional And variant @@ -1917,13 +1881,11 @@ _EMIT_STL_ERROR(STL1004, "C++98 unexpected() is incompatible with C++23 unexpect #define __cpp_lib_optional 201606L // P0307R2 Making Optional Greater Equal Again #endif // _HAS_CXX17 -#if defined(__cpp_lib_concepts) // TRANSITION, GH-395 #if _HAS_CXX23 #define __cpp_lib_ranges 202302L // P2609R3 Relaxing Ranges Just A Smidge #elif _HAS_CXX20 // ^^^ _HAS_CXX23 / _HAS_CXX20 vvv #define __cpp_lib_ranges 202110L // P2415R2 What Is A view? #endif // _HAS_CXX20 -#endif // defined(__cpp_lib_concepts) #if _HAS_CXX20 #define __cpp_lib_shared_ptr_arrays 201707L // P0674R1 make_shared() For Arrays @@ -1931,7 +1893,7 @@ _EMIT_STL_ERROR(STL1004, "C++98 unexpected() is incompatible with C++23 unexpect #define __cpp_lib_shared_ptr_arrays 201611L // P0497R0 Fixing shared_ptr For Arrays #endif -#if _HAS_CXX23 && defined(__cpp_lib_concepts) // TRANSITION, GH-395 +#if _HAS_CXX23 #define __cpp_lib_shift 202202L // P2440R1 ranges::shift_left, ranges::shift_right #elif _HAS_CXX20 // ^^^ _HAS_CXX23 / _HAS_CXX20 vvv #define __cpp_lib_shift 201806L // P0769R2 shift_left(), shift_right() diff --git a/tests/std/tests/GH_002558_format_presetPadding/env.lst b/tests/std/tests/GH_002558_format_presetPadding/env.lst index 0e31b4c287..b578d6aa78 100644 --- a/tests/std/tests/GH_002558_format_presetPadding/env.lst +++ b/tests/std/tests/GH_002558_format_presetPadding/env.lst @@ -34,7 +34,7 @@ PM_CL="/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /permissive- /analyze ASAN PM_CL="/EHsc /MTd /std:c++latest /permissive- /analyze:only /analyze:autolog- -fsanitize=address /Zi" PM_LINK="/debug" PM_CL="/clr /MD /std:c++20" PM_CL="/clr /MDd /std:c++20" -# PM_CL="/std:c++20 /permissive- /BE /c /EHsc /MD" -# PM_CL="/std:c++latest /permissive- /BE /c /EHsc /MTd" +PM_CL="/std:c++20 /permissive- /BE /c /EHsc /MD" +PM_CL="/std:c++latest /permissive- /BE /c /EHsc /MTd" # PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /std:c++20 /permissive- /MD" # PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /std:c++latest /permissive- /MTd /fp:strict" diff --git a/tests/std/tests/P0009R18_mdspan_default_accessor/test.cpp b/tests/std/tests/P0009R18_mdspan_default_accessor/test.cpp index aa0e829edb..7966582bcd 100644 --- a/tests/std/tests/P0009R18_mdspan_default_accessor/test.cpp +++ b/tests/std/tests/P0009R18_mdspan_default_accessor/test.cpp @@ -69,6 +69,8 @@ constexpr bool test() { } int main() { +#if !(defined(_DEBUG) && defined(__EDG__)) // TRANSITION, VSO-1898962 static_assert(test()); +#endif // !(defined(_DEBUG) && defined(__EDG__)) test(); } diff --git a/tests/std/tests/P0323R12_expected/test.cpp b/tests/std/tests/P0323R12_expected/test.cpp index 82a748e357..46a9c6e427 100644 --- a/tests/std/tests/P0323R12_expected/test.cpp +++ b/tests/std/tests/P0323R12_expected/test.cpp @@ -201,6 +201,7 @@ namespace test_expected { template constexpr void test_default_constructors() { +#ifndef __EDG__ // TRANSITION, VSO-1898929 constexpr bool should_be_defaultable = IsYes(defaultConstructible); struct payload_default_constructor { @@ -225,11 +226,13 @@ namespace test_expected { assert(defaulted); assert(defaulted.value() == 42); } +#endif // !defined(__EDG__) } template constexpr void test_copy_constructors() { +#ifndef __EDG__ // TRANSITION, VSO-1898929 constexpr bool should_be_trivial = IsYes(triviallyCopyConstructible); constexpr bool should_be_noexcept = should_be_trivial || IsYes(nothrowCopyConstructible); @@ -300,6 +303,7 @@ namespace test_expected { assert(from_error.error() == (should_be_trivial ? 0 : 42)); static_assert(noexcept(Expected{with_error}) == should_be_noexcept); } +#endif // !defined(__EDG__) { // ensure we are not copy constructible if either the payload or the error are not struct not_copy_constructible { @@ -315,6 +319,7 @@ namespace test_expected { template constexpr void test_move_constructors() { +#ifndef __EDG__ // TRANSITION, VSO-1898929 constexpr bool should_be_trivial = IsYes(triviallyMoveConstructible); constexpr bool should_be_noexcept = should_be_trivial || IsYes(nothrowMoveConstructible); @@ -386,6 +391,7 @@ namespace test_expected { assert(from_error.error() == (should_be_trivial ? 0 : 42)); static_assert(noexcept(Expected{move(error_input)}) == should_be_noexcept); } +#endif // !defined(__EDG__) { // ensure we are not move constructible if either the payload or the error are not struct not_move_constructible { @@ -1347,9 +1353,13 @@ namespace test_expected { test_triviality_of_assignment(); test_triviality_of_assignment(); test_triviality_of_assignment(); +#ifndef __EDG__ // TRANSITION, VSO-1949451 test_triviality_of_assignment(); +#endif // ^^^ no workaround ^^^ test_triviality_of_assignment(); +#ifndef __EDG__ // TRANSITION, VSO-1949451 test_triviality_of_assignment(); +#endif // ^^^ no workaround ^^^ } constexpr void test_emplace() noexcept { diff --git a/tests/std/tests/P0645R10_text_formatting_legacy_text_encoding/env.lst b/tests/std/tests/P0645R10_text_formatting_legacy_text_encoding/env.lst index cd6097cbb9..254f8811b0 100644 --- a/tests/std/tests/P0645R10_text_formatting_legacy_text_encoding/env.lst +++ b/tests/std/tests/P0645R10_text_formatting_legacy_text_encoding/env.lst @@ -36,8 +36,8 @@ PM_CL="/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /permissive- /analyze ASAN PM_CL="/EHsc /MTd /std:c++latest /permissive- /analyze:only /analyze:autolog- -fsanitize=address /Zi" PM_LINK="/debug" PM_CL="/clr /MD /std:c++20" PM_CL="/clr /MDd /std:c++20" -# PM_CL="/std:c++20 /permissive- /BE /c /EHsc /MD" -# PM_CL="/std:c++latest /permissive- /BE /c /EHsc /MTd" +PM_CL="/std:c++20 /permissive- /BE /c /EHsc /MD" +PM_CL="/std:c++latest /permissive- /BE /c /EHsc /MTd" # PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /std:c++20 /permissive- /MD" # PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /std:c++latest /permissive- /MTd /fp:strict" # PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /std:c++latest /permissive- /MT /fp:strict -fsanitize=undefined -fno-sanitize-recover=undefined" diff --git a/tests/std/tests/P0896R4_P1614R2_comparisons/test.cpp b/tests/std/tests/P0896R4_P1614R2_comparisons/test.cpp index 81cbe72ba0..974da08fa2 100644 --- a/tests/std/tests/P0896R4_P1614R2_comparisons/test.cpp +++ b/tests/std/tests/P0896R4_P1614R2_comparisons/test.cpp @@ -254,7 +254,9 @@ STATIC_ASSERT(test_compare_three_way()); STATIC_ASSERT(test_compare_three_way()); STATIC_ASSERT(test_compare_three_way()); STATIC_ASSERT(test_compare_three_way()); +#ifndef __EDG__ // TRANSITION, VSO-1898915 STATIC_ASSERT(test_compare_three_way()); +#endif // !defined(__EDG__) STATIC_ASSERT(test_compare_three_way()); STATIC_ASSERT(test_compare_three_way()); diff --git a/tests/std/tests/P0896R4_ranges_alg_equal/test.cpp b/tests/std/tests/P0896R4_ranges_alg_equal/test.cpp index 3080000d0b..b986c2be9a 100644 --- a/tests/std/tests/P0896R4_ranges_alg_equal/test.cpp +++ b/tests/std/tests/P0896R4_ranges_alg_equal/test.cpp @@ -121,6 +121,6 @@ struct instantiator { } }; -#ifndef _PREFAST_ // TRANSITION, GH-1030 +#if !defined(_PREFAST_) && !defined(__EDG__) // TRANSITION, GH-1030 and GH-3567 template void test_in_in(); -#endif // TRANSITION, GH-1030 +#endif // TRANSITION, GH-1030 and GH-3567 diff --git a/tests/std/tests/P0896R4_ranges_alg_find_end/test.cpp b/tests/std/tests/P0896R4_ranges_alg_find_end/test.cpp index 42d69ae5f8..96d8d2df4c 100644 --- a/tests/std/tests/P0896R4_ranges_alg_find_end/test.cpp +++ b/tests/std/tests/P0896R4_ranges_alg_find_end/test.cpp @@ -113,9 +113,9 @@ constexpr void test_devcom_1559808() { } int main() { -#ifndef _PREFAST_ // TRANSITION, GH-1030 +#if !defined(_PREFAST_) && !defined(__EDG__) // TRANSITION, GH-1030 and GH-3567 test_fwd_fwd, const int>(); -#endif // TRANSITION +#endif // ^^^ no workaround ^^^ STATIC_ASSERT(memcmp_test()); memcmp_test(); diff --git a/tests/std/tests/P0896R4_ranges_alg_mismatch/test.cpp b/tests/std/tests/P0896R4_ranges_alg_mismatch/test.cpp index c59698a84f..b064eaee23 100644 --- a/tests/std/tests/P0896R4_ranges_alg_mismatch/test.cpp +++ b/tests/std/tests/P0896R4_ranges_alg_mismatch/test.cpp @@ -76,7 +76,7 @@ int main() { smoke_test(); } -#ifndef _PREFAST_ // TRANSITION, GH-1030 +#if !defined(_PREFAST_) && !defined(__EDG__) // TRANSITION, GH-1030 and GH-3567 struct instantiator { template static void call() { @@ -108,4 +108,4 @@ struct instantiator { }; template void test_in_in(); -#endif // TRANSITION, GH-1030 +#endif // TRANSITION, GH-1030 and GH-3567 diff --git a/tests/std/tests/P0896R4_ranges_iterator_machinery/test.cpp b/tests/std/tests/P0896R4_ranges_iterator_machinery/test.cpp index 0e70990850..7427def1c3 100644 --- a/tests/std/tests/P0896R4_ranges_iterator_machinery/test.cpp +++ b/tests/std/tests/P0896R4_ranges_iterator_machinery/test.cpp @@ -3046,6 +3046,7 @@ namespace iter_ops { } { +#ifndef __EDG__ // TRANSITION, VSO-1898890 // Call distance(i, s) with arrays which must be decayed to pointers. // (This behavior was regressed by LWG-3392.) int some_ints[] = {1, 2, 3}; @@ -3063,6 +3064,7 @@ namespace iter_ops { STATIC_ASSERT(noexcept(distance(const_ints + 1, const_ints))); assert(distance(const_ints, const_ints) == 0); STATIC_ASSERT(noexcept(distance(const_ints, const_ints))); +#endif // !defined(__EDG__) } return true; diff --git a/tests/std/tests/P0896R4_views_common/test.cpp b/tests/std/tests/P0896R4_views_common/test.cpp index e3ea2748a9..04daf0fd82 100644 --- a/tests/std/tests/P0896R4_views_common/test.cpp +++ b/tests/std/tests/P0896R4_views_common/test.cpp @@ -477,20 +477,20 @@ struct difference_type_only_iterator { return *this; } - friend constexpr difference_type_only_iterator operator+( - difference_type_only_iterator i, same_as auto n) noexcept { + template U> + friend constexpr difference_type_only_iterator operator+(difference_type_only_iterator i, U n) noexcept { i += n; return i; } - friend constexpr difference_type_only_iterator operator+( - same_as auto n, difference_type_only_iterator i) noexcept { + template U> + friend constexpr difference_type_only_iterator operator+(U n, difference_type_only_iterator i) noexcept { i += n; return i; } - friend constexpr difference_type_only_iterator operator-( - difference_type_only_iterator i, same_as auto n) noexcept { + template U> + friend constexpr difference_type_only_iterator operator-(difference_type_only_iterator i, U n) noexcept { i -= n; return i; } diff --git a/tests/std/tests/P0896R4_views_iota/test.cpp b/tests/std/tests/P0896R4_views_iota/test.cpp index 19acce7db9..f401c42cdd 100644 --- a/tests/std/tests/P0896R4_views_iota/test.cpp +++ b/tests/std/tests/P0896R4_views_iota/test.cpp @@ -149,8 +149,8 @@ constexpr void test_integral() { assert(second >= first); static_assert(noexcept(first >= second)); // strengthened - assert(first <=> second < 0); - assert(second <=> first > 0); + assert((first <=> second) < 0); + assert((second <=> first) > 0); static_assert(noexcept(first <=> second)); // strengthened { diff --git a/tests/std/tests/P0896R4_views_join/test.cpp b/tests/std/tests/P0896R4_views_join/test.cpp index 422d1fe451..acb3ff830f 100644 --- a/tests/std/tests/P0896R4_views_join/test.cpp +++ b/tests/std/tests/P0896R4_views_join/test.cpp @@ -755,13 +755,17 @@ int main() { { // P2328 range of prvalue string using global function assert(ranges::equal(views::iota(0u, 5u) | views::transform(ToString) | views::join, expected)); +#if !(defined(_DEBUG) && defined(__EDG__)) // TRANSITION, VSO-1948896, see also GH-1566 static_assert(ranges::equal(views::iota(0u, 5u) | views::transform(ToString) | views::join, expected)); +#endif // !(defined(_DEBUG) && defined(__EDG__)) } { // P2328 range of prvalue string using lambda constexpr auto ToStringLambda = [](const size_t i) { return string{prvalue_input[i]}; }; assert(ranges::equal(views::iota(0u, 5u) | views::transform(ToStringLambda) | views::join, expected)); +#if !(defined(_DEBUG) && defined(__EDG__)) // TRANSITION, VSO-1948896, see also GH-1566 static_assert(ranges::equal(views::iota(0u, 5u) | views::transform(ToStringLambda) | views::join, expected)); +#endif // !(defined(_DEBUG) && defined(__EDG__)) } { // Immovable type diff --git a/tests/std/tests/P0896R4_views_single/test.cpp b/tests/std/tests/P0896R4_views_single/test.cpp index 2c2ad63851..8671a90105 100644 --- a/tests/std/tests/P0896R4_views_single/test.cpp +++ b/tests/std/tests/P0896R4_views_single/test.cpp @@ -200,7 +200,9 @@ struct ConstSelection { int value = 0; }; +#ifndef __EDG__ // TRANSITION, VSO-1898912 static_assert(is_trivially_copy_assignable_v>); +#endif // ^^^ no workaround ^^^ static_assert(!is_trivially_copy_assignable_v>); constexpr bool test_cv() { diff --git a/tests/std/tests/P0898R3_concepts/test.cpp b/tests/std/tests/P0898R3_concepts/test.cpp index 88dbfa27fb..0b95510c7d 100644 --- a/tests/std/tests/P0898R3_concepts/test.cpp +++ b/tests/std/tests/P0898R3_concepts/test.cpp @@ -380,8 +380,10 @@ namespace test_derived_from { void PrivateDerived::f() { // Check these in a member to verify that access doesn't depend on context +#ifndef __EDG__ // TRANSITION, VSO-1898937 STATIC_ASSERT(!derived_from>); STATIC_ASSERT(!derived_from>); +#endif // ^^^ no workaround ^^^ } STATIC_ASSERT(!derived_from); @@ -1449,7 +1451,9 @@ namespace test_constructible_from { }; STATIC_ASSERT(!test()); STATIC_ASSERT(test()); - STATIC_ASSERT(!test() || is_permissive); +#ifndef __EDG__ // TRANSITION, VSO-1898939 + STATIC_ASSERT(test() == is_permissive); +#endif // ^^^ no workaround ^^^ STATIC_ASSERT(!test()); STATIC_ASSERT(!test()); STATIC_ASSERT(!test()); @@ -1499,9 +1503,13 @@ namespace test_default_initializable { using std::default_initializable, std::initializer_list; STATIC_ASSERT(default_initializable); +#ifndef __EDG__ // TRANSITION, VSO-1898941 STATIC_ASSERT(!default_initializable); +#endif // ^^^ no workaround ^^^ STATIC_ASSERT(default_initializable); +#ifndef __EDG__ // TRANSITION, VSO-1898941 STATIC_ASSERT(!default_initializable); +#endif // ^^^ no workaround ^^^ STATIC_ASSERT(default_initializable); STATIC_ASSERT(!default_initializable); @@ -1514,7 +1522,9 @@ namespace test_default_initializable { STATIC_ASSERT(!default_initializable); STATIC_ASSERT(!default_initializable); STATIC_ASSERT(!default_initializable); +#ifndef __EDG__ // TRANSITION, VSO-1898941 STATIC_ASSERT(!default_initializable); +#endif // ^^^ no workaround ^^^ STATIC_ASSERT(!default_initializable); STATIC_ASSERT(!default_initializable); @@ -1558,14 +1568,14 @@ namespace test_default_initializable { int x; }; STATIC_ASSERT(default_initializable); +#ifndef __EDG__ // TRANSITION, VSO-1898941 STATIC_ASSERT(!default_initializable); +#endif // ^^^ no workaround ^^^ // Also test GH-1603 "default_initializable accepts types that are not default-initializable" -#if defined(__clang__) || defined(__EDG__) // TRANSITION, DevCom-1326684 +#if defined(__clang__) // TRANSITION, DevCom-1326684 (MSVC) and VSO-1898945 (EDG) STATIC_ASSERT(!default_initializable); -#else // ^^^ no workaround / assert bug so we'll notice when it's fixed vvv - STATIC_ASSERT(default_initializable); -#endif // TRANSITION, DevCom-1326684 +#endif // ^^^ no workaround ^^^ } // namespace test_default_initializable namespace test_move_constructible { @@ -2609,7 +2619,9 @@ namespace test_totally_ordered { STATIC_ASSERT(test()); STATIC_ASSERT(test()); +#ifndef __EDG__ // TRANSITION, VSO-1898947 STATIC_ASSERT(!test()); +#endif // ^^^ no workaround ^^^ STATIC_ASSERT(!test()); constexpr unsigned int Archetype_max = 6; @@ -2711,7 +2723,9 @@ namespace test_totally_ordered_with { STATIC_ASSERT(test()); STATIC_ASSERT(test()); STATIC_ASSERT(test()); +#ifndef __EDG__ // TRANSITION, VSO-1898947 STATIC_ASSERT(!test()); +#endif // ^^^ no workaround ^^^ STATIC_ASSERT(test()); STATIC_ASSERT(test()); diff --git a/tests/std/tests/P1659R3_ranges_alg_ends_with/test.cpp b/tests/std/tests/P1659R3_ranges_alg_ends_with/test.cpp index 37f842ffa5..155357d754 100644 --- a/tests/std/tests/P1659R3_ranges_alg_ends_with/test.cpp +++ b/tests/std/tests/P1659R3_ranges_alg_ends_with/test.cpp @@ -114,7 +114,7 @@ struct instantiator { }; int main() { -#ifndef _PREFAST_ // TRANSITION, GH-1030 +#if !defined(_PREFAST_) && !defined(__EDG__) // TRANSITION, GH-1030 and GH-3567 test_in_in, const pair>(); -#endif // TRANSITION, GH-1030 +#endif // TRANSITION, GH-1030 and GH-3567 } diff --git a/tests/std/tests/P1659R3_ranges_alg_starts_with/test.cpp b/tests/std/tests/P1659R3_ranges_alg_starts_with/test.cpp index b8f545ed52..9ab2871738 100644 --- a/tests/std/tests/P1659R3_ranges_alg_starts_with/test.cpp +++ b/tests/std/tests/P1659R3_ranges_alg_starts_with/test.cpp @@ -78,7 +78,7 @@ int main() { assert(!match); } -#ifndef _PREFAST_ // TRANSITION, GH-1030 +#if !defined(_PREFAST_) && !defined(__EDG__) // TRANSITION, GH-1030 and GH-3567 test_in_in, const pair>(); -#endif // TRANSITION, GH-1030 +#endif // TRANSITION, GH-1030 and GH-3567 } diff --git a/tests/std/tests/P2165R4_tuple_like_operations/test.compile.pass.cpp b/tests/std/tests/P2165R4_tuple_like_operations/test.compile.pass.cpp index 733e3964f5..6f5b4f4d1a 100644 --- a/tests/std/tests/P2165R4_tuple_like_operations/test.compile.pass.cpp +++ b/tests/std/tests/P2165R4_tuple_like_operations/test.compile.pass.cpp @@ -164,10 +164,12 @@ namespace test_tuple_cat { static_assert(CheckTupleCat, array, pair>); static_assert(CheckTupleCat, array, subrange>); static_assert(!CanTupleCat); +#ifndef __EDG__ // TRANSITION, VSO-1900281 static_assert(!CanTupleCat); static_assert(!CanTupleCat>); static_assert(!CanTupleCat>); static_assert(!CanTupleCat, tuple, int>); +#endif // !defined(__EDG__) constexpr bool test() { // Test tuple_cat with empty tuple-like types diff --git a/tests/std/tests/P2278R4_views_as_const/test.cpp b/tests/std/tests/P2278R4_views_as_const/test.cpp index 4d1df1bdf8..e2a1216862 100644 --- a/tests/std/tests/P2278R4_views_as_const/test.cpp +++ b/tests/std/tests/P2278R4_views_as_const/test.cpp @@ -620,14 +620,14 @@ using move_only_view = test::range; int main() { -#ifndef __clang__ // TRANSITION, LLVM-62096 +#if !defined(__clang__) && !defined(__EDG__) // TRANSITION, LLVM-62096 and VSO-1901430 { // Validate views // ... copyable constexpr span s{some_ints}; STATIC_ASSERT(test_one(s, some_ints)); test_one(s, some_ints); } -#endif // TRANSITION, LLVM-62096 +#endif // TRANSITION, LLVM-62096 and VSO-1901430 { // ... move-only test_one(move_only_view{some_ints}, some_ints); @@ -641,8 +641,10 @@ int main() { } { // Validate non-views +#ifndef __EDG__ // TRANSITION, VSO-1900291 STATIC_ASSERT(test_one(some_ints, some_ints)); test_one(some_ints, some_ints); +#endif // !defined(__EDG__) // Test with lvalue, rvalue, and wrapped in ref_view non-views auto vec = some_ints | ranges::to(); @@ -657,9 +659,11 @@ int main() { } { // Validate single_view +#ifndef __EDG__ // TRANSITION, VSO-1900291 static constexpr int one_int[1] = {333}; STATIC_ASSERT(test_one(views::single(333), one_int)); test_one(views::single(333), one_int); +#endif // !defined(__EDG__) } { // Validate empty_view @@ -686,13 +690,13 @@ int main() { test_one(as_const(views::empty), empty_arr); } -#ifndef __clang__ // TRANSITION, LLVM-62096 +#if !defined(__clang__) && !defined(__EDG__) // TRANSITION, LLVM-62096 and VSO-1901430 { // empty range using Span = span; STATIC_ASSERT(test_one(Span{}, Span{})); test_one(Span{}, Span{}); } -#endif // TRANSITION, LLVM-62096 +#endif // TRANSITION, LLVM-62096 and VSO-1901430 STATIC_ASSERT(instantiation_test()); instantiation_test(); diff --git a/tests/std/tests/P2286R8_text_formatting_escaping_legacy_text_encoding/env.lst b/tests/std/tests/P2286R8_text_formatting_escaping_legacy_text_encoding/env.lst index bb35a7194f..a1003e6d5f 100644 --- a/tests/std/tests/P2286R8_text_formatting_escaping_legacy_text_encoding/env.lst +++ b/tests/std/tests/P2286R8_text_formatting_escaping_legacy_text_encoding/env.lst @@ -34,8 +34,8 @@ PM_CL="/MTd /D_ITERATOR_DEBUG_LEVEL=2 /permissive" ASAN PM_CL="/MTd /permissive -fsanitize=address /Zi" PM_LINK="/debug" PM_CL="/MTd /D_ITERATOR_DEBUG_LEVEL=2 /permissive- /analyze:only /analyze:autolog-" ASAN PM_CL="/MTd /permissive- /analyze:only /analyze:autolog- -fsanitize=address /Zi" PM_LINK="/debug" -# PM_CL="/permissive- /BE /c /MD" -# PM_CL="/permissive- /BE /c /MTd" +PM_CL="/permissive- /BE /c /MD" +PM_CL="/permissive- /BE /c /MTd" # PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /permissive- /MD" # PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /permissive- /MTd /fp:strict" # PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /permissive- /MT /fp:strict -fsanitize=undefined -fno-sanitize-recover=undefined" diff --git a/tests/std/tests/P2322R6_ranges_alg_fold/test.cpp b/tests/std/tests/P2322R6_ranges_alg_fold/test.cpp index ba011e0a72..d77a3e3fb1 100644 --- a/tests/std/tests/P2322R6_ranges_alg_fold/test.cpp +++ b/tests/std/tests/P2322R6_ranges_alg_fold/test.cpp @@ -283,7 +283,9 @@ int main() { STATIC_ASSERT((test_bidi(), true)); test_bidi(); +#if !(defined(_DEBUG) && defined(__EDG__)) // TRANSITION, VSO-1949414, see also GH-1566 STATIC_ASSERT(instantiator::non_dependent()); +#endif // !(defined(_DEBUG) && defined(__EDG__)) instantiator::non_dependent(); STATIC_ASSERT(test_in_value_result()); diff --git a/tests/std/tests/P2374R4_views_cartesian_product/test.cpp b/tests/std/tests/P2374R4_views_cartesian_product/test.cpp index 81d7668ff1..ba802574ea 100644 --- a/tests/std/tests/P2374R4_views_cartesian_product/test.cpp +++ b/tests/std/tests/P2374R4_views_cartesian_product/test.cpp @@ -861,7 +861,9 @@ struct instantiator { template static constexpr void call() { typename R::template type r0{get<0>(some_ranges)}; +#ifndef __EDG__ // TRANSITION, VSO-1900293 test_one(expected_result_0, r0); +#endif // !defined(__EDG__) if constexpr (ranges::forward_range>) { typename R::template type r1{get<1>(some_ranges)}; @@ -934,6 +936,7 @@ constexpr void test_gh_3733() { int main() { // Check views +#ifndef __EDG__ // TRANSITION, VSO-1900293 { // ... copyable constexpr span s{get<0>(some_ranges)}; STATIC_ASSERT(test_one(expected_result_0, s)); @@ -945,6 +948,7 @@ int main() { span s{arr}; test_one(expected_result_0, s); } +#endif // !defined(__EDG__) { // ... move-only using test::Common, test::Sized; @@ -971,8 +975,10 @@ int main() { // Check non-views { constexpr auto& r0 = get<0>(some_ranges); +#ifndef __EDG__ // TRANSITION, VSO-1900293 STATIC_ASSERT(test_one(expected_result_0, r0)); test_one(expected_result_0, r0); +#endif // !defined(__EDG__) auto r1 = get<1>(some_ranges) | ranges::to(); test_one(expected_result_1, r0, r1); diff --git a/tests/std/tests/P2441R2_views_join_with/test.cpp b/tests/std/tests/P2441R2_views_join_with/test.cpp index 994f6d9b55..c2fe5a86f4 100644 --- a/tests/std/tests/P2441R2_views_join_with/test.cpp +++ b/tests/std/tests/P2441R2_views_join_with/test.cpp @@ -374,9 +374,9 @@ struct instantiator { Outer empty{span{}}; test_one(empty, "*#"sv, views::empty); } -#ifdef __clang__ // TRANSITION, LLVM-60293 +#if defined(__clang__) || defined(__EDG__) // TRANSITION, LLVM-60293 and VSO-1900294 if constexpr (ranges::forward_range || ranges::common_range) -#endif // __clang__ +#endif // defined(__clang__) || defined(__EDG__) { // Range-of-rvalue delimiter Inner inner_ranges[] = {Inner{span{input[0]}}, Inner{span{input[1]}}, Inner{span{input[2]}}, Inner{span{input[3]}}, Inner{span{input[4]}}, Inner{span{input[5]}}, Inner{span{input[6]}}, diff --git a/tests/std/tests/P2474R2_views_repeat/test.cpp b/tests/std/tests/P2474R2_views_repeat/test.cpp index d89522ba14..915abbf209 100644 --- a/tests/std/tests/P2474R2_views_repeat/test.cpp +++ b/tests/std/tests/P2474R2_views_repeat/test.cpp @@ -191,8 +191,8 @@ constexpr void test_common(T val, B bound = unreachable_sentinel) { assert(second >= first); static_assert(noexcept(first >= second)); // strengthened - assert(first <=> second < 0); - assert(second <=> first > 0); + assert((first <=> second) < 0); + assert((second <=> first) > 0); static_assert(noexcept(first <=> second)); // strengthened { @@ -284,6 +284,10 @@ struct forward_tester { }; struct tuple_tester { +#ifdef __EDG__ // TRANSITION, VSO-1898933 + template + constexpr tuple_tester(Arg1&& arg1, Arg2&& arg2) : y(forward(arg1)), z(forward(arg2)) {} +#endif // defined(__EDG__) forward_tester y; forward_tester z; }; diff --git a/tests/std/tests/VSO_0157762_feature_test_macros/test.compile.pass.cpp b/tests/std/tests/VSO_0157762_feature_test_macros/test.compile.pass.cpp index 7d8d9901de..614d6484e6 100644 --- a/tests/std/tests/VSO_0157762_feature_test_macros/test.compile.pass.cpp +++ b/tests/std/tests/VSO_0157762_feature_test_macros/test.compile.pass.cpp @@ -197,9 +197,9 @@ STATIC_ASSERT(__cpp_lib_common_reference_wrapper == 202302L); STATIC_ASSERT(__cpp_lib_complex_udls == 201309L); -#if _HAS_CXX23 && !defined(__EDG__) // TRANSITION, GH-395 +#if _HAS_CXX23 STATIC_ASSERT(__cpp_lib_concepts == 202207L); -#elif _HAS_CXX20 && !defined(__EDG__) // TRANSITION, GH-395 +#elif _HAS_CXX20 STATIC_ASSERT(__cpp_lib_concepts == 202002L); #elif defined(__cpp_lib_concepts) #error __cpp_lib_concepts is defined diff --git a/tests/std/tests/concepts_20_matrix.lst b/tests/std/tests/concepts_20_matrix.lst index 03da2121ae..58d282d4a4 100644 --- a/tests/std/tests/concepts_20_matrix.lst +++ b/tests/std/tests/concepts_20_matrix.lst @@ -36,8 +36,8 @@ PM_CL="/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /permissive- /analyze ASAN PM_CL="/EHsc /MTd /std:c++latest /permissive- /analyze:only /analyze:autolog- -fsanitize=address /Zi" PM_LINK="/debug" PM_CL="/clr /MD /std:c++20" PM_CL="/clr /MDd /std:c++20" -# PM_CL="/std:c++20 /permissive- /BE /c /EHsc /MD" # TRANSITION, GH-395 -# PM_CL="/std:c++latest /permissive- /BE /c /EHsc /MTd" # TRANSITION, GH-395 +PM_CL="/std:c++20 /permissive- /BE /c /EHsc /MD" +PM_CL="/std:c++latest /permissive- /BE /c /EHsc /MTd" PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /std:c++20 /permissive- /MD" PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /std:c++latest /permissive- /MTd /fp:strict" PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /std:c++latest /permissive- /MT /fp:strict -fsanitize=undefined -fno-sanitize-recover=undefined" diff --git a/tests/std/tests/concepts_latest_matrix.lst b/tests/std/tests/concepts_latest_matrix.lst index 07c13e3bc8..6eb7aef5cd 100644 --- a/tests/std/tests/concepts_latest_matrix.lst +++ b/tests/std/tests/concepts_latest_matrix.lst @@ -31,8 +31,8 @@ PM_CL="/MTd /D_ITERATOR_DEBUG_LEVEL=2 /permissive" ASAN PM_CL="/MTd /permissive -fsanitize=address /Zi" PM_LINK="/debug" PM_CL="/MTd /D_ITERATOR_DEBUG_LEVEL=2 /permissive- /analyze:only /analyze:autolog-" ASAN PM_CL="/MTd /permissive- /analyze:only /analyze:autolog- -fsanitize=address /Zi" PM_LINK="/debug" -# PM_CL="/permissive- /BE /c /MD" # TRANSITION, GH-395 -# PM_CL="/permissive- /BE /c /MTd" # TRANSITION, GH-395 +PM_CL="/permissive- /BE /c /MD" +PM_CL="/permissive- /BE /c /MTd" PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /permissive- /MD" PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /permissive- /MTd /fp:strict" PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /permissive- /MT /fp:strict -fsanitize=undefined -fno-sanitize-recover=undefined" diff --git a/tests/std/tests/strict_concepts_20_matrix.lst b/tests/std/tests/strict_concepts_20_matrix.lst index e2270db8ff..5dd897ede1 100644 --- a/tests/std/tests/strict_concepts_20_matrix.lst +++ b/tests/std/tests/strict_concepts_20_matrix.lst @@ -35,8 +35,8 @@ PM_CL="/EHsc /MTd /D_ITERATOR_DEBUG_LEVEL=2 /std:c++latest /analyze:only /analyz ASAN PM_CL="/EHsc /MTd /std:c++latest /analyze:only /analyze:autolog- -fsanitize=address /Zi" PM_LINK="/debug" PM_CL="/clr /MD /std:c++20" PM_CL="/clr /MDd /std:c++20" -# PM_CL="/std:c++20 /BE /c /EHsc /MD" # TRANSITION, GH-395 -# PM_CL="/std:c++latest /BE /c /EHsc /MTd" # TRANSITION, GH-395 +PM_CL="/std:c++20 /BE /c /EHsc /MD" +PM_CL="/std:c++latest /BE /c /EHsc /MTd" PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /std:c++20 /MD" PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /std:c++latest /MTd /fp:strict" PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /EHsc /std:c++latest /MT /fp:strict -fsanitize=undefined -fno-sanitize-recover=undefined" diff --git a/tests/std/tests/strict_concepts_latest_matrix.lst b/tests/std/tests/strict_concepts_latest_matrix.lst index f513cfefec..8f6fa77e7c 100644 --- a/tests/std/tests/strict_concepts_latest_matrix.lst +++ b/tests/std/tests/strict_concepts_latest_matrix.lst @@ -33,8 +33,8 @@ PM_CL="/MTd /D_ITERATOR_DEBUG_LEVEL=2" # No corresponding ASAN config, since the above differs from another config only in IDL PM_CL="/MTd /D_ITERATOR_DEBUG_LEVEL=2 /analyze:only /analyze:autolog-" ASAN PM_CL="/MTd /analyze:only /analyze:autolog- -fsanitize=address /Zi" PM_LINK="/debug" -# PM_CL="/BE /c /MD" # TRANSITION, GH-395 -# PM_CL="/BE /c /MTd" # TRANSITION, GH-395 +PM_CL="/BE /c /MD" +PM_CL="/BE /c /MTd" PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /MD" PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /MTd /fp:strict" PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call /MT /fp:strict -fsanitize=undefined -fno-sanitize-recover=undefined"