diff --git a/libcxx/docs/FeatureTestMacroTable.rst b/libcxx/docs/FeatureTestMacroTable.rst --- a/libcxx/docs/FeatureTestMacroTable.rst +++ b/libcxx/docs/FeatureTestMacroTable.rst @@ -170,6 +170,8 @@ ------------------------------------------------------------------- ``__cpp_lib_array_constexpr`` ``201811L`` ------------------------------------------------- ----------------- + ``__cpp_lib_assume_aligned`` *unimplemented* + ------------------------------------------------- ----------------- ``__cpp_lib_atomic_flag_test`` ``201907L`` ------------------------------------------------- ----------------- ``__cpp_lib_atomic_float`` *unimplemented* @@ -184,48 +186,108 @@ ------------------------------------------------- ----------------- ``__cpp_lib_atomic_wait`` ``201907L`` ------------------------------------------------- ----------------- + ``__cpp_lib_barrier`` ``201907L`` + ------------------------------------------------- ----------------- ``__cpp_lib_bind_front`` *unimplemented* ------------------------------------------------- ----------------- ``__cpp_lib_bit_cast`` *unimplemented* ------------------------------------------------- ----------------- + ``__cpp_lib_bitops`` *unimplemented* + ------------------------------------------------- ----------------- + ``__cpp_lib_bounded_array_traits`` ``201902L`` + ------------------------------------------------- ----------------- ``__cpp_lib_char8_t`` ``201811L`` ------------------------------------------------- ----------------- ``__cpp_lib_concepts`` *unimplemented* ------------------------------------------------- ----------------- + ``__cpp_lib_constexpr_algorithms`` *unimplemented* + ------------------------------------------------- ----------------- + ``__cpp_lib_constexpr_complex`` *unimplemented* + ------------------------------------------------- ----------------- ``__cpp_lib_constexpr_dynamic_alloc`` ``201907L`` ------------------------------------------------- ----------------- - ``__cpp_lib_constexpr_misc`` *unimplemented* + ``__cpp_lib_constexpr_functional`` *unimplemented* + ------------------------------------------------- ----------------- + ``__cpp_lib_constexpr_iterator`` *unimplemented* + ------------------------------------------------- ----------------- + ``__cpp_lib_constexpr_memory`` *unimplemented* ------------------------------------------------- ----------------- ``__cpp_lib_constexpr_numeric`` ``201911L`` ------------------------------------------------- ----------------- - ``__cpp_lib_constexpr_swap_algorithms`` *unimplemented* + ``__cpp_lib_constexpr_string`` *unimplemented* + ------------------------------------------------- ----------------- + ``__cpp_lib_constexpr_string_view`` *unimplemented* + ------------------------------------------------- ----------------- + ``__cpp_lib_constexpr_tuple`` *unimplemented* ------------------------------------------------- ----------------- ``__cpp_lib_constexpr_utility`` ``201811L`` ------------------------------------------------- ----------------- + ``__cpp_lib_constexpr_vector`` *unimplemented* + ------------------------------------------------- ----------------- + ``__cpp_lib_coroutine`` *unimplemented* + ------------------------------------------------- ----------------- ``__cpp_lib_destroying_delete`` ``201806L`` ------------------------------------------------- ----------------- ``__cpp_lib_endian`` ``201907L`` ------------------------------------------------- ----------------- ``__cpp_lib_erase_if`` ``202002L`` ------------------------------------------------- ----------------- + ``__cpp_lib_execution`` *unimplemented* + ------------------------------------------------- ----------------- ``__cpp_lib_generic_unordered_lookup`` ``201811L`` ------------------------------------------------- ----------------- ``__cpp_lib_int_pow2`` ``202002L`` ------------------------------------------------- ----------------- + ``__cpp_lib_integer_comparison_functions`` *unimplemented* + ------------------------------------------------- ----------------- ``__cpp_lib_interpolate`` ``201902L`` ------------------------------------------------- ----------------- ``__cpp_lib_is_constant_evaluated`` ``201811L`` ------------------------------------------------- ----------------- + ``__cpp_lib_is_layout_compatible`` *unimplemented* + ------------------------------------------------- ----------------- + ``__cpp_lib_is_nothrow_convertible`` *unimplemented* + ------------------------------------------------- ----------------- + ``__cpp_lib_is_pointer_interconvertible`` *unimplemented* + ------------------------------------------------- ----------------- + ``__cpp_lib_jthread`` *unimplemented* + ------------------------------------------------- ----------------- + ``__cpp_lib_latch`` ``201907L`` + ------------------------------------------------- ----------------- ``__cpp_lib_list_remove_return_type`` ``201806L`` ------------------------------------------------- ----------------- ``__cpp_lib_math_constants`` ``201907L`` ------------------------------------------------- ----------------- + ``__cpp_lib_polymorphic_allocator`` *unimplemented* + ------------------------------------------------- ----------------- ``__cpp_lib_ranges`` *unimplemented* ------------------------------------------------- ----------------- + ``__cpp_lib_remove_cvref`` ``201711L`` + ------------------------------------------------- ----------------- + ``__cpp_lib_semaphore`` ``201907L`` + ------------------------------------------------- ----------------- + ``__cpp_lib_shift`` *unimplemented* + ------------------------------------------------- ----------------- + ``__cpp_lib_smart_ptr_for_overwrite`` *unimplemented* + ------------------------------------------------- ----------------- + ``__cpp_lib_source_location`` *unimplemented* + ------------------------------------------------- ----------------- ``__cpp_lib_span`` ``202002L`` ------------------------------------------------- ----------------- + ``__cpp_lib_ssize`` ``201902L`` + ------------------------------------------------- ----------------- + ``__cpp_lib_starts_ends_with`` ``201711L`` + ------------------------------------------------- ----------------- + ``__cpp_lib_string_view`` ``201803L`` + ------------------------------------------------- ----------------- + ``__cpp_lib_syncbuf`` *unimplemented* + ------------------------------------------------- ----------------- ``__cpp_lib_three_way_comparison`` *unimplemented* ------------------------------------------------- ----------------- + ``__cpp_lib_to_address`` ``201711L`` + ------------------------------------------------- ----------------- ``__cpp_lib_to_array`` ``201907L`` + ------------------------------------------------- ----------------- + ``__cpp_lib_unwrap_ref`` ``201811L`` ================================================= ================= diff --git a/libcxx/include/version b/libcxx/include/version --- a/libcxx/include/version +++ b/libcxx/include/version @@ -15,15 +15,16 @@ Macro name Value Headers __cpp_lib_addressof_constexpr 201603L -__cpp_lib_allocator_traits_is_always_equal 201411L - - - +__cpp_lib_allocator_traits_is_always_equal 201411L + + + __cpp_lib_any 201606L __cpp_lib_apply 201603L -__cpp_lib_array_constexpr 201811L +__cpp_lib_array_constexpr 201811L 201603L // C++17 __cpp_lib_as_const 201510L +__cpp_lib_assume_aligned 201811L __cpp_lib_atomic_flag_test 201907L __cpp_lib_atomic_float 201711L __cpp_lib_atomic_is_always_lock_free 201603L @@ -32,9 +33,12 @@ __cpp_lib_atomic_shared_ptr 201711L __cpp_lib_atomic_value_initialization 201911L __cpp_lib_atomic_wait 201907L -__cpp_lib_bind_front 201811L +__cpp_lib_barrier 201907L +__cpp_lib_bind_front 201907L __cpp_lib_bit_cast 201806L +__cpp_lib_bitops 201907L __cpp_lib_bool_constant 201505L +__cpp_lib_bounded_array_traits 201902L __cpp_lib_boyer_moore_searcher 201603L __cpp_lib_byte 201603L __cpp_lib_char8_t 201811L @@ -44,21 +48,29 @@ __cpp_lib_chrono_udls 201304L __cpp_lib_clamp 201603L __cpp_lib_complex_udls 201309L -__cpp_lib_concepts 201806L +__cpp_lib_concepts 202002L +__cpp_lib_constexpr_algorithms 201806L +__cpp_lib_constexpr_complex 201711L __cpp_lib_constexpr_dynamic_alloc 201907L -__cpp_lib_constexpr_misc 201811L - +__cpp_lib_constexpr_functional 201907L +__cpp_lib_constexpr_iterator 201811L +__cpp_lib_constexpr_memory 201811L __cpp_lib_constexpr_numeric 201911L -__cpp_lib_constexpr_swap_algorithms 201806L +__cpp_lib_constexpr_string 201907L +__cpp_lib_constexpr_string_view 201811L +__cpp_lib_constexpr_tuple 201811L __cpp_lib_constexpr_utility 201811L +__cpp_lib_constexpr_vector 201907L +__cpp_lib_coroutine 201902L __cpp_lib_destroying_delete 201806L __cpp_lib_enable_shared_from_this 201603L __cpp_lib_endian 201907L -__cpp_lib_erase_if 202002L - - +__cpp_lib_erase_if 202002L + + __cpp_lib_exchange_function 201304L -__cpp_lib_execution 201603L +__cpp_lib_execution 201902L + 201603L // C++17 __cpp_lib_filesystem 201703L __cpp_lib_gcd_lcm 201606L __cpp_lib_generic_associative_lookup 201304L @@ -68,16 +80,22 @@ __cpp_lib_hypot 201603L __cpp_lib_incomplete_container_elements 201505L __cpp_lib_int_pow2 202002L +__cpp_lib_integer_comparison_functions 202002L __cpp_lib_integer_sequence 201304L __cpp_lib_integral_constant_callable 201304L -__cpp_lib_interpolate 201902L +__cpp_lib_interpolate 201902L __cpp_lib_invoke 201411L __cpp_lib_is_aggregate 201703L __cpp_lib_is_constant_evaluated 201811L __cpp_lib_is_final 201402L __cpp_lib_is_invocable 201703L +__cpp_lib_is_layout_compatible 201907L +__cpp_lib_is_nothrow_convertible 201806L __cpp_lib_is_null_pointer 201309L +__cpp_lib_is_pointer_interconvertible 201907L __cpp_lib_is_swappable 201603L +__cpp_lib_jthread 201911L +__cpp_lib_latch 201907L __cpp_lib_launder 201606L __cpp_lib_list_remove_return_type 201806L __cpp_lib_logical_traits 201510L @@ -90,40 +108,52 @@ __cpp_lib_memory_resource 201603L __cpp_lib_node_extract 201606L -__cpp_lib_nonmember_container_access 201411L - +__cpp_lib_nonmember_container_access 201411L + __cpp_lib_not_fn 201603L __cpp_lib_null_iterators 201304L __cpp_lib_optional 201606L __cpp_lib_parallel_algorithm 201603L +__cpp_lib_polymorphic_allocator 201902L __cpp_lib_quoted_string_io 201304L __cpp_lib_ranges 201811L __cpp_lib_raw_memory_algorithms 201606L +__cpp_lib_remove_cvref 201711L __cpp_lib_result_of_sfinae 201210L __cpp_lib_robust_nonmodifying_seq_ops 201304L __cpp_lib_sample 201603L __cpp_lib_scoped_lock 201703L +__cpp_lib_semaphore 201907L __cpp_lib_shared_mutex 201505L __cpp_lib_shared_ptr_arrays 201611L __cpp_lib_shared_ptr_weak_type 201606L __cpp_lib_shared_timed_mutex 201402L +__cpp_lib_shift 201806L +__cpp_lib_smart_ptr_for_overwrite 202002L +__cpp_lib_source_location 201907L __cpp_lib_span 202002L +__cpp_lib_ssize 201902L +__cpp_lib_starts_ends_with 201711L __cpp_lib_string_udls 201304L -__cpp_lib_string_view 201606L -__cpp_lib_three_way_comparison 201711L +__cpp_lib_string_view 201803L + 201606L // C++17 +__cpp_lib_syncbuf 201803L +__cpp_lib_three_way_comparison 201907L +__cpp_lib_to_address 201711L __cpp_lib_to_array 201907L __cpp_lib_to_chars 201611L __cpp_lib_transformation_trait_aliases 201304L -__cpp_lib_transparent_operators 201510L +__cpp_lib_transparent_operators 201510L 201210L // C++14 __cpp_lib_tuple_element_t 201402L -__cpp_lib_tuples_by_type 201304L +__cpp_lib_tuples_by_type 201304L __cpp_lib_type_trait_variable_templates 201510L __cpp_lib_uncaught_exceptions 201411L __cpp_lib_unordered_map_try_emplace 201411L +__cpp_lib_unwrap_ref 201811L __cpp_lib_variant 201606L __cpp_lib_void_t 201411L @@ -226,6 +256,7 @@ #if _LIBCPP_STD_VER > 17 # undef __cpp_lib_array_constexpr # define __cpp_lib_array_constexpr 201811L +// # define __cpp_lib_assume_aligned 201811L # if !defined(_LIBCPP_HAS_NO_THREADS) # define __cpp_lib_atomic_flag_test 201907L # endif @@ -247,36 +278,76 @@ # if !defined(_LIBCPP_HAS_NO_THREADS) # define __cpp_lib_atomic_wait 201907L # endif -// # define __cpp_lib_bind_front 201811L +# if !defined(_LIBCPP_HAS_NO_THREADS) +# define __cpp_lib_barrier 201907L +# endif +// # define __cpp_lib_bind_front 201907L // # define __cpp_lib_bit_cast 201806L +// # define __cpp_lib_bitops 201907L +# define __cpp_lib_bounded_array_traits 201902L # if !defined(_LIBCPP_NO_HAS_CHAR8_T) # define __cpp_lib_char8_t 201811L # endif -// # define __cpp_lib_concepts 201806L +// # define __cpp_lib_concepts 202002L +// # define __cpp_lib_constexpr_algorithms 201806L +// # define __cpp_lib_constexpr_complex 201711L # define __cpp_lib_constexpr_dynamic_alloc 201907L -// # define __cpp_lib_constexpr_misc 201811L +// # define __cpp_lib_constexpr_functional 201907L +// # define __cpp_lib_constexpr_iterator 201811L +// # define __cpp_lib_constexpr_memory 201811L # define __cpp_lib_constexpr_numeric 201911L -// # define __cpp_lib_constexpr_swap_algorithms 201806L +// # 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_coroutine 201902L # if _LIBCPP_STD_VER > 17 && defined(__cpp_impl_destroying_delete) && __cpp_impl_destroying_delete >= 201806L # define __cpp_lib_destroying_delete 201806L # endif # define __cpp_lib_endian 201907L # define __cpp_lib_erase_if 202002L +# undef __cpp_lib_execution +// # define __cpp_lib_execution 201902L # 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 # if !defined(_LIBCPP_HAS_NO_BUILTIN_IS_CONSTANT_EVALUATED) # define __cpp_lib_is_constant_evaluated 201811L # endif +// # define __cpp_lib_is_layout_compatible 201907L +// # define __cpp_lib_is_nothrow_convertible 201806L +// # define __cpp_lib_is_pointer_interconvertible 201907L +# if !defined(_LIBCPP_HAS_NO_THREADS) +// # define __cpp_lib_jthread 201911L +# endif +# if !defined(_LIBCPP_HAS_NO_THREADS) +# define __cpp_lib_latch 201907L +# endif # define __cpp_lib_list_remove_return_type 201806L # if defined(__cpp_concepts) && __cpp_concepts >= 201811L # define __cpp_lib_math_constants 201907L # endif +// # define __cpp_lib_polymorphic_allocator 201902L // # define __cpp_lib_ranges 201811L +# define __cpp_lib_remove_cvref 201711L +# if !defined(_LIBCPP_HAS_NO_THREADS) +# define __cpp_lib_semaphore 201907L +# endif +// # define __cpp_lib_shift 201806L +// # define __cpp_lib_smart_ptr_for_overwrite 202002L +// # define __cpp_lib_source_location 201907L # define __cpp_lib_span 202002L -// # define __cpp_lib_three_way_comparison 201711L +# define __cpp_lib_ssize 201902L +# define __cpp_lib_starts_ends_with 201711L +# undef __cpp_lib_string_view +# define __cpp_lib_string_view 201803L +// # define __cpp_lib_syncbuf 201803L +// # define __cpp_lib_three_way_comparison 201907L +# define __cpp_lib_to_address 201711L # define __cpp_lib_to_array 201907L +# define __cpp_lib_unwrap_ref 201811L #endif #endif // _LIBCPP_VERSIONH diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/algorithm.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/algorithm.version.pass.cpp --- a/libcxx/test/std/language.support/support.limits/support.limits.general/algorithm.version.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/algorithm.version.pass.cpp @@ -15,11 +15,12 @@ /* Constant Value __cpp_lib_clamp 201603L [C++17] - __cpp_lib_constexpr_swap_algorithms 201806L [C++2a] + __cpp_lib_constexpr_algorithms 201806L [C++2a] __cpp_lib_parallel_algorithm 201603L [C++17] __cpp_lib_ranges 201811L [C++2a] __cpp_lib_robust_nonmodifying_seq_ops 201304L [C++14] __cpp_lib_sample 201603L [C++17] + __cpp_lib_shift 201806L [C++2a] */ #include @@ -31,8 +32,8 @@ # error "__cpp_lib_clamp should not be defined before c++17" # endif -# ifdef __cpp_lib_constexpr_swap_algorithms -# error "__cpp_lib_constexpr_swap_algorithms should not be defined before c++2a" +# ifdef __cpp_lib_constexpr_algorithms +# error "__cpp_lib_constexpr_algorithms should not be defined before c++2a" # endif # ifdef __cpp_lib_parallel_algorithm @@ -51,14 +52,18 @@ # error "__cpp_lib_sample should not be defined before c++17" # endif +# ifdef __cpp_lib_shift +# error "__cpp_lib_shift should not be defined before c++2a" +# endif + #elif TEST_STD_VER == 14 # ifdef __cpp_lib_clamp # error "__cpp_lib_clamp should not be defined before c++17" # endif -# ifdef __cpp_lib_constexpr_swap_algorithms -# error "__cpp_lib_constexpr_swap_algorithms should not be defined before c++2a" +# ifdef __cpp_lib_constexpr_algorithms +# error "__cpp_lib_constexpr_algorithms should not be defined before c++2a" # endif # ifdef __cpp_lib_parallel_algorithm @@ -80,6 +85,10 @@ # error "__cpp_lib_sample should not be defined before c++17" # endif +# ifdef __cpp_lib_shift +# error "__cpp_lib_shift should not be defined before c++2a" +# endif + #elif TEST_STD_VER == 17 # ifndef __cpp_lib_clamp @@ -89,8 +98,8 @@ # error "__cpp_lib_clamp should have the value 201603L in c++17" # endif -# ifdef __cpp_lib_constexpr_swap_algorithms -# error "__cpp_lib_constexpr_swap_algorithms should not be defined before c++2a" +# ifdef __cpp_lib_constexpr_algorithms +# error "__cpp_lib_constexpr_algorithms should not be defined before c++2a" # endif # if !defined(_LIBCPP_VERSION) @@ -124,6 +133,10 @@ # error "__cpp_lib_sample should have the value 201603L in c++17" # endif +# ifdef __cpp_lib_shift +# error "__cpp_lib_shift should not be defined before c++2a" +# endif + #elif TEST_STD_VER > 17 # ifndef __cpp_lib_clamp @@ -134,15 +147,15 @@ # endif # if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_constexpr_swap_algorithms -# error "__cpp_lib_constexpr_swap_algorithms should be defined in c++2a" +# ifndef __cpp_lib_constexpr_algorithms +# error "__cpp_lib_constexpr_algorithms should be defined in c++2a" # endif -# if __cpp_lib_constexpr_swap_algorithms != 201806L -# error "__cpp_lib_constexpr_swap_algorithms should have the value 201806L in c++2a" +# if __cpp_lib_constexpr_algorithms != 201806L +# error "__cpp_lib_constexpr_algorithms should have the value 201806L in c++2a" # endif # else // _LIBCPP_VERSION -# ifdef __cpp_lib_constexpr_swap_algorithms -# error "__cpp_lib_constexpr_swap_algorithms should not be defined because it is unimplemented in libc++!" +# ifdef __cpp_lib_constexpr_algorithms +# error "__cpp_lib_constexpr_algorithms should not be defined because it is unimplemented in libc++!" # endif # endif @@ -186,6 +199,19 @@ # error "__cpp_lib_sample should have the value 201603L in c++2a" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_shift +# error "__cpp_lib_shift should be defined in c++2a" +# endif +# if __cpp_lib_shift != 201806L +# error "__cpp_lib_shift should have the value 201806L in c++2a" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_shift +# error "__cpp_lib_shift should not be defined because it is unimplemented in libc++!" +# endif +# endif + #endif // TEST_STD_VER > 17 int main(int, char**) { return 0; } diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/array.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/array.version.pass.cpp --- a/libcxx/test/std/language.support/support.limits/support.limits.general/array.version.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/array.version.pass.cpp @@ -16,7 +16,6 @@ /* Constant Value __cpp_lib_array_constexpr 201603L [C++17] 201811L [C++2a] - __cpp_lib_constexpr_misc 201811L [C++2a] __cpp_lib_nonmember_container_access 201411L [C++17] __cpp_lib_to_array 201907L [C++2a] */ @@ -30,10 +29,6 @@ # error "__cpp_lib_array_constexpr should not be defined before c++17" # endif -# ifdef __cpp_lib_constexpr_misc -# error "__cpp_lib_constexpr_misc should not be defined before c++2a" -# endif - # ifdef __cpp_lib_nonmember_container_access # error "__cpp_lib_nonmember_container_access should not be defined before c++17" # endif @@ -48,10 +43,6 @@ # error "__cpp_lib_array_constexpr should not be defined before c++17" # endif -# ifdef __cpp_lib_constexpr_misc -# error "__cpp_lib_constexpr_misc should not be defined before c++2a" -# endif - # ifdef __cpp_lib_nonmember_container_access # error "__cpp_lib_nonmember_container_access should not be defined before c++17" # endif @@ -69,10 +60,6 @@ # error "__cpp_lib_array_constexpr should have the value 201603L in c++17" # endif -# ifdef __cpp_lib_constexpr_misc -# error "__cpp_lib_constexpr_misc should not be defined before c++2a" -# endif - # ifndef __cpp_lib_nonmember_container_access # error "__cpp_lib_nonmember_container_access should be defined in c++17" # endif @@ -93,19 +80,6 @@ # error "__cpp_lib_array_constexpr should have the value 201811L in c++2a" # endif -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_constexpr_misc -# error "__cpp_lib_constexpr_misc should be defined in c++2a" -# endif -# if __cpp_lib_constexpr_misc != 201811L -# error "__cpp_lib_constexpr_misc should have the value 201811L in c++2a" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_constexpr_misc -# error "__cpp_lib_constexpr_misc should not be defined because it is unimplemented in libc++!" -# endif -# endif - # ifndef __cpp_lib_nonmember_container_access # error "__cpp_lib_nonmember_container_access should be defined in c++2a" # endif diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/barrier.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/barrier.version.pass.cpp new file mode 100644 --- /dev/null +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/barrier.version.pass.cpp @@ -0,0 +1,58 @@ +//===----------------------------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// WARNING: This test was generated by generate_feature_test_macro_components.py +// and should not be edited manually. + +// + +// Test the feature test macros defined by + +/* Constant Value + __cpp_lib_barrier 201907L [C++2a] +*/ + +#include +#include "test_macros.h" + +#if TEST_STD_VER < 14 + +# ifdef __cpp_lib_barrier +# error "__cpp_lib_barrier should not be defined before c++2a" +# endif + +#elif TEST_STD_VER == 14 + +# ifdef __cpp_lib_barrier +# error "__cpp_lib_barrier should not be defined before c++2a" +# endif + +#elif TEST_STD_VER == 17 + +# ifdef __cpp_lib_barrier +# error "__cpp_lib_barrier should not be defined before c++2a" +# endif + +#elif TEST_STD_VER > 17 + +# if !defined(_LIBCPP_HAS_NO_THREADS) +# ifndef __cpp_lib_barrier +# error "__cpp_lib_barrier should be defined in c++2a" +# endif +# if __cpp_lib_barrier != 201907L +# error "__cpp_lib_barrier should have the value 201907L in c++2a" +# endif +# else +# ifdef __cpp_lib_barrier +# error "__cpp_lib_barrier should not be defined when !defined(_LIBCPP_HAS_NO_THREADS) is not defined!" +# endif +# endif + +#endif // TEST_STD_VER > 17 + +int main(int, char**) { return 0; } diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/bit.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/bit.version.pass.cpp --- a/libcxx/test/std/language.support/support.limits/support.limits.general/bit.version.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/bit.version.pass.cpp @@ -15,6 +15,7 @@ /* Constant Value __cpp_lib_bit_cast 201806L [C++2a] + __cpp_lib_bitops 201907L [C++2a] __cpp_lib_endian 201907L [C++2a] __cpp_lib_int_pow2 202002L [C++2a] */ @@ -28,6 +29,10 @@ # error "__cpp_lib_bit_cast should not be defined before c++2a" # endif +# ifdef __cpp_lib_bitops +# error "__cpp_lib_bitops should not be defined before c++2a" +# endif + # ifdef __cpp_lib_endian # error "__cpp_lib_endian should not be defined before c++2a" # endif @@ -42,6 +47,10 @@ # error "__cpp_lib_bit_cast should not be defined before c++2a" # endif +# ifdef __cpp_lib_bitops +# error "__cpp_lib_bitops should not be defined before c++2a" +# endif + # ifdef __cpp_lib_endian # error "__cpp_lib_endian should not be defined before c++2a" # endif @@ -56,6 +65,10 @@ # error "__cpp_lib_bit_cast should not be defined before c++2a" # endif +# ifdef __cpp_lib_bitops +# error "__cpp_lib_bitops should not be defined before c++2a" +# endif + # ifdef __cpp_lib_endian # error "__cpp_lib_endian should not be defined before c++2a" # endif @@ -79,6 +92,19 @@ # endif # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_bitops +# error "__cpp_lib_bitops should be defined in c++2a" +# endif +# if __cpp_lib_bitops != 201907L +# error "__cpp_lib_bitops should have the value 201907L in c++2a" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_bitops +# error "__cpp_lib_bitops should not be defined because it is unimplemented in libc++!" +# endif +# endif + # ifndef __cpp_lib_endian # error "__cpp_lib_endian should be defined in c++2a" # endif diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/cmath.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/cmath.version.pass.cpp --- a/libcxx/test/std/language.support/support.limits/support.limits.general/cmath.version.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/cmath.version.pass.cpp @@ -15,6 +15,7 @@ /* Constant Value __cpp_lib_hypot 201603L [C++17] + __cpp_lib_interpolate 201902L [C++2a] __cpp_lib_math_special_functions 201603L [C++17] */ @@ -27,6 +28,10 @@ # error "__cpp_lib_hypot should not be defined before c++17" # endif +# ifdef __cpp_lib_interpolate +# error "__cpp_lib_interpolate should not be defined before c++2a" +# endif + # ifdef __cpp_lib_math_special_functions # error "__cpp_lib_math_special_functions should not be defined before c++17" # endif @@ -37,6 +42,10 @@ # error "__cpp_lib_hypot should not be defined before c++17" # endif +# ifdef __cpp_lib_interpolate +# error "__cpp_lib_interpolate should not be defined before c++2a" +# endif + # ifdef __cpp_lib_math_special_functions # error "__cpp_lib_math_special_functions should not be defined before c++17" # endif @@ -50,6 +59,10 @@ # error "__cpp_lib_hypot should have the value 201603L in c++17" # endif +# ifdef __cpp_lib_interpolate +# error "__cpp_lib_interpolate should not be defined before c++2a" +# endif + # if !defined(_LIBCPP_VERSION) # ifndef __cpp_lib_math_special_functions # error "__cpp_lib_math_special_functions should be defined in c++17" @@ -72,6 +85,13 @@ # error "__cpp_lib_hypot should have the value 201603L in c++2a" # endif +# ifndef __cpp_lib_interpolate +# error "__cpp_lib_interpolate should be defined in c++2a" +# endif +# if __cpp_lib_interpolate != 201902L +# error "__cpp_lib_interpolate should have the value 201902L in c++2a" +# endif + # if !defined(_LIBCPP_VERSION) # ifndef __cpp_lib_math_special_functions # error "__cpp_lib_math_special_functions should be defined in c++2a" diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/compare.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/compare.version.pass.cpp --- a/libcxx/test/std/language.support/support.limits/support.limits.general/compare.version.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/compare.version.pass.cpp @@ -14,7 +14,7 @@ // Test the feature test macros defined by /* Constant Value - __cpp_lib_three_way_comparison 201711L [C++2a] + __cpp_lib_three_way_comparison 201907L [C++2a] */ #include @@ -44,8 +44,8 @@ # ifndef __cpp_lib_three_way_comparison # error "__cpp_lib_three_way_comparison should be defined in c++2a" # endif -# if __cpp_lib_three_way_comparison != 201711L -# error "__cpp_lib_three_way_comparison should have the value 201711L in c++2a" +# if __cpp_lib_three_way_comparison != 201907L +# error "__cpp_lib_three_way_comparison should have the value 201907L in c++2a" # endif # else // _LIBCPP_VERSION # ifdef __cpp_lib_three_way_comparison diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/complex.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/complex.version.pass.cpp --- a/libcxx/test/std/language.support/support.limits/support.limits.general/complex.version.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/complex.version.pass.cpp @@ -13,8 +13,9 @@ // Test the feature test macros defined by -/* Constant Value - __cpp_lib_complex_udls 201309L [C++14] +/* Constant Value + __cpp_lib_complex_udls 201309L [C++14] + __cpp_lib_constexpr_complex 201711L [C++2a] */ #include @@ -26,6 +27,10 @@ # error "__cpp_lib_complex_udls should not be defined before c++14" # endif +# ifdef __cpp_lib_constexpr_complex +# error "__cpp_lib_constexpr_complex should not be defined before c++2a" +# endif + #elif TEST_STD_VER == 14 # ifndef __cpp_lib_complex_udls @@ -35,6 +40,10 @@ # error "__cpp_lib_complex_udls should have the value 201309L in c++14" # endif +# ifdef __cpp_lib_constexpr_complex +# error "__cpp_lib_constexpr_complex should not be defined before c++2a" +# endif + #elif TEST_STD_VER == 17 # ifndef __cpp_lib_complex_udls @@ -44,6 +53,10 @@ # error "__cpp_lib_complex_udls should have the value 201309L in c++17" # endif +# ifdef __cpp_lib_constexpr_complex +# error "__cpp_lib_constexpr_complex should not be defined before c++2a" +# endif + #elif TEST_STD_VER > 17 # ifndef __cpp_lib_complex_udls @@ -53,6 +66,19 @@ # error "__cpp_lib_complex_udls should have the value 201309L in c++2a" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_constexpr_complex +# error "__cpp_lib_constexpr_complex should be defined in c++2a" +# endif +# if __cpp_lib_constexpr_complex != 201711L +# error "__cpp_lib_constexpr_complex should have the value 201711L in c++2a" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_constexpr_complex +# error "__cpp_lib_constexpr_complex should not be defined because it is unimplemented in libc++!" +# endif +# endif + #endif // TEST_STD_VER > 17 int main(int, char**) { return 0; } diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/concepts.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/concepts.version.pass.cpp --- a/libcxx/test/std/language.support/support.limits/support.limits.general/concepts.version.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/concepts.version.pass.cpp @@ -14,7 +14,7 @@ // Test the feature test macros defined by /* Constant Value - __cpp_lib_concepts 201806L [C++2a] + __cpp_lib_concepts 202002L [C++2a] */ #include @@ -44,8 +44,8 @@ # ifndef __cpp_lib_concepts # error "__cpp_lib_concepts should be defined in c++2a" # endif -# if __cpp_lib_concepts != 201806L -# error "__cpp_lib_concepts should have the value 201806L in c++2a" +# if __cpp_lib_concepts != 202002L +# error "__cpp_lib_concepts should have the value 202002L in c++2a" # endif # else // _LIBCPP_VERSION # ifdef __cpp_lib_concepts diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/execution.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/execution.version.pass.cpp --- a/libcxx/test/std/language.support/support.limits/support.limits.general/execution.version.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/execution.version.pass.cpp @@ -15,6 +15,7 @@ /* Constant Value __cpp_lib_execution 201603L [C++17] + 201902L [C++2a] */ #include @@ -53,8 +54,8 @@ # ifndef __cpp_lib_execution # error "__cpp_lib_execution should be defined in c++2a" # endif -# if __cpp_lib_execution != 201603L -# error "__cpp_lib_execution should have the value 201603L in c++2a" +# if __cpp_lib_execution != 201902L +# error "__cpp_lib_execution should have the value 201902L in c++2a" # endif # else // _LIBCPP_VERSION # ifdef __cpp_lib_execution diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/functional.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/functional.version.pass.cpp --- a/libcxx/test/std/language.support/support.limits/support.limits.general/functional.version.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/functional.version.pass.cpp @@ -14,15 +14,16 @@ // Test the feature test macros defined by /* Constant Value - __cpp_lib_bind_front 201811L [C++2a] + __cpp_lib_bind_front 201907L [C++2a] __cpp_lib_boyer_moore_searcher 201603L [C++17] - __cpp_lib_constexpr_misc 201811L [C++2a] + __cpp_lib_constexpr_functional 201907L [C++2a] __cpp_lib_invoke 201411L [C++17] __cpp_lib_not_fn 201603L [C++17] __cpp_lib_ranges 201811L [C++2a] __cpp_lib_result_of_sfinae 201210L [C++14] __cpp_lib_transparent_operators 201210L [C++14] 201510L [C++17] + __cpp_lib_unwrap_ref 201811L [C++2a] */ #include @@ -38,8 +39,8 @@ # error "__cpp_lib_boyer_moore_searcher should not be defined before c++17" # endif -# ifdef __cpp_lib_constexpr_misc -# error "__cpp_lib_constexpr_misc should not be defined before c++2a" +# ifdef __cpp_lib_constexpr_functional +# error "__cpp_lib_constexpr_functional should not be defined before c++2a" # endif # ifdef __cpp_lib_invoke @@ -62,6 +63,10 @@ # error "__cpp_lib_transparent_operators should not be defined before c++14" # endif +# ifdef __cpp_lib_unwrap_ref +# error "__cpp_lib_unwrap_ref should not be defined before c++2a" +# endif + #elif TEST_STD_VER == 14 # ifdef __cpp_lib_bind_front @@ -72,8 +77,8 @@ # error "__cpp_lib_boyer_moore_searcher should not be defined before c++17" # endif -# ifdef __cpp_lib_constexpr_misc -# error "__cpp_lib_constexpr_misc should not be defined before c++2a" +# ifdef __cpp_lib_constexpr_functional +# error "__cpp_lib_constexpr_functional should not be defined before c++2a" # endif # ifdef __cpp_lib_invoke @@ -102,6 +107,10 @@ # error "__cpp_lib_transparent_operators should have the value 201210L in c++14" # endif +# ifdef __cpp_lib_unwrap_ref +# error "__cpp_lib_unwrap_ref should not be defined before c++2a" +# endif + #elif TEST_STD_VER == 17 # ifdef __cpp_lib_bind_front @@ -121,8 +130,8 @@ # endif # endif -# ifdef __cpp_lib_constexpr_misc -# error "__cpp_lib_constexpr_misc should not be defined before c++2a" +# ifdef __cpp_lib_constexpr_functional +# error "__cpp_lib_constexpr_functional should not be defined before c++2a" # endif # ifndef __cpp_lib_invoke @@ -157,14 +166,18 @@ # error "__cpp_lib_transparent_operators should have the value 201510L in c++17" # endif +# ifdef __cpp_lib_unwrap_ref +# error "__cpp_lib_unwrap_ref should not be defined before c++2a" +# endif + #elif TEST_STD_VER > 17 # if !defined(_LIBCPP_VERSION) # ifndef __cpp_lib_bind_front # error "__cpp_lib_bind_front should be defined in c++2a" # endif -# if __cpp_lib_bind_front != 201811L -# error "__cpp_lib_bind_front should have the value 201811L in c++2a" +# if __cpp_lib_bind_front != 201907L +# error "__cpp_lib_bind_front should have the value 201907L in c++2a" # endif # else // _LIBCPP_VERSION # ifdef __cpp_lib_bind_front @@ -186,15 +199,15 @@ # endif # if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_constexpr_misc -# error "__cpp_lib_constexpr_misc should be defined in c++2a" +# ifndef __cpp_lib_constexpr_functional +# error "__cpp_lib_constexpr_functional should be defined in c++2a" # endif -# if __cpp_lib_constexpr_misc != 201811L -# error "__cpp_lib_constexpr_misc should have the value 201811L in c++2a" +# if __cpp_lib_constexpr_functional != 201907L +# error "__cpp_lib_constexpr_functional should have the value 201907L in c++2a" # endif # else // _LIBCPP_VERSION -# ifdef __cpp_lib_constexpr_misc -# error "__cpp_lib_constexpr_misc should not be defined because it is unimplemented in libc++!" +# ifdef __cpp_lib_constexpr_functional +# error "__cpp_lib_constexpr_functional should not be defined because it is unimplemented in libc++!" # endif # endif @@ -239,6 +252,13 @@ # error "__cpp_lib_transparent_operators should have the value 201510L in c++2a" # endif +# ifndef __cpp_lib_unwrap_ref +# error "__cpp_lib_unwrap_ref should be defined in c++2a" +# endif +# if __cpp_lib_unwrap_ref != 201811L +# error "__cpp_lib_unwrap_ref should have the value 201811L in c++2a" +# endif + #endif // TEST_STD_VER > 17 int main(int, char**) { return 0; } diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/iterator.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/iterator.version.pass.cpp --- a/libcxx/test/std/language.support/support.limits/support.limits.general/iterator.version.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/iterator.version.pass.cpp @@ -16,11 +16,12 @@ /* Constant Value __cpp_lib_array_constexpr 201603L [C++17] 201811L [C++2a] - __cpp_lib_constexpr_misc 201811L [C++2a] + __cpp_lib_constexpr_iterator 201811L [C++2a] __cpp_lib_make_reverse_iterator 201402L [C++14] __cpp_lib_nonmember_container_access 201411L [C++17] __cpp_lib_null_iterators 201304L [C++14] __cpp_lib_ranges 201811L [C++2a] + __cpp_lib_ssize 201902L [C++2a] */ #include @@ -32,8 +33,8 @@ # error "__cpp_lib_array_constexpr should not be defined before c++17" # endif -# ifdef __cpp_lib_constexpr_misc -# error "__cpp_lib_constexpr_misc should not be defined before c++2a" +# ifdef __cpp_lib_constexpr_iterator +# error "__cpp_lib_constexpr_iterator should not be defined before c++2a" # endif # ifdef __cpp_lib_make_reverse_iterator @@ -52,14 +53,18 @@ # error "__cpp_lib_ranges should not be defined before c++2a" # endif +# ifdef __cpp_lib_ssize +# error "__cpp_lib_ssize should not be defined before c++2a" +# endif + #elif TEST_STD_VER == 14 # ifdef __cpp_lib_array_constexpr # error "__cpp_lib_array_constexpr should not be defined before c++17" # endif -# ifdef __cpp_lib_constexpr_misc -# error "__cpp_lib_constexpr_misc should not be defined before c++2a" +# ifdef __cpp_lib_constexpr_iterator +# error "__cpp_lib_constexpr_iterator should not be defined before c++2a" # endif # ifndef __cpp_lib_make_reverse_iterator @@ -84,6 +89,10 @@ # error "__cpp_lib_ranges should not be defined before c++2a" # endif +# ifdef __cpp_lib_ssize +# error "__cpp_lib_ssize should not be defined before c++2a" +# endif + #elif TEST_STD_VER == 17 # ifndef __cpp_lib_array_constexpr @@ -93,8 +102,8 @@ # error "__cpp_lib_array_constexpr should have the value 201603L in c++17" # endif -# ifdef __cpp_lib_constexpr_misc -# error "__cpp_lib_constexpr_misc should not be defined before c++2a" +# ifdef __cpp_lib_constexpr_iterator +# error "__cpp_lib_constexpr_iterator should not be defined before c++2a" # endif # ifndef __cpp_lib_make_reverse_iterator @@ -122,6 +131,10 @@ # error "__cpp_lib_ranges should not be defined before c++2a" # endif +# ifdef __cpp_lib_ssize +# error "__cpp_lib_ssize should not be defined before c++2a" +# endif + #elif TEST_STD_VER > 17 # ifndef __cpp_lib_array_constexpr @@ -132,15 +145,15 @@ # endif # if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_constexpr_misc -# error "__cpp_lib_constexpr_misc should be defined in c++2a" +# ifndef __cpp_lib_constexpr_iterator +# error "__cpp_lib_constexpr_iterator should be defined in c++2a" # endif -# if __cpp_lib_constexpr_misc != 201811L -# error "__cpp_lib_constexpr_misc should have the value 201811L in c++2a" +# if __cpp_lib_constexpr_iterator != 201811L +# error "__cpp_lib_constexpr_iterator should have the value 201811L in c++2a" # endif # else // _LIBCPP_VERSION -# ifdef __cpp_lib_constexpr_misc -# error "__cpp_lib_constexpr_misc should not be defined because it is unimplemented in libc++!" +# ifdef __cpp_lib_constexpr_iterator +# error "__cpp_lib_constexpr_iterator should not be defined because it is unimplemented in libc++!" # endif # endif @@ -178,6 +191,13 @@ # endif # endif +# ifndef __cpp_lib_ssize +# error "__cpp_lib_ssize should be defined in c++2a" +# endif +# if __cpp_lib_ssize != 201902L +# error "__cpp_lib_ssize should have the value 201902L in c++2a" +# endif + #endif // TEST_STD_VER > 17 int main(int, char**) { return 0; } diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/latch.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/latch.version.pass.cpp new file mode 100644 --- /dev/null +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/latch.version.pass.cpp @@ -0,0 +1,58 @@ +//===----------------------------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// WARNING: This test was generated by generate_feature_test_macro_components.py +// and should not be edited manually. + +// + +// Test the feature test macros defined by + +/* Constant Value + __cpp_lib_latch 201907L [C++2a] +*/ + +#include +#include "test_macros.h" + +#if TEST_STD_VER < 14 + +# ifdef __cpp_lib_latch +# error "__cpp_lib_latch should not be defined before c++2a" +# endif + +#elif TEST_STD_VER == 14 + +# ifdef __cpp_lib_latch +# error "__cpp_lib_latch should not be defined before c++2a" +# endif + +#elif TEST_STD_VER == 17 + +# ifdef __cpp_lib_latch +# error "__cpp_lib_latch should not be defined before c++2a" +# endif + +#elif TEST_STD_VER > 17 + +# if !defined(_LIBCPP_HAS_NO_THREADS) +# ifndef __cpp_lib_latch +# error "__cpp_lib_latch should be defined in c++2a" +# endif +# if __cpp_lib_latch != 201907L +# error "__cpp_lib_latch should have the value 201907L in c++2a" +# endif +# else +# ifdef __cpp_lib_latch +# error "__cpp_lib_latch should not be defined when !defined(_LIBCPP_HAS_NO_THREADS) is not defined!" +# endif +# endif + +#endif // TEST_STD_VER > 17 + +int main(int, char**) { return 0; } diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/memory.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/memory.version.pass.cpp --- a/libcxx/test/std/language.support/support.limits/support.limits.general/memory.version.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/memory.version.pass.cpp @@ -16,14 +16,21 @@ /* Constant Value __cpp_lib_addressof_constexpr 201603L [C++17] __cpp_lib_allocator_traits_is_always_equal 201411L [C++17] + __cpp_lib_assume_aligned 201811L [C++2a] __cpp_lib_atomic_value_initialization 201911L [C++2a] __cpp_lib_constexpr_dynamic_alloc 201907L [C++2a] + __cpp_lib_constexpr_memory 201811L [C++2a] __cpp_lib_enable_shared_from_this 201603L [C++17] __cpp_lib_make_unique 201304L [C++14] + __cpp_lib_polymorphic_allocator 201902L [C++2a] __cpp_lib_ranges 201811L [C++2a] __cpp_lib_raw_memory_algorithms 201606L [C++17] __cpp_lib_shared_ptr_arrays 201611L [C++17] __cpp_lib_shared_ptr_weak_type 201606L [C++17] + __cpp_lib_smart_ptr_for_overwrite 202002L [C++2a] + __cpp_lib_to_address 201711L [C++2a] + __cpp_lib_transparent_operators 201210L [C++14] + 201510L [C++17] */ #include @@ -39,6 +46,10 @@ # error "__cpp_lib_allocator_traits_is_always_equal should not be defined before c++17" # endif +# ifdef __cpp_lib_assume_aligned +# error "__cpp_lib_assume_aligned should not be defined before c++2a" +# endif + # ifdef __cpp_lib_atomic_value_initialization # error "__cpp_lib_atomic_value_initialization should not be defined before c++2a" # endif @@ -47,6 +58,10 @@ # error "__cpp_lib_constexpr_dynamic_alloc should not be defined before c++2a" # endif +# ifdef __cpp_lib_constexpr_memory +# error "__cpp_lib_constexpr_memory should not be defined before c++2a" +# endif + # ifdef __cpp_lib_enable_shared_from_this # error "__cpp_lib_enable_shared_from_this should not be defined before c++17" # endif @@ -55,6 +70,10 @@ # error "__cpp_lib_make_unique should not be defined before c++14" # endif +# ifdef __cpp_lib_polymorphic_allocator +# error "__cpp_lib_polymorphic_allocator should not be defined before c++2a" +# endif + # ifdef __cpp_lib_ranges # error "__cpp_lib_ranges should not be defined before c++2a" # endif @@ -71,6 +90,18 @@ # error "__cpp_lib_shared_ptr_weak_type should not be defined before c++17" # endif +# ifdef __cpp_lib_smart_ptr_for_overwrite +# error "__cpp_lib_smart_ptr_for_overwrite should not be defined before c++2a" +# endif + +# ifdef __cpp_lib_to_address +# error "__cpp_lib_to_address should not be defined before c++2a" +# endif + +# ifdef __cpp_lib_transparent_operators +# error "__cpp_lib_transparent_operators should not be defined before c++14" +# endif + #elif TEST_STD_VER == 14 # ifdef __cpp_lib_addressof_constexpr @@ -81,6 +112,10 @@ # error "__cpp_lib_allocator_traits_is_always_equal should not be defined before c++17" # endif +# ifdef __cpp_lib_assume_aligned +# error "__cpp_lib_assume_aligned should not be defined before c++2a" +# endif + # ifdef __cpp_lib_atomic_value_initialization # error "__cpp_lib_atomic_value_initialization should not be defined before c++2a" # endif @@ -89,6 +124,10 @@ # error "__cpp_lib_constexpr_dynamic_alloc should not be defined before c++2a" # endif +# ifdef __cpp_lib_constexpr_memory +# error "__cpp_lib_constexpr_memory should not be defined before c++2a" +# endif + # ifdef __cpp_lib_enable_shared_from_this # error "__cpp_lib_enable_shared_from_this should not be defined before c++17" # endif @@ -100,6 +139,10 @@ # error "__cpp_lib_make_unique should have the value 201304L in c++14" # endif +# ifdef __cpp_lib_polymorphic_allocator +# error "__cpp_lib_polymorphic_allocator should not be defined before c++2a" +# endif + # ifdef __cpp_lib_ranges # error "__cpp_lib_ranges should not be defined before c++2a" # endif @@ -116,6 +159,21 @@ # error "__cpp_lib_shared_ptr_weak_type should not be defined before c++17" # endif +# ifdef __cpp_lib_smart_ptr_for_overwrite +# error "__cpp_lib_smart_ptr_for_overwrite should not be defined before c++2a" +# endif + +# ifdef __cpp_lib_to_address +# error "__cpp_lib_to_address should not be defined before c++2a" +# endif + +# ifndef __cpp_lib_transparent_operators +# error "__cpp_lib_transparent_operators should be defined in c++14" +# endif +# if __cpp_lib_transparent_operators != 201210L +# error "__cpp_lib_transparent_operators should have the value 201210L in c++14" +# endif + #elif TEST_STD_VER == 17 # if TEST_HAS_BUILTIN(__builtin_addressof) || TEST_GCC_VER >= 700 @@ -138,6 +196,10 @@ # error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++17" # endif +# ifdef __cpp_lib_assume_aligned +# error "__cpp_lib_assume_aligned should not be defined before c++2a" +# endif + # ifdef __cpp_lib_atomic_value_initialization # error "__cpp_lib_atomic_value_initialization should not be defined before c++2a" # endif @@ -146,6 +208,10 @@ # error "__cpp_lib_constexpr_dynamic_alloc should not be defined before c++2a" # endif +# ifdef __cpp_lib_constexpr_memory +# error "__cpp_lib_constexpr_memory should not be defined before c++2a" +# endif + # ifndef __cpp_lib_enable_shared_from_this # error "__cpp_lib_enable_shared_from_this should be defined in c++17" # endif @@ -160,6 +226,10 @@ # error "__cpp_lib_make_unique should have the value 201304L in c++17" # endif +# ifdef __cpp_lib_polymorphic_allocator +# error "__cpp_lib_polymorphic_allocator should not be defined before c++2a" +# endif + # ifdef __cpp_lib_ranges # error "__cpp_lib_ranges should not be defined before c++2a" # endif @@ -185,6 +255,21 @@ # error "__cpp_lib_shared_ptr_weak_type should have the value 201606L in c++17" # endif +# ifdef __cpp_lib_smart_ptr_for_overwrite +# error "__cpp_lib_smart_ptr_for_overwrite should not be defined before c++2a" +# endif + +# ifdef __cpp_lib_to_address +# error "__cpp_lib_to_address should not be defined before c++2a" +# endif + +# ifndef __cpp_lib_transparent_operators +# error "__cpp_lib_transparent_operators should be defined in c++17" +# endif +# if __cpp_lib_transparent_operators != 201510L +# error "__cpp_lib_transparent_operators should have the value 201510L in c++17" +# endif + #elif TEST_STD_VER > 17 # if TEST_HAS_BUILTIN(__builtin_addressof) || TEST_GCC_VER >= 700 @@ -207,6 +292,19 @@ # error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++2a" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_assume_aligned +# error "__cpp_lib_assume_aligned should be defined in c++2a" +# endif +# if __cpp_lib_assume_aligned != 201811L +# error "__cpp_lib_assume_aligned should have the value 201811L in c++2a" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_assume_aligned +# error "__cpp_lib_assume_aligned should not be defined because it is unimplemented in libc++!" +# endif +# endif + # if !defined(_LIBCPP_VERSION) # ifndef __cpp_lib_atomic_value_initialization # error "__cpp_lib_atomic_value_initialization should be defined in c++2a" @@ -227,6 +325,19 @@ # error "__cpp_lib_constexpr_dynamic_alloc should have the value 201907L in c++2a" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_constexpr_memory +# error "__cpp_lib_constexpr_memory should be defined in c++2a" +# endif +# if __cpp_lib_constexpr_memory != 201811L +# error "__cpp_lib_constexpr_memory should have the value 201811L in c++2a" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_constexpr_memory +# error "__cpp_lib_constexpr_memory should not be defined because it is unimplemented in libc++!" +# endif +# endif + # ifndef __cpp_lib_enable_shared_from_this # error "__cpp_lib_enable_shared_from_this should be defined in c++2a" # endif @@ -241,6 +352,19 @@ # error "__cpp_lib_make_unique should have the value 201304L in c++2a" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_polymorphic_allocator +# error "__cpp_lib_polymorphic_allocator should be defined in c++2a" +# endif +# if __cpp_lib_polymorphic_allocator != 201902L +# error "__cpp_lib_polymorphic_allocator should have the value 201902L in c++2a" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_polymorphic_allocator +# error "__cpp_lib_polymorphic_allocator should not be defined because it is unimplemented in libc++!" +# endif +# endif + # if !defined(_LIBCPP_VERSION) # ifndef __cpp_lib_ranges # error "__cpp_lib_ranges should be defined in c++2a" @@ -275,6 +399,33 @@ # error "__cpp_lib_shared_ptr_weak_type should have the value 201606L in c++2a" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_smart_ptr_for_overwrite +# error "__cpp_lib_smart_ptr_for_overwrite should be defined in c++2a" +# endif +# if __cpp_lib_smart_ptr_for_overwrite != 202002L +# error "__cpp_lib_smart_ptr_for_overwrite should have the value 202002L in c++2a" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_smart_ptr_for_overwrite +# error "__cpp_lib_smart_ptr_for_overwrite should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifndef __cpp_lib_to_address +# error "__cpp_lib_to_address should be defined in c++2a" +# endif +# if __cpp_lib_to_address != 201711L +# error "__cpp_lib_to_address should have the value 201711L in c++2a" +# endif + +# ifndef __cpp_lib_transparent_operators +# error "__cpp_lib_transparent_operators should be defined in c++2a" +# endif +# if __cpp_lib_transparent_operators != 201510L +# error "__cpp_lib_transparent_operators should have the value 201510L in c++2a" +# endif + #endif // TEST_STD_VER > 17 int main(int, char**) { return 0; } diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/semaphore.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/semaphore.version.pass.cpp new file mode 100644 --- /dev/null +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/semaphore.version.pass.cpp @@ -0,0 +1,58 @@ +//===----------------------------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// WARNING: This test was generated by generate_feature_test_macro_components.py +// and should not be edited manually. + +// + +// Test the feature test macros defined by + +/* Constant Value + __cpp_lib_semaphore 201907L [C++2a] +*/ + +#include +#include "test_macros.h" + +#if TEST_STD_VER < 14 + +# ifdef __cpp_lib_semaphore +# error "__cpp_lib_semaphore should not be defined before c++2a" +# endif + +#elif TEST_STD_VER == 14 + +# ifdef __cpp_lib_semaphore +# error "__cpp_lib_semaphore should not be defined before c++2a" +# endif + +#elif TEST_STD_VER == 17 + +# ifdef __cpp_lib_semaphore +# error "__cpp_lib_semaphore should not be defined before c++2a" +# endif + +#elif TEST_STD_VER > 17 + +# if !defined(_LIBCPP_HAS_NO_THREADS) +# ifndef __cpp_lib_semaphore +# error "__cpp_lib_semaphore should be defined in c++2a" +# endif +# if __cpp_lib_semaphore != 201907L +# error "__cpp_lib_semaphore should have the value 201907L in c++2a" +# endif +# else +# ifdef __cpp_lib_semaphore +# error "__cpp_lib_semaphore should not be defined when !defined(_LIBCPP_HAS_NO_THREADS) is not defined!" +# endif +# endif + +#endif // TEST_STD_VER > 17 + +int main(int, char**) { return 0; } diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/string.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/string.version.pass.cpp --- a/libcxx/test/std/language.support/support.limits/support.limits.general/string.version.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/string.version.pass.cpp @@ -16,10 +16,13 @@ /* Constant Value __cpp_lib_allocator_traits_is_always_equal 201411L [C++17] __cpp_lib_char8_t 201811L [C++2a] + __cpp_lib_constexpr_string 201907L [C++2a] __cpp_lib_erase_if 202002L [C++2a] __cpp_lib_nonmember_container_access 201411L [C++17] + __cpp_lib_starts_ends_with 201711L [C++2a] __cpp_lib_string_udls 201304L [C++14] __cpp_lib_string_view 201606L [C++17] + 201803L [C++2a] */ #include @@ -35,6 +38,10 @@ # error "__cpp_lib_char8_t should not be defined before c++2a" # endif +# ifdef __cpp_lib_constexpr_string +# error "__cpp_lib_constexpr_string should not be defined before c++2a" +# endif + # ifdef __cpp_lib_erase_if # error "__cpp_lib_erase_if should not be defined before c++2a" # endif @@ -43,6 +50,10 @@ # error "__cpp_lib_nonmember_container_access should not be defined before c++17" # endif +# ifdef __cpp_lib_starts_ends_with +# error "__cpp_lib_starts_ends_with should not be defined before c++2a" +# endif + # ifdef __cpp_lib_string_udls # error "__cpp_lib_string_udls should not be defined before c++14" # endif @@ -61,6 +72,10 @@ # error "__cpp_lib_char8_t should not be defined before c++2a" # endif +# ifdef __cpp_lib_constexpr_string +# error "__cpp_lib_constexpr_string should not be defined before c++2a" +# endif + # ifdef __cpp_lib_erase_if # error "__cpp_lib_erase_if should not be defined before c++2a" # endif @@ -69,6 +84,10 @@ # error "__cpp_lib_nonmember_container_access should not be defined before c++17" # endif +# ifdef __cpp_lib_starts_ends_with +# error "__cpp_lib_starts_ends_with should not be defined before c++2a" +# endif + # ifndef __cpp_lib_string_udls # error "__cpp_lib_string_udls should be defined in c++14" # endif @@ -93,6 +112,10 @@ # error "__cpp_lib_char8_t should not be defined before c++2a" # endif +# ifdef __cpp_lib_constexpr_string +# error "__cpp_lib_constexpr_string should not be defined before c++2a" +# endif + # ifdef __cpp_lib_erase_if # error "__cpp_lib_erase_if should not be defined before c++2a" # endif @@ -104,6 +127,10 @@ # error "__cpp_lib_nonmember_container_access should have the value 201411L in c++17" # endif +# ifdef __cpp_lib_starts_ends_with +# error "__cpp_lib_starts_ends_with should not be defined before c++2a" +# endif + # ifndef __cpp_lib_string_udls # error "__cpp_lib_string_udls should be defined in c++17" # endif @@ -140,6 +167,19 @@ # endif # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_constexpr_string +# error "__cpp_lib_constexpr_string should be defined in c++2a" +# endif +# if __cpp_lib_constexpr_string != 201907L +# error "__cpp_lib_constexpr_string should have the value 201907L in c++2a" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_constexpr_string +# error "__cpp_lib_constexpr_string should not be defined because it is unimplemented in libc++!" +# endif +# endif + # ifndef __cpp_lib_erase_if # error "__cpp_lib_erase_if should be defined in c++2a" # endif @@ -154,6 +194,13 @@ # error "__cpp_lib_nonmember_container_access should have the value 201411L in c++2a" # endif +# ifndef __cpp_lib_starts_ends_with +# error "__cpp_lib_starts_ends_with should be defined in c++2a" +# endif +# if __cpp_lib_starts_ends_with != 201711L +# error "__cpp_lib_starts_ends_with should have the value 201711L in c++2a" +# endif + # ifndef __cpp_lib_string_udls # error "__cpp_lib_string_udls should be defined in c++2a" # endif @@ -164,8 +211,8 @@ # ifndef __cpp_lib_string_view # error "__cpp_lib_string_view should be defined in c++2a" # endif -# if __cpp_lib_string_view != 201606L -# error "__cpp_lib_string_view should have the value 201606L in c++2a" +# if __cpp_lib_string_view != 201803L +# error "__cpp_lib_string_view should have the value 201803L in c++2a" # endif #endif // TEST_STD_VER > 17 diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/string_view.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/string_view.version.pass.cpp --- a/libcxx/test/std/language.support/support.limits/support.limits.general/string_view.version.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/string_view.version.pass.cpp @@ -13,10 +13,12 @@ // Test the feature test macros defined by -/* Constant Value - __cpp_lib_char8_t 201811L [C++2a] - __cpp_lib_constexpr_misc 201811L [C++2a] - __cpp_lib_string_view 201606L [C++17] +/* Constant Value + __cpp_lib_char8_t 201811L [C++2a] + __cpp_lib_constexpr_string_view 201811L [C++2a] + __cpp_lib_starts_ends_with 201711L [C++2a] + __cpp_lib_string_view 201606L [C++17] + 201803L [C++2a] */ #include @@ -28,8 +30,12 @@ # error "__cpp_lib_char8_t should not be defined before c++2a" # endif -# ifdef __cpp_lib_constexpr_misc -# error "__cpp_lib_constexpr_misc should not be defined before c++2a" +# ifdef __cpp_lib_constexpr_string_view +# error "__cpp_lib_constexpr_string_view should not be defined before c++2a" +# endif + +# ifdef __cpp_lib_starts_ends_with +# error "__cpp_lib_starts_ends_with should not be defined before c++2a" # endif # ifdef __cpp_lib_string_view @@ -42,8 +48,12 @@ # error "__cpp_lib_char8_t should not be defined before c++2a" # endif -# ifdef __cpp_lib_constexpr_misc -# error "__cpp_lib_constexpr_misc should not be defined before c++2a" +# ifdef __cpp_lib_constexpr_string_view +# error "__cpp_lib_constexpr_string_view should not be defined before c++2a" +# endif + +# ifdef __cpp_lib_starts_ends_with +# error "__cpp_lib_starts_ends_with should not be defined before c++2a" # endif # ifdef __cpp_lib_string_view @@ -56,8 +66,12 @@ # error "__cpp_lib_char8_t should not be defined before c++2a" # endif -# ifdef __cpp_lib_constexpr_misc -# error "__cpp_lib_constexpr_misc should not be defined before c++2a" +# ifdef __cpp_lib_constexpr_string_view +# error "__cpp_lib_constexpr_string_view should not be defined before c++2a" +# endif + +# ifdef __cpp_lib_starts_ends_with +# error "__cpp_lib_starts_ends_with should not be defined before c++2a" # endif # ifndef __cpp_lib_string_view @@ -83,23 +97,30 @@ # endif # if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_constexpr_misc -# error "__cpp_lib_constexpr_misc should be defined in c++2a" +# ifndef __cpp_lib_constexpr_string_view +# error "__cpp_lib_constexpr_string_view should be defined in c++2a" # endif -# if __cpp_lib_constexpr_misc != 201811L -# error "__cpp_lib_constexpr_misc should have the value 201811L in c++2a" +# if __cpp_lib_constexpr_string_view != 201811L +# error "__cpp_lib_constexpr_string_view should have the value 201811L in c++2a" # endif # else // _LIBCPP_VERSION -# ifdef __cpp_lib_constexpr_misc -# error "__cpp_lib_constexpr_misc should not be defined because it is unimplemented in libc++!" +# ifdef __cpp_lib_constexpr_string_view +# error "__cpp_lib_constexpr_string_view should not be defined because it is unimplemented in libc++!" # endif # endif +# ifndef __cpp_lib_starts_ends_with +# error "__cpp_lib_starts_ends_with should be defined in c++2a" +# endif +# if __cpp_lib_starts_ends_with != 201711L +# error "__cpp_lib_starts_ends_with should have the value 201711L in c++2a" +# endif + # ifndef __cpp_lib_string_view # error "__cpp_lib_string_view should be defined in c++2a" # endif -# if __cpp_lib_string_view != 201606L -# error "__cpp_lib_string_view should have the value 201606L in c++2a" +# if __cpp_lib_string_view != 201803L +# error "__cpp_lib_string_view should have the value 201803L in c++2a" # endif #endif // TEST_STD_VER > 17 diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/thread.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/thread.version.pass.cpp new file mode 100644 --- /dev/null +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/thread.version.pass.cpp @@ -0,0 +1,60 @@ +//===----------------------------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// WARNING: This test was generated by generate_feature_test_macro_components.py +// and should not be edited manually. + +// UNSUPPORTED: libcpp-has-no-threads + +// + +// Test the feature test macros defined by + +/* Constant Value + __cpp_lib_jthread 201911L [C++2a] +*/ + +#include +#include "test_macros.h" + +#if TEST_STD_VER < 14 + +# ifdef __cpp_lib_jthread +# error "__cpp_lib_jthread should not be defined before c++2a" +# endif + +#elif TEST_STD_VER == 14 + +# ifdef __cpp_lib_jthread +# error "__cpp_lib_jthread should not be defined before c++2a" +# endif + +#elif TEST_STD_VER == 17 + +# ifdef __cpp_lib_jthread +# error "__cpp_lib_jthread should not be defined before c++2a" +# endif + +#elif TEST_STD_VER > 17 + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_jthread +# error "__cpp_lib_jthread should be defined in c++2a" +# endif +# if __cpp_lib_jthread != 201911L +# error "__cpp_lib_jthread should have the value 201911L in c++2a" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_jthread +# error "__cpp_lib_jthread should not be defined because it is unimplemented in libc++!" +# endif +# endif + +#endif // TEST_STD_VER > 17 + +int main(int, char**) { return 0; } diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/tuple.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/tuple.version.pass.cpp --- a/libcxx/test/std/language.support/support.limits/support.limits.general/tuple.version.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/tuple.version.pass.cpp @@ -15,7 +15,7 @@ /* Constant Value __cpp_lib_apply 201603L [C++17] - __cpp_lib_constexpr_misc 201811L [C++2a] + __cpp_lib_constexpr_tuple 201811L [C++2a] __cpp_lib_make_from_tuple 201606L [C++17] __cpp_lib_tuple_element_t 201402L [C++14] __cpp_lib_tuples_by_type 201304L [C++14] @@ -30,8 +30,8 @@ # error "__cpp_lib_apply should not be defined before c++17" # endif -# ifdef __cpp_lib_constexpr_misc -# error "__cpp_lib_constexpr_misc should not be defined before c++2a" +# ifdef __cpp_lib_constexpr_tuple +# error "__cpp_lib_constexpr_tuple should not be defined before c++2a" # endif # ifdef __cpp_lib_make_from_tuple @@ -52,8 +52,8 @@ # error "__cpp_lib_apply should not be defined before c++17" # endif -# ifdef __cpp_lib_constexpr_misc -# error "__cpp_lib_constexpr_misc should not be defined before c++2a" +# ifdef __cpp_lib_constexpr_tuple +# error "__cpp_lib_constexpr_tuple should not be defined before c++2a" # endif # ifdef __cpp_lib_make_from_tuple @@ -83,8 +83,8 @@ # error "__cpp_lib_apply should have the value 201603L in c++17" # endif -# ifdef __cpp_lib_constexpr_misc -# error "__cpp_lib_constexpr_misc should not be defined before c++2a" +# ifdef __cpp_lib_constexpr_tuple +# error "__cpp_lib_constexpr_tuple should not be defined before c++2a" # endif # ifndef __cpp_lib_make_from_tuple @@ -118,15 +118,15 @@ # endif # if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_constexpr_misc -# error "__cpp_lib_constexpr_misc should be defined in c++2a" +# ifndef __cpp_lib_constexpr_tuple +# error "__cpp_lib_constexpr_tuple should be defined in c++2a" # endif -# if __cpp_lib_constexpr_misc != 201811L -# error "__cpp_lib_constexpr_misc should have the value 201811L in c++2a" +# if __cpp_lib_constexpr_tuple != 201811L +# error "__cpp_lib_constexpr_tuple should have the value 201811L in c++2a" # endif # else // _LIBCPP_VERSION -# ifdef __cpp_lib_constexpr_misc -# error "__cpp_lib_constexpr_misc should not be defined because it is unimplemented in libc++!" +# ifdef __cpp_lib_constexpr_tuple +# error "__cpp_lib_constexpr_tuple should not be defined because it is unimplemented in libc++!" # endif # endif diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/type_traits.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/type_traits.version.pass.cpp --- a/libcxx/test/std/language.support/support.limits/support.limits.general/type_traits.version.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/type_traits.version.pass.cpp @@ -15,15 +15,20 @@ /* Constant Value __cpp_lib_bool_constant 201505L [C++17] + __cpp_lib_bounded_array_traits 201902L [C++2a] __cpp_lib_has_unique_object_representations 201606L [C++17] __cpp_lib_integral_constant_callable 201304L [C++14] __cpp_lib_is_aggregate 201703L [C++17] __cpp_lib_is_constant_evaluated 201811L [C++2a] __cpp_lib_is_final 201402L [C++14] __cpp_lib_is_invocable 201703L [C++17] + __cpp_lib_is_layout_compatible 201907L [C++2a] + __cpp_lib_is_nothrow_convertible 201806L [C++2a] __cpp_lib_is_null_pointer 201309L [C++14] + __cpp_lib_is_pointer_interconvertible 201907L [C++2a] __cpp_lib_is_swappable 201603L [C++17] __cpp_lib_logical_traits 201510L [C++17] + __cpp_lib_remove_cvref 201711L [C++2a] __cpp_lib_result_of_sfinae 201210L [C++14] __cpp_lib_transformation_trait_aliases 201304L [C++14] __cpp_lib_type_trait_variable_templates 201510L [C++17] @@ -39,6 +44,10 @@ # error "__cpp_lib_bool_constant should not be defined before c++17" # endif +# ifdef __cpp_lib_bounded_array_traits +# error "__cpp_lib_bounded_array_traits should not be defined before c++2a" +# endif + # ifdef __cpp_lib_has_unique_object_representations # error "__cpp_lib_has_unique_object_representations should not be defined before c++17" # endif @@ -63,10 +72,22 @@ # error "__cpp_lib_is_invocable should not be defined before c++17" # endif +# ifdef __cpp_lib_is_layout_compatible +# error "__cpp_lib_is_layout_compatible should not be defined before c++2a" +# endif + +# ifdef __cpp_lib_is_nothrow_convertible +# error "__cpp_lib_is_nothrow_convertible should not be defined before c++2a" +# endif + # ifdef __cpp_lib_is_null_pointer # error "__cpp_lib_is_null_pointer should not be defined before c++14" # endif +# ifdef __cpp_lib_is_pointer_interconvertible +# error "__cpp_lib_is_pointer_interconvertible should not be defined before c++2a" +# endif + # ifdef __cpp_lib_is_swappable # error "__cpp_lib_is_swappable should not be defined before c++17" # endif @@ -75,6 +96,10 @@ # error "__cpp_lib_logical_traits should not be defined before c++17" # endif +# ifdef __cpp_lib_remove_cvref +# error "__cpp_lib_remove_cvref should not be defined before c++2a" +# endif + # ifdef __cpp_lib_result_of_sfinae # error "__cpp_lib_result_of_sfinae should not be defined before c++14" # endif @@ -97,6 +122,10 @@ # error "__cpp_lib_bool_constant should not be defined before c++17" # endif +# ifdef __cpp_lib_bounded_array_traits +# error "__cpp_lib_bounded_array_traits should not be defined before c++2a" +# endif + # ifdef __cpp_lib_has_unique_object_representations # error "__cpp_lib_has_unique_object_representations should not be defined before c++17" # endif @@ -127,6 +156,14 @@ # error "__cpp_lib_is_invocable should not be defined before c++17" # endif +# ifdef __cpp_lib_is_layout_compatible +# error "__cpp_lib_is_layout_compatible should not be defined before c++2a" +# endif + +# ifdef __cpp_lib_is_nothrow_convertible +# error "__cpp_lib_is_nothrow_convertible should not be defined before c++2a" +# endif + # ifndef __cpp_lib_is_null_pointer # error "__cpp_lib_is_null_pointer should be defined in c++14" # endif @@ -134,6 +171,10 @@ # error "__cpp_lib_is_null_pointer should have the value 201309L in c++14" # endif +# ifdef __cpp_lib_is_pointer_interconvertible +# error "__cpp_lib_is_pointer_interconvertible should not be defined before c++2a" +# endif + # ifdef __cpp_lib_is_swappable # error "__cpp_lib_is_swappable should not be defined before c++17" # endif @@ -142,6 +183,10 @@ # error "__cpp_lib_logical_traits should not be defined before c++17" # endif +# ifdef __cpp_lib_remove_cvref +# error "__cpp_lib_remove_cvref should not be defined before c++2a" +# endif + # ifndef __cpp_lib_result_of_sfinae # error "__cpp_lib_result_of_sfinae should be defined in c++14" # endif @@ -173,6 +218,10 @@ # error "__cpp_lib_bool_constant should have the value 201505L in c++17" # endif +# ifdef __cpp_lib_bounded_array_traits +# error "__cpp_lib_bounded_array_traits should not be defined before c++2a" +# endif + # if TEST_HAS_BUILTIN_IDENTIFIER(__has_unique_object_representations) || TEST_GCC_VER >= 700 # ifndef __cpp_lib_has_unique_object_representations # error "__cpp_lib_has_unique_object_representations should be defined in c++17" @@ -224,6 +273,14 @@ # error "__cpp_lib_is_invocable should have the value 201703L in c++17" # endif +# ifdef __cpp_lib_is_layout_compatible +# error "__cpp_lib_is_layout_compatible should not be defined before c++2a" +# endif + +# ifdef __cpp_lib_is_nothrow_convertible +# error "__cpp_lib_is_nothrow_convertible should not be defined before c++2a" +# endif + # ifndef __cpp_lib_is_null_pointer # error "__cpp_lib_is_null_pointer should be defined in c++17" # endif @@ -231,6 +288,10 @@ # error "__cpp_lib_is_null_pointer should have the value 201309L in c++17" # endif +# ifdef __cpp_lib_is_pointer_interconvertible +# error "__cpp_lib_is_pointer_interconvertible should not be defined before c++2a" +# endif + # ifndef __cpp_lib_is_swappable # error "__cpp_lib_is_swappable should be defined in c++17" # endif @@ -245,6 +306,10 @@ # error "__cpp_lib_logical_traits should have the value 201510L in c++17" # endif +# ifdef __cpp_lib_remove_cvref +# error "__cpp_lib_remove_cvref should not be defined before c++2a" +# endif + # ifndef __cpp_lib_result_of_sfinae # error "__cpp_lib_result_of_sfinae should be defined in c++17" # endif @@ -282,6 +347,13 @@ # error "__cpp_lib_bool_constant should have the value 201505L in c++2a" # endif +# ifndef __cpp_lib_bounded_array_traits +# error "__cpp_lib_bounded_array_traits should be defined in c++2a" +# endif +# if __cpp_lib_bounded_array_traits != 201902L +# error "__cpp_lib_bounded_array_traits should have the value 201902L in c++2a" +# endif + # if TEST_HAS_BUILTIN_IDENTIFIER(__has_unique_object_representations) || TEST_GCC_VER >= 700 # ifndef __cpp_lib_has_unique_object_representations # error "__cpp_lib_has_unique_object_representations should be defined in c++2a" @@ -342,6 +414,32 @@ # error "__cpp_lib_is_invocable should have the value 201703L in c++2a" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_is_layout_compatible +# error "__cpp_lib_is_layout_compatible should be defined in c++2a" +# endif +# if __cpp_lib_is_layout_compatible != 201907L +# error "__cpp_lib_is_layout_compatible should have the value 201907L in c++2a" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_is_layout_compatible +# error "__cpp_lib_is_layout_compatible should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_is_nothrow_convertible +# error "__cpp_lib_is_nothrow_convertible should be defined in c++2a" +# endif +# if __cpp_lib_is_nothrow_convertible != 201806L +# error "__cpp_lib_is_nothrow_convertible should have the value 201806L in c++2a" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_is_nothrow_convertible +# error "__cpp_lib_is_nothrow_convertible should not be defined because it is unimplemented in libc++!" +# endif +# endif + # ifndef __cpp_lib_is_null_pointer # error "__cpp_lib_is_null_pointer should be defined in c++2a" # endif @@ -349,6 +447,19 @@ # error "__cpp_lib_is_null_pointer should have the value 201309L in c++2a" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_is_pointer_interconvertible +# error "__cpp_lib_is_pointer_interconvertible should be defined in c++2a" +# endif +# if __cpp_lib_is_pointer_interconvertible != 201907L +# error "__cpp_lib_is_pointer_interconvertible should have the value 201907L in c++2a" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_is_pointer_interconvertible +# error "__cpp_lib_is_pointer_interconvertible should not be defined because it is unimplemented in libc++!" +# endif +# endif + # ifndef __cpp_lib_is_swappable # error "__cpp_lib_is_swappable should be defined in c++2a" # endif @@ -363,6 +474,13 @@ # error "__cpp_lib_logical_traits should have the value 201510L in c++2a" # endif +# ifndef __cpp_lib_remove_cvref +# error "__cpp_lib_remove_cvref should be defined in c++2a" +# endif +# if __cpp_lib_remove_cvref != 201711L +# error "__cpp_lib_remove_cvref should have the value 201711L in c++2a" +# endif + # ifndef __cpp_lib_result_of_sfinae # error "__cpp_lib_result_of_sfinae should be defined in c++2a" # endif diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/utility.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/utility.version.pass.cpp --- a/libcxx/test/std/language.support/support.limits/support.limits.general/utility.version.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/utility.version.pass.cpp @@ -13,14 +13,14 @@ // Test the feature test macros defined by -/* Constant Value - __cpp_lib_as_const 201510L [C++17] - __cpp_lib_constexpr_misc 201811L [C++2a] - __cpp_lib_constexpr_utility 201811L [C++2a] - __cpp_lib_exchange_function 201304L [C++14] - __cpp_lib_integer_sequence 201304L [C++14] - __cpp_lib_to_chars 201611L [C++17] - __cpp_lib_tuples_by_type 201304L [C++14] +/* Constant Value + __cpp_lib_as_const 201510L [C++17] + __cpp_lib_constexpr_utility 201811L [C++2a] + __cpp_lib_exchange_function 201304L [C++14] + __cpp_lib_integer_comparison_functions 202002L [C++2a] + __cpp_lib_integer_sequence 201304L [C++14] + __cpp_lib_to_chars 201611L [C++17] + __cpp_lib_tuples_by_type 201304L [C++14] */ #include @@ -32,10 +32,6 @@ # error "__cpp_lib_as_const should not be defined before c++17" # endif -# ifdef __cpp_lib_constexpr_misc -# error "__cpp_lib_constexpr_misc should not be defined before c++2a" -# endif - # ifdef __cpp_lib_constexpr_utility # error "__cpp_lib_constexpr_utility should not be defined before c++2a" # endif @@ -44,6 +40,10 @@ # error "__cpp_lib_exchange_function should not be defined before c++14" # endif +# ifdef __cpp_lib_integer_comparison_functions +# error "__cpp_lib_integer_comparison_functions should not be defined before c++2a" +# endif + # ifdef __cpp_lib_integer_sequence # error "__cpp_lib_integer_sequence should not be defined before c++14" # endif @@ -62,10 +62,6 @@ # error "__cpp_lib_as_const should not be defined before c++17" # endif -# ifdef __cpp_lib_constexpr_misc -# error "__cpp_lib_constexpr_misc should not be defined before c++2a" -# endif - # ifdef __cpp_lib_constexpr_utility # error "__cpp_lib_constexpr_utility should not be defined before c++2a" # endif @@ -77,6 +73,10 @@ # error "__cpp_lib_exchange_function should have the value 201304L in c++14" # endif +# ifdef __cpp_lib_integer_comparison_functions +# error "__cpp_lib_integer_comparison_functions should not be defined before c++2a" +# endif + # ifndef __cpp_lib_integer_sequence # error "__cpp_lib_integer_sequence should be defined in c++14" # endif @@ -104,10 +104,6 @@ # error "__cpp_lib_as_const should have the value 201510L in c++17" # endif -# ifdef __cpp_lib_constexpr_misc -# error "__cpp_lib_constexpr_misc should not be defined before c++2a" -# endif - # ifdef __cpp_lib_constexpr_utility # error "__cpp_lib_constexpr_utility should not be defined before c++2a" # endif @@ -119,6 +115,10 @@ # error "__cpp_lib_exchange_function should have the value 201304L in c++17" # endif +# ifdef __cpp_lib_integer_comparison_functions +# error "__cpp_lib_integer_comparison_functions should not be defined before c++2a" +# endif + # ifndef __cpp_lib_integer_sequence # error "__cpp_lib_integer_sequence should be defined in c++17" # endif @@ -155,19 +155,6 @@ # error "__cpp_lib_as_const should have the value 201510L in c++2a" # endif -# if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_constexpr_misc -# error "__cpp_lib_constexpr_misc should be defined in c++2a" -# endif -# if __cpp_lib_constexpr_misc != 201811L -# error "__cpp_lib_constexpr_misc should have the value 201811L in c++2a" -# endif -# else // _LIBCPP_VERSION -# ifdef __cpp_lib_constexpr_misc -# error "__cpp_lib_constexpr_misc should not be defined because it is unimplemented in libc++!" -# endif -# endif - # ifndef __cpp_lib_constexpr_utility # error "__cpp_lib_constexpr_utility should be defined in c++2a" # endif @@ -182,6 +169,19 @@ # error "__cpp_lib_exchange_function should have the value 201304L in c++2a" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_integer_comparison_functions +# error "__cpp_lib_integer_comparison_functions should be defined in c++2a" +# endif +# if __cpp_lib_integer_comparison_functions != 202002L +# error "__cpp_lib_integer_comparison_functions should have the value 202002L in c++2a" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_integer_comparison_functions +# error "__cpp_lib_integer_comparison_functions should not be defined because it is unimplemented in libc++!" +# endif +# endif + # ifndef __cpp_lib_integer_sequence # error "__cpp_lib_integer_sequence should be defined in c++2a" # endif diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/vector.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/vector.version.pass.cpp --- a/libcxx/test/std/language.support/support.limits/support.limits.general/vector.version.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/vector.version.pass.cpp @@ -15,6 +15,7 @@ /* Constant Value __cpp_lib_allocator_traits_is_always_equal 201411L [C++17] + __cpp_lib_constexpr_vector 201907L [C++2a] __cpp_lib_erase_if 202002L [C++2a] __cpp_lib_incomplete_container_elements 201505L [C++17] __cpp_lib_nonmember_container_access 201411L [C++17] @@ -29,6 +30,10 @@ # error "__cpp_lib_allocator_traits_is_always_equal should not be defined before c++17" # endif +# ifdef __cpp_lib_constexpr_vector +# error "__cpp_lib_constexpr_vector should not be defined before c++2a" +# endif + # ifdef __cpp_lib_erase_if # error "__cpp_lib_erase_if should not be defined before c++2a" # endif @@ -47,6 +52,10 @@ # error "__cpp_lib_allocator_traits_is_always_equal should not be defined before c++17" # endif +# ifdef __cpp_lib_constexpr_vector +# error "__cpp_lib_constexpr_vector should not be defined before c++2a" +# endif + # ifdef __cpp_lib_erase_if # error "__cpp_lib_erase_if should not be defined before c++2a" # endif @@ -68,6 +77,10 @@ # error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++17" # endif +# ifdef __cpp_lib_constexpr_vector +# error "__cpp_lib_constexpr_vector should not be defined before c++2a" +# endif + # ifdef __cpp_lib_erase_if # error "__cpp_lib_erase_if should not be defined before c++2a" # endif @@ -95,6 +108,19 @@ # error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++2a" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_constexpr_vector +# error "__cpp_lib_constexpr_vector should be defined in c++2a" +# endif +# if __cpp_lib_constexpr_vector != 201907L +# error "__cpp_lib_constexpr_vector should have the value 201907L in c++2a" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_constexpr_vector +# error "__cpp_lib_constexpr_vector should not be defined because it is unimplemented in libc++!" +# endif +# endif + # ifndef __cpp_lib_erase_if # error "__cpp_lib_erase_if should be defined in c++2a" # endif diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/version.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/version.version.pass.cpp --- a/libcxx/test/std/language.support/support.limits/support.limits.general/version.version.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/version.version.pass.cpp @@ -21,6 +21,7 @@ __cpp_lib_array_constexpr 201603L [C++17] 201811L [C++2a] __cpp_lib_as_const 201510L [C++17] + __cpp_lib_assume_aligned 201811L [C++2a] __cpp_lib_atomic_flag_test 201907L [C++2a] __cpp_lib_atomic_float 201711L [C++2a] __cpp_lib_atomic_is_always_lock_free 201603L [C++17] @@ -29,9 +30,12 @@ __cpp_lib_atomic_shared_ptr 201711L [C++2a] __cpp_lib_atomic_value_initialization 201911L [C++2a] __cpp_lib_atomic_wait 201907L [C++2a] - __cpp_lib_bind_front 201811L [C++2a] + __cpp_lib_barrier 201907L [C++2a] + __cpp_lib_bind_front 201907L [C++2a] __cpp_lib_bit_cast 201806L [C++2a] + __cpp_lib_bitops 201907L [C++2a] __cpp_lib_bool_constant 201505L [C++17] + __cpp_lib_bounded_array_traits 201902L [C++2a] __cpp_lib_boyer_moore_searcher 201603L [C++17] __cpp_lib_byte 201603L [C++17] __cpp_lib_char8_t 201811L [C++2a] @@ -39,18 +43,27 @@ __cpp_lib_chrono_udls 201304L [C++14] __cpp_lib_clamp 201603L [C++17] __cpp_lib_complex_udls 201309L [C++14] - __cpp_lib_concepts 201806L [C++2a] + __cpp_lib_concepts 202002L [C++2a] + __cpp_lib_constexpr_algorithms 201806L [C++2a] + __cpp_lib_constexpr_complex 201711L [C++2a] __cpp_lib_constexpr_dynamic_alloc 201907L [C++2a] - __cpp_lib_constexpr_misc 201811L [C++2a] + __cpp_lib_constexpr_functional 201907L [C++2a] + __cpp_lib_constexpr_iterator 201811L [C++2a] + __cpp_lib_constexpr_memory 201811L [C++2a] __cpp_lib_constexpr_numeric 201911L [C++2a] - __cpp_lib_constexpr_swap_algorithms 201806L [C++2a] + __cpp_lib_constexpr_string 201907L [C++2a] + __cpp_lib_constexpr_string_view 201811L [C++2a] + __cpp_lib_constexpr_tuple 201811L [C++2a] __cpp_lib_constexpr_utility 201811L [C++2a] + __cpp_lib_constexpr_vector 201907L [C++2a] + __cpp_lib_coroutine 201902L [C++2a] __cpp_lib_destroying_delete 201806L [C++2a] __cpp_lib_enable_shared_from_this 201603L [C++17] __cpp_lib_endian 201907L [C++2a] __cpp_lib_erase_if 202002L [C++2a] __cpp_lib_exchange_function 201304L [C++14] __cpp_lib_execution 201603L [C++17] + 201902L [C++2a] __cpp_lib_filesystem 201703L [C++17] __cpp_lib_gcd_lcm 201606L [C++17] __cpp_lib_generic_associative_lookup 201304L [C++14] @@ -60,6 +73,7 @@ __cpp_lib_hypot 201603L [C++17] __cpp_lib_incomplete_container_elements 201505L [C++17] __cpp_lib_int_pow2 202002L [C++2a] + __cpp_lib_integer_comparison_functions 202002L [C++2a] __cpp_lib_integer_sequence 201304L [C++14] __cpp_lib_integral_constant_callable 201304L [C++14] __cpp_lib_interpolate 201902L [C++2a] @@ -68,8 +82,13 @@ __cpp_lib_is_constant_evaluated 201811L [C++2a] __cpp_lib_is_final 201402L [C++14] __cpp_lib_is_invocable 201703L [C++17] + __cpp_lib_is_layout_compatible 201907L [C++2a] + __cpp_lib_is_nothrow_convertible 201806L [C++2a] __cpp_lib_is_null_pointer 201309L [C++14] + __cpp_lib_is_pointer_interconvertible 201907L [C++2a] __cpp_lib_is_swappable 201603L [C++17] + __cpp_lib_jthread 201911L [C++2a] + __cpp_lib_latch 201907L [C++2a] __cpp_lib_launder 201606L [C++17] __cpp_lib_list_remove_return_type 201806L [C++2a] __cpp_lib_logical_traits 201510L [C++17] @@ -86,21 +105,32 @@ __cpp_lib_null_iterators 201304L [C++14] __cpp_lib_optional 201606L [C++17] __cpp_lib_parallel_algorithm 201603L [C++17] + __cpp_lib_polymorphic_allocator 201902L [C++2a] __cpp_lib_quoted_string_io 201304L [C++14] __cpp_lib_ranges 201811L [C++2a] __cpp_lib_raw_memory_algorithms 201606L [C++17] + __cpp_lib_remove_cvref 201711L [C++2a] __cpp_lib_result_of_sfinae 201210L [C++14] __cpp_lib_robust_nonmodifying_seq_ops 201304L [C++14] __cpp_lib_sample 201603L [C++17] __cpp_lib_scoped_lock 201703L [C++17] + __cpp_lib_semaphore 201907L [C++2a] __cpp_lib_shared_mutex 201505L [C++17] __cpp_lib_shared_ptr_arrays 201611L [C++17] __cpp_lib_shared_ptr_weak_type 201606L [C++17] __cpp_lib_shared_timed_mutex 201402L [C++14] + __cpp_lib_shift 201806L [C++2a] + __cpp_lib_smart_ptr_for_overwrite 202002L [C++2a] + __cpp_lib_source_location 201907L [C++2a] __cpp_lib_span 202002L [C++2a] + __cpp_lib_ssize 201902L [C++2a] + __cpp_lib_starts_ends_with 201711L [C++2a] __cpp_lib_string_udls 201304L [C++14] __cpp_lib_string_view 201606L [C++17] - __cpp_lib_three_way_comparison 201711L [C++2a] + 201803L [C++2a] + __cpp_lib_syncbuf 201803L [C++2a] + __cpp_lib_three_way_comparison 201907L [C++2a] + __cpp_lib_to_address 201711L [C++2a] __cpp_lib_to_array 201907L [C++2a] __cpp_lib_to_chars 201611L [C++17] __cpp_lib_transformation_trait_aliases 201304L [C++14] @@ -111,6 +141,7 @@ __cpp_lib_type_trait_variable_templates 201510L [C++17] __cpp_lib_uncaught_exceptions 201411L [C++17] __cpp_lib_unordered_map_try_emplace 201411L [C++17] + __cpp_lib_unwrap_ref 201811L [C++2a] __cpp_lib_variant 201606L [C++17] __cpp_lib_void_t 201411L [C++17] */ @@ -144,6 +175,10 @@ # error "__cpp_lib_as_const should not be defined before c++17" # endif +# ifdef __cpp_lib_assume_aligned +# error "__cpp_lib_assume_aligned should not be defined before c++2a" +# endif + # ifdef __cpp_lib_atomic_flag_test # error "__cpp_lib_atomic_flag_test should not be defined before c++2a" # endif @@ -176,6 +211,10 @@ # error "__cpp_lib_atomic_wait should not be defined before c++2a" # endif +# ifdef __cpp_lib_barrier +# error "__cpp_lib_barrier should not be defined before c++2a" +# endif + # ifdef __cpp_lib_bind_front # error "__cpp_lib_bind_front should not be defined before c++2a" # endif @@ -184,10 +223,18 @@ # error "__cpp_lib_bit_cast should not be defined before c++2a" # endif +# ifdef __cpp_lib_bitops +# error "__cpp_lib_bitops should not be defined before c++2a" +# endif + # ifdef __cpp_lib_bool_constant # error "__cpp_lib_bool_constant should not be defined before c++17" # endif +# ifdef __cpp_lib_bounded_array_traits +# error "__cpp_lib_bounded_array_traits should not be defined before c++2a" +# endif + # ifdef __cpp_lib_boyer_moore_searcher # error "__cpp_lib_boyer_moore_searcher should not be defined before c++17" # endif @@ -220,26 +267,58 @@ # error "__cpp_lib_concepts should not be defined before c++2a" # endif +# ifdef __cpp_lib_constexpr_algorithms +# error "__cpp_lib_constexpr_algorithms should not be defined before c++2a" +# endif + +# ifdef __cpp_lib_constexpr_complex +# error "__cpp_lib_constexpr_complex should not be defined before c++2a" +# endif + # ifdef __cpp_lib_constexpr_dynamic_alloc # error "__cpp_lib_constexpr_dynamic_alloc should not be defined before c++2a" # endif -# ifdef __cpp_lib_constexpr_misc -# error "__cpp_lib_constexpr_misc should not be defined before c++2a" +# ifdef __cpp_lib_constexpr_functional +# error "__cpp_lib_constexpr_functional should not be defined before c++2a" +# endif + +# ifdef __cpp_lib_constexpr_iterator +# error "__cpp_lib_constexpr_iterator should not be defined before c++2a" +# endif + +# ifdef __cpp_lib_constexpr_memory +# error "__cpp_lib_constexpr_memory should not be defined before c++2a" # endif # ifdef __cpp_lib_constexpr_numeric # error "__cpp_lib_constexpr_numeric should not be defined before c++2a" # endif -# ifdef __cpp_lib_constexpr_swap_algorithms -# error "__cpp_lib_constexpr_swap_algorithms should not be defined before c++2a" +# ifdef __cpp_lib_constexpr_string +# error "__cpp_lib_constexpr_string should not be defined before c++2a" +# endif + +# ifdef __cpp_lib_constexpr_string_view +# error "__cpp_lib_constexpr_string_view should not be defined before c++2a" +# endif + +# ifdef __cpp_lib_constexpr_tuple +# error "__cpp_lib_constexpr_tuple should not be defined before c++2a" # endif # ifdef __cpp_lib_constexpr_utility # error "__cpp_lib_constexpr_utility should not be defined before c++2a" # endif +# ifdef __cpp_lib_constexpr_vector +# error "__cpp_lib_constexpr_vector should not be defined before c++2a" +# endif + +# ifdef __cpp_lib_coroutine +# error "__cpp_lib_coroutine should not be defined before c++2a" +# endif + # ifdef __cpp_lib_destroying_delete # error "__cpp_lib_destroying_delete should not be defined before c++2a" # endif @@ -300,6 +379,10 @@ # error "__cpp_lib_int_pow2 should not be defined before c++2a" # endif +# ifdef __cpp_lib_integer_comparison_functions +# error "__cpp_lib_integer_comparison_functions should not be defined before c++2a" +# endif + # ifdef __cpp_lib_integer_sequence # error "__cpp_lib_integer_sequence should not be defined before c++14" # endif @@ -332,14 +415,34 @@ # error "__cpp_lib_is_invocable should not be defined before c++17" # endif +# ifdef __cpp_lib_is_layout_compatible +# error "__cpp_lib_is_layout_compatible should not be defined before c++2a" +# endif + +# ifdef __cpp_lib_is_nothrow_convertible +# error "__cpp_lib_is_nothrow_convertible should not be defined before c++2a" +# endif + # ifdef __cpp_lib_is_null_pointer # error "__cpp_lib_is_null_pointer should not be defined before c++14" # endif +# ifdef __cpp_lib_is_pointer_interconvertible +# error "__cpp_lib_is_pointer_interconvertible should not be defined before c++2a" +# endif + # ifdef __cpp_lib_is_swappable # error "__cpp_lib_is_swappable should not be defined before c++17" # endif +# ifdef __cpp_lib_jthread +# error "__cpp_lib_jthread should not be defined before c++2a" +# endif + +# ifdef __cpp_lib_latch +# error "__cpp_lib_latch should not be defined before c++2a" +# endif + # ifdef __cpp_lib_launder # error "__cpp_lib_launder should not be defined before c++17" # endif @@ -404,6 +507,10 @@ # error "__cpp_lib_parallel_algorithm should not be defined before c++17" # endif +# ifdef __cpp_lib_polymorphic_allocator +# error "__cpp_lib_polymorphic_allocator should not be defined before c++2a" +# endif + # ifdef __cpp_lib_quoted_string_io # error "__cpp_lib_quoted_string_io should not be defined before c++14" # endif @@ -416,6 +523,10 @@ # error "__cpp_lib_raw_memory_algorithms should not be defined before c++17" # endif +# ifdef __cpp_lib_remove_cvref +# error "__cpp_lib_remove_cvref should not be defined before c++2a" +# endif + # ifdef __cpp_lib_result_of_sfinae # error "__cpp_lib_result_of_sfinae should not be defined before c++14" # endif @@ -432,6 +543,10 @@ # error "__cpp_lib_scoped_lock should not be defined before c++17" # endif +# ifdef __cpp_lib_semaphore +# error "__cpp_lib_semaphore should not be defined before c++2a" +# endif + # ifdef __cpp_lib_shared_mutex # error "__cpp_lib_shared_mutex should not be defined before c++17" # endif @@ -448,10 +563,30 @@ # error "__cpp_lib_shared_timed_mutex should not be defined before c++14" # endif +# ifdef __cpp_lib_shift +# error "__cpp_lib_shift should not be defined before c++2a" +# endif + +# ifdef __cpp_lib_smart_ptr_for_overwrite +# error "__cpp_lib_smart_ptr_for_overwrite should not be defined before c++2a" +# endif + +# ifdef __cpp_lib_source_location +# error "__cpp_lib_source_location should not be defined before c++2a" +# endif + # ifdef __cpp_lib_span # error "__cpp_lib_span should not be defined before c++2a" # endif +# ifdef __cpp_lib_ssize +# error "__cpp_lib_ssize should not be defined before c++2a" +# endif + +# ifdef __cpp_lib_starts_ends_with +# error "__cpp_lib_starts_ends_with should not be defined before c++2a" +# endif + # ifdef __cpp_lib_string_udls # error "__cpp_lib_string_udls should not be defined before c++14" # endif @@ -460,10 +595,18 @@ # error "__cpp_lib_string_view should not be defined before c++17" # endif +# ifdef __cpp_lib_syncbuf +# error "__cpp_lib_syncbuf should not be defined before c++2a" +# endif + # ifdef __cpp_lib_three_way_comparison # error "__cpp_lib_three_way_comparison should not be defined before c++2a" # endif +# ifdef __cpp_lib_to_address +# error "__cpp_lib_to_address should not be defined before c++2a" +# endif + # ifdef __cpp_lib_to_array # error "__cpp_lib_to_array should not be defined before c++2a" # endif @@ -500,6 +643,10 @@ # error "__cpp_lib_unordered_map_try_emplace should not be defined before c++17" # endif +# ifdef __cpp_lib_unwrap_ref +# error "__cpp_lib_unwrap_ref should not be defined before c++2a" +# endif + # ifdef __cpp_lib_variant # error "__cpp_lib_variant should not be defined before c++17" # endif @@ -534,6 +681,10 @@ # error "__cpp_lib_as_const should not be defined before c++17" # endif +# ifdef __cpp_lib_assume_aligned +# error "__cpp_lib_assume_aligned should not be defined before c++2a" +# endif + # ifdef __cpp_lib_atomic_flag_test # error "__cpp_lib_atomic_flag_test should not be defined before c++2a" # endif @@ -566,6 +717,10 @@ # error "__cpp_lib_atomic_wait should not be defined before c++2a" # endif +# ifdef __cpp_lib_barrier +# error "__cpp_lib_barrier should not be defined before c++2a" +# endif + # ifdef __cpp_lib_bind_front # error "__cpp_lib_bind_front should not be defined before c++2a" # endif @@ -574,10 +729,18 @@ # error "__cpp_lib_bit_cast should not be defined before c++2a" # endif +# ifdef __cpp_lib_bitops +# error "__cpp_lib_bitops should not be defined before c++2a" +# endif + # ifdef __cpp_lib_bool_constant # error "__cpp_lib_bool_constant should not be defined before c++17" # endif +# ifdef __cpp_lib_bounded_array_traits +# error "__cpp_lib_bounded_array_traits should not be defined before c++2a" +# endif + # ifdef __cpp_lib_boyer_moore_searcher # error "__cpp_lib_boyer_moore_searcher should not be defined before c++17" # endif @@ -616,26 +779,58 @@ # error "__cpp_lib_concepts should not be defined before c++2a" # endif +# ifdef __cpp_lib_constexpr_algorithms +# error "__cpp_lib_constexpr_algorithms should not be defined before c++2a" +# endif + +# ifdef __cpp_lib_constexpr_complex +# error "__cpp_lib_constexpr_complex should not be defined before c++2a" +# endif + # ifdef __cpp_lib_constexpr_dynamic_alloc # error "__cpp_lib_constexpr_dynamic_alloc should not be defined before c++2a" # endif -# ifdef __cpp_lib_constexpr_misc -# error "__cpp_lib_constexpr_misc should not be defined before c++2a" +# ifdef __cpp_lib_constexpr_functional +# error "__cpp_lib_constexpr_functional should not be defined before c++2a" +# endif + +# ifdef __cpp_lib_constexpr_iterator +# error "__cpp_lib_constexpr_iterator should not be defined before c++2a" +# endif + +# ifdef __cpp_lib_constexpr_memory +# error "__cpp_lib_constexpr_memory should not be defined before c++2a" # endif # ifdef __cpp_lib_constexpr_numeric # error "__cpp_lib_constexpr_numeric should not be defined before c++2a" # endif -# ifdef __cpp_lib_constexpr_swap_algorithms -# error "__cpp_lib_constexpr_swap_algorithms should not be defined before c++2a" +# ifdef __cpp_lib_constexpr_string +# error "__cpp_lib_constexpr_string should not be defined before c++2a" +# endif + +# ifdef __cpp_lib_constexpr_string_view +# error "__cpp_lib_constexpr_string_view should not be defined before c++2a" +# endif + +# ifdef __cpp_lib_constexpr_tuple +# error "__cpp_lib_constexpr_tuple should not be defined before c++2a" # endif # ifdef __cpp_lib_constexpr_utility # error "__cpp_lib_constexpr_utility should not be defined before c++2a" # endif +# ifdef __cpp_lib_constexpr_vector +# error "__cpp_lib_constexpr_vector should not be defined before c++2a" +# endif + +# ifdef __cpp_lib_coroutine +# error "__cpp_lib_coroutine should not be defined before c++2a" +# endif + # ifdef __cpp_lib_destroying_delete # error "__cpp_lib_destroying_delete should not be defined before c++2a" # endif @@ -702,6 +897,10 @@ # error "__cpp_lib_int_pow2 should not be defined before c++2a" # endif +# ifdef __cpp_lib_integer_comparison_functions +# error "__cpp_lib_integer_comparison_functions should not be defined before c++2a" +# endif + # ifndef __cpp_lib_integer_sequence # error "__cpp_lib_integer_sequence should be defined in c++14" # endif @@ -743,6 +942,14 @@ # error "__cpp_lib_is_invocable should not be defined before c++17" # endif +# ifdef __cpp_lib_is_layout_compatible +# error "__cpp_lib_is_layout_compatible should not be defined before c++2a" +# endif + +# ifdef __cpp_lib_is_nothrow_convertible +# error "__cpp_lib_is_nothrow_convertible should not be defined before c++2a" +# endif + # ifndef __cpp_lib_is_null_pointer # error "__cpp_lib_is_null_pointer should be defined in c++14" # endif @@ -750,10 +957,22 @@ # error "__cpp_lib_is_null_pointer should have the value 201309L in c++14" # endif +# ifdef __cpp_lib_is_pointer_interconvertible +# error "__cpp_lib_is_pointer_interconvertible should not be defined before c++2a" +# endif + # ifdef __cpp_lib_is_swappable # error "__cpp_lib_is_swappable should not be defined before c++17" # endif +# ifdef __cpp_lib_jthread +# error "__cpp_lib_jthread should not be defined before c++2a" +# endif + +# ifdef __cpp_lib_latch +# error "__cpp_lib_latch should not be defined before c++2a" +# endif + # ifdef __cpp_lib_launder # error "__cpp_lib_launder should not be defined before c++17" # endif @@ -827,6 +1046,10 @@ # error "__cpp_lib_parallel_algorithm should not be defined before c++17" # endif +# ifdef __cpp_lib_polymorphic_allocator +# error "__cpp_lib_polymorphic_allocator should not be defined before c++2a" +# endif + # ifndef __cpp_lib_quoted_string_io # error "__cpp_lib_quoted_string_io should be defined in c++14" # endif @@ -842,6 +1065,10 @@ # error "__cpp_lib_raw_memory_algorithms should not be defined before c++17" # endif +# ifdef __cpp_lib_remove_cvref +# error "__cpp_lib_remove_cvref should not be defined before c++2a" +# endif + # ifndef __cpp_lib_result_of_sfinae # error "__cpp_lib_result_of_sfinae should be defined in c++14" # endif @@ -864,6 +1091,10 @@ # error "__cpp_lib_scoped_lock should not be defined before c++17" # endif +# ifdef __cpp_lib_semaphore +# error "__cpp_lib_semaphore should not be defined before c++2a" +# endif + # ifdef __cpp_lib_shared_mutex # error "__cpp_lib_shared_mutex should not be defined before c++17" # endif @@ -889,10 +1120,30 @@ # endif # endif +# ifdef __cpp_lib_shift +# error "__cpp_lib_shift should not be defined before c++2a" +# endif + +# ifdef __cpp_lib_smart_ptr_for_overwrite +# error "__cpp_lib_smart_ptr_for_overwrite should not be defined before c++2a" +# endif + +# ifdef __cpp_lib_source_location +# error "__cpp_lib_source_location should not be defined before c++2a" +# endif + # ifdef __cpp_lib_span # error "__cpp_lib_span should not be defined before c++2a" # endif +# ifdef __cpp_lib_ssize +# error "__cpp_lib_ssize should not be defined before c++2a" +# endif + +# ifdef __cpp_lib_starts_ends_with +# error "__cpp_lib_starts_ends_with should not be defined before c++2a" +# endif + # ifndef __cpp_lib_string_udls # error "__cpp_lib_string_udls should be defined in c++14" # endif @@ -904,10 +1155,18 @@ # error "__cpp_lib_string_view should not be defined before c++17" # endif +# ifdef __cpp_lib_syncbuf +# error "__cpp_lib_syncbuf should not be defined before c++2a" +# endif + # ifdef __cpp_lib_three_way_comparison # error "__cpp_lib_three_way_comparison should not be defined before c++2a" # endif +# ifdef __cpp_lib_to_address +# error "__cpp_lib_to_address should not be defined before c++2a" +# endif + # ifdef __cpp_lib_to_array # error "__cpp_lib_to_array should not be defined before c++2a" # endif @@ -956,6 +1215,10 @@ # error "__cpp_lib_unordered_map_try_emplace should not be defined before c++17" # endif +# ifdef __cpp_lib_unwrap_ref +# error "__cpp_lib_unwrap_ref should not be defined before c++2a" +# endif + # ifdef __cpp_lib_variant # error "__cpp_lib_variant should not be defined before c++17" # endif @@ -1014,6 +1277,10 @@ # error "__cpp_lib_as_const should have the value 201510L in c++17" # endif +# ifdef __cpp_lib_assume_aligned +# error "__cpp_lib_assume_aligned should not be defined before c++2a" +# endif + # ifdef __cpp_lib_atomic_flag_test # error "__cpp_lib_atomic_flag_test should not be defined before c++2a" # endif @@ -1055,6 +1322,10 @@ # error "__cpp_lib_atomic_wait should not be defined before c++2a" # endif +# ifdef __cpp_lib_barrier +# error "__cpp_lib_barrier should not be defined before c++2a" +# endif + # ifdef __cpp_lib_bind_front # error "__cpp_lib_bind_front should not be defined before c++2a" # endif @@ -1063,6 +1334,10 @@ # error "__cpp_lib_bit_cast should not be defined before c++2a" # endif +# ifdef __cpp_lib_bitops +# error "__cpp_lib_bitops should not be defined before c++2a" +# endif + # ifndef __cpp_lib_bool_constant # error "__cpp_lib_bool_constant should be defined in c++17" # endif @@ -1070,6 +1345,10 @@ # error "__cpp_lib_bool_constant should have the value 201505L in c++17" # endif +# ifdef __cpp_lib_bounded_array_traits +# error "__cpp_lib_bounded_array_traits should not be defined before c++2a" +# endif + # if !defined(_LIBCPP_VERSION) # ifndef __cpp_lib_boyer_moore_searcher # error "__cpp_lib_boyer_moore_searcher should be defined in c++17" @@ -1126,26 +1405,58 @@ # error "__cpp_lib_concepts should not be defined before c++2a" # endif +# ifdef __cpp_lib_constexpr_algorithms +# error "__cpp_lib_constexpr_algorithms should not be defined before c++2a" +# endif + +# ifdef __cpp_lib_constexpr_complex +# error "__cpp_lib_constexpr_complex should not be defined before c++2a" +# endif + # ifdef __cpp_lib_constexpr_dynamic_alloc # error "__cpp_lib_constexpr_dynamic_alloc should not be defined before c++2a" # endif -# ifdef __cpp_lib_constexpr_misc -# error "__cpp_lib_constexpr_misc should not be defined before c++2a" +# ifdef __cpp_lib_constexpr_functional +# error "__cpp_lib_constexpr_functional should not be defined before c++2a" +# endif + +# ifdef __cpp_lib_constexpr_iterator +# error "__cpp_lib_constexpr_iterator should not be defined before c++2a" +# endif + +# ifdef __cpp_lib_constexpr_memory +# error "__cpp_lib_constexpr_memory should not be defined before c++2a" # endif # ifdef __cpp_lib_constexpr_numeric # error "__cpp_lib_constexpr_numeric should not be defined before c++2a" # endif -# ifdef __cpp_lib_constexpr_swap_algorithms -# error "__cpp_lib_constexpr_swap_algorithms should not be defined before c++2a" +# ifdef __cpp_lib_constexpr_string +# error "__cpp_lib_constexpr_string should not be defined before c++2a" +# endif + +# ifdef __cpp_lib_constexpr_string_view +# error "__cpp_lib_constexpr_string_view should not be defined before c++2a" +# endif + +# ifdef __cpp_lib_constexpr_tuple +# error "__cpp_lib_constexpr_tuple should not be defined before c++2a" # endif # ifdef __cpp_lib_constexpr_utility # error "__cpp_lib_constexpr_utility should not be defined before c++2a" # endif +# ifdef __cpp_lib_constexpr_vector +# error "__cpp_lib_constexpr_vector should not be defined before c++2a" +# endif + +# ifdef __cpp_lib_coroutine +# error "__cpp_lib_coroutine should not be defined before c++2a" +# endif + # ifdef __cpp_lib_destroying_delete # error "__cpp_lib_destroying_delete should not be defined before c++2a" # endif @@ -1254,6 +1565,10 @@ # error "__cpp_lib_int_pow2 should not be defined before c++2a" # endif +# ifdef __cpp_lib_integer_comparison_functions +# error "__cpp_lib_integer_comparison_functions should not be defined before c++2a" +# endif + # ifndef __cpp_lib_integer_sequence # error "__cpp_lib_integer_sequence should be defined in c++17" # endif @@ -1310,6 +1625,14 @@ # error "__cpp_lib_is_invocable should have the value 201703L in c++17" # endif +# ifdef __cpp_lib_is_layout_compatible +# error "__cpp_lib_is_layout_compatible should not be defined before c++2a" +# endif + +# ifdef __cpp_lib_is_nothrow_convertible +# error "__cpp_lib_is_nothrow_convertible should not be defined before c++2a" +# endif + # ifndef __cpp_lib_is_null_pointer # error "__cpp_lib_is_null_pointer should be defined in c++17" # endif @@ -1317,6 +1640,10 @@ # error "__cpp_lib_is_null_pointer should have the value 201309L in c++17" # endif +# ifdef __cpp_lib_is_pointer_interconvertible +# error "__cpp_lib_is_pointer_interconvertible should not be defined before c++2a" +# endif + # ifndef __cpp_lib_is_swappable # error "__cpp_lib_is_swappable should be defined in c++17" # endif @@ -1324,6 +1651,14 @@ # error "__cpp_lib_is_swappable should have the value 201603L in c++17" # endif +# ifdef __cpp_lib_jthread +# error "__cpp_lib_jthread should not be defined before c++2a" +# endif + +# ifdef __cpp_lib_latch +# error "__cpp_lib_latch should not be defined before c++2a" +# endif + # ifndef __cpp_lib_launder # error "__cpp_lib_launder should be defined in c++17" # endif @@ -1448,6 +1783,10 @@ # endif # endif +# ifdef __cpp_lib_polymorphic_allocator +# error "__cpp_lib_polymorphic_allocator should not be defined before c++2a" +# endif + # ifndef __cpp_lib_quoted_string_io # error "__cpp_lib_quoted_string_io should be defined in c++17" # endif @@ -1466,6 +1805,10 @@ # error "__cpp_lib_raw_memory_algorithms should have the value 201606L in c++17" # endif +# ifdef __cpp_lib_remove_cvref +# error "__cpp_lib_remove_cvref should not be defined before c++2a" +# endif + # ifndef __cpp_lib_result_of_sfinae # error "__cpp_lib_result_of_sfinae should be defined in c++17" # endif @@ -1494,6 +1837,10 @@ # error "__cpp_lib_scoped_lock should have the value 201703L in c++17" # endif +# ifdef __cpp_lib_semaphore +# error "__cpp_lib_semaphore should not be defined before c++2a" +# endif + # if !defined(_LIBCPP_HAS_NO_THREADS) # ifndef __cpp_lib_shared_mutex # error "__cpp_lib_shared_mutex should be defined in c++17" @@ -1534,10 +1881,30 @@ # endif # endif +# ifdef __cpp_lib_shift +# error "__cpp_lib_shift should not be defined before c++2a" +# endif + +# ifdef __cpp_lib_smart_ptr_for_overwrite +# error "__cpp_lib_smart_ptr_for_overwrite should not be defined before c++2a" +# endif + +# ifdef __cpp_lib_source_location +# error "__cpp_lib_source_location should not be defined before c++2a" +# endif + # ifdef __cpp_lib_span # error "__cpp_lib_span should not be defined before c++2a" # endif +# ifdef __cpp_lib_ssize +# error "__cpp_lib_ssize should not be defined before c++2a" +# endif + +# ifdef __cpp_lib_starts_ends_with +# error "__cpp_lib_starts_ends_with should not be defined before c++2a" +# endif + # ifndef __cpp_lib_string_udls # error "__cpp_lib_string_udls should be defined in c++17" # endif @@ -1552,10 +1919,18 @@ # error "__cpp_lib_string_view should have the value 201606L in c++17" # endif +# ifdef __cpp_lib_syncbuf +# error "__cpp_lib_syncbuf should not be defined before c++2a" +# endif + # ifdef __cpp_lib_three_way_comparison # error "__cpp_lib_three_way_comparison should not be defined before c++2a" # endif +# ifdef __cpp_lib_to_address +# error "__cpp_lib_to_address should not be defined before c++2a" +# endif + # ifdef __cpp_lib_to_array # error "__cpp_lib_to_array should not be defined before c++2a" # endif @@ -1622,6 +1997,10 @@ # error "__cpp_lib_unordered_map_try_emplace should have the value 201411L in c++17" # endif +# ifdef __cpp_lib_unwrap_ref +# error "__cpp_lib_unwrap_ref should not be defined before c++2a" +# endif + # ifndef __cpp_lib_variant # error "__cpp_lib_variant should be defined in c++17" # endif @@ -1686,6 +2065,19 @@ # error "__cpp_lib_as_const should have the value 201510L in c++2a" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_assume_aligned +# error "__cpp_lib_assume_aligned should be defined in c++2a" +# endif +# if __cpp_lib_assume_aligned != 201811L +# error "__cpp_lib_assume_aligned should have the value 201811L in c++2a" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_assume_aligned +# error "__cpp_lib_assume_aligned should not be defined because it is unimplemented in libc++!" +# endif +# endif + # if !defined(_LIBCPP_HAS_NO_THREADS) # ifndef __cpp_lib_atomic_flag_test # error "__cpp_lib_atomic_flag_test should be defined in c++2a" @@ -1790,12 +2182,25 @@ # endif # endif +# if !defined(_LIBCPP_HAS_NO_THREADS) +# ifndef __cpp_lib_barrier +# error "__cpp_lib_barrier should be defined in c++2a" +# endif +# if __cpp_lib_barrier != 201907L +# error "__cpp_lib_barrier should have the value 201907L in c++2a" +# endif +# else +# ifdef __cpp_lib_barrier +# error "__cpp_lib_barrier should not be defined when !defined(_LIBCPP_HAS_NO_THREADS) is not defined!" +# endif +# endif + # if !defined(_LIBCPP_VERSION) # ifndef __cpp_lib_bind_front # error "__cpp_lib_bind_front should be defined in c++2a" # endif -# if __cpp_lib_bind_front != 201811L -# error "__cpp_lib_bind_front should have the value 201811L in c++2a" +# if __cpp_lib_bind_front != 201907L +# error "__cpp_lib_bind_front should have the value 201907L in c++2a" # endif # else // _LIBCPP_VERSION # ifdef __cpp_lib_bind_front @@ -1816,6 +2221,19 @@ # endif # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_bitops +# error "__cpp_lib_bitops should be defined in c++2a" +# endif +# if __cpp_lib_bitops != 201907L +# error "__cpp_lib_bitops should have the value 201907L in c++2a" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_bitops +# error "__cpp_lib_bitops should not be defined because it is unimplemented in libc++!" +# endif +# endif + # ifndef __cpp_lib_bool_constant # error "__cpp_lib_bool_constant should be defined in c++2a" # endif @@ -1823,6 +2241,13 @@ # error "__cpp_lib_bool_constant should have the value 201505L in c++2a" # endif +# ifndef __cpp_lib_bounded_array_traits +# error "__cpp_lib_bounded_array_traits should be defined in c++2a" +# endif +# if __cpp_lib_bounded_array_traits != 201902L +# error "__cpp_lib_bounded_array_traits should have the value 201902L in c++2a" +# endif + # if !defined(_LIBCPP_VERSION) # ifndef __cpp_lib_boyer_moore_searcher # error "__cpp_lib_boyer_moore_searcher should be defined in c++2a" @@ -1888,8 +2313,8 @@ # ifndef __cpp_lib_concepts # error "__cpp_lib_concepts should be defined in c++2a" # endif -# if __cpp_lib_concepts != 201806L -# error "__cpp_lib_concepts should have the value 201806L in c++2a" +# if __cpp_lib_concepts != 202002L +# error "__cpp_lib_concepts should have the value 202002L in c++2a" # endif # else // _LIBCPP_VERSION # ifdef __cpp_lib_concepts @@ -1897,6 +2322,32 @@ # endif # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_constexpr_algorithms +# error "__cpp_lib_constexpr_algorithms should be defined in c++2a" +# endif +# if __cpp_lib_constexpr_algorithms != 201806L +# error "__cpp_lib_constexpr_algorithms should have the value 201806L in c++2a" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_constexpr_algorithms +# error "__cpp_lib_constexpr_algorithms should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_constexpr_complex +# error "__cpp_lib_constexpr_complex should be defined in c++2a" +# endif +# if __cpp_lib_constexpr_complex != 201711L +# error "__cpp_lib_constexpr_complex should have the value 201711L in c++2a" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_constexpr_complex +# error "__cpp_lib_constexpr_complex should not be defined because it is unimplemented in libc++!" +# endif +# endif + # ifndef __cpp_lib_constexpr_dynamic_alloc # error "__cpp_lib_constexpr_dynamic_alloc should be defined in c++2a" # endif @@ -1905,15 +2356,41 @@ # endif # if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_constexpr_misc -# error "__cpp_lib_constexpr_misc should be defined in c++2a" +# ifndef __cpp_lib_constexpr_functional +# error "__cpp_lib_constexpr_functional should be defined in c++2a" # endif -# if __cpp_lib_constexpr_misc != 201811L -# error "__cpp_lib_constexpr_misc should have the value 201811L in c++2a" +# if __cpp_lib_constexpr_functional != 201907L +# error "__cpp_lib_constexpr_functional should have the value 201907L in c++2a" # endif # else // _LIBCPP_VERSION -# ifdef __cpp_lib_constexpr_misc -# error "__cpp_lib_constexpr_misc should not be defined because it is unimplemented in libc++!" +# ifdef __cpp_lib_constexpr_functional +# error "__cpp_lib_constexpr_functional should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_constexpr_iterator +# error "__cpp_lib_constexpr_iterator should be defined in c++2a" +# endif +# if __cpp_lib_constexpr_iterator != 201811L +# error "__cpp_lib_constexpr_iterator should have the value 201811L in c++2a" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_constexpr_iterator +# error "__cpp_lib_constexpr_iterator should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_constexpr_memory +# error "__cpp_lib_constexpr_memory should be defined in c++2a" +# endif +# if __cpp_lib_constexpr_memory != 201811L +# error "__cpp_lib_constexpr_memory should have the value 201811L in c++2a" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_constexpr_memory +# error "__cpp_lib_constexpr_memory should not be defined because it is unimplemented in libc++!" # endif # endif @@ -1925,15 +2402,41 @@ # endif # if !defined(_LIBCPP_VERSION) -# ifndef __cpp_lib_constexpr_swap_algorithms -# error "__cpp_lib_constexpr_swap_algorithms should be defined in c++2a" +# ifndef __cpp_lib_constexpr_string +# error "__cpp_lib_constexpr_string should be defined in c++2a" +# endif +# if __cpp_lib_constexpr_string != 201907L +# error "__cpp_lib_constexpr_string should have the value 201907L in c++2a" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_constexpr_string +# error "__cpp_lib_constexpr_string should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_constexpr_string_view +# error "__cpp_lib_constexpr_string_view should be defined in c++2a" +# endif +# if __cpp_lib_constexpr_string_view != 201811L +# error "__cpp_lib_constexpr_string_view should have the value 201811L in c++2a" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_constexpr_string_view +# error "__cpp_lib_constexpr_string_view should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_constexpr_tuple +# error "__cpp_lib_constexpr_tuple should be defined in c++2a" # endif -# if __cpp_lib_constexpr_swap_algorithms != 201806L -# error "__cpp_lib_constexpr_swap_algorithms should have the value 201806L in c++2a" +# if __cpp_lib_constexpr_tuple != 201811L +# error "__cpp_lib_constexpr_tuple should have the value 201811L in c++2a" # endif # else // _LIBCPP_VERSION -# ifdef __cpp_lib_constexpr_swap_algorithms -# error "__cpp_lib_constexpr_swap_algorithms should not be defined because it is unimplemented in libc++!" +# ifdef __cpp_lib_constexpr_tuple +# error "__cpp_lib_constexpr_tuple should not be defined because it is unimplemented in libc++!" # endif # endif @@ -1944,6 +2447,32 @@ # error "__cpp_lib_constexpr_utility should have the value 201811L in c++2a" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_constexpr_vector +# error "__cpp_lib_constexpr_vector should be defined in c++2a" +# endif +# if __cpp_lib_constexpr_vector != 201907L +# error "__cpp_lib_constexpr_vector should have the value 201907L in c++2a" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_constexpr_vector +# error "__cpp_lib_constexpr_vector should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_coroutine +# error "__cpp_lib_coroutine should be defined in c++2a" +# endif +# if __cpp_lib_coroutine != 201902L +# error "__cpp_lib_coroutine should have the value 201902L in c++2a" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_coroutine +# error "__cpp_lib_coroutine should not be defined because it is unimplemented in libc++!" +# endif +# endif + # if TEST_STD_VER > 17 && defined(__cpp_impl_destroying_delete) && __cpp_impl_destroying_delete >= 201806L # ifndef __cpp_lib_destroying_delete # error "__cpp_lib_destroying_delete should be defined in c++2a" @@ -1989,8 +2518,8 @@ # ifndef __cpp_lib_execution # error "__cpp_lib_execution should be defined in c++2a" # endif -# if __cpp_lib_execution != 201603L -# error "__cpp_lib_execution should have the value 201603L in c++2a" +# if __cpp_lib_execution != 201902L +# error "__cpp_lib_execution should have the value 201902L in c++2a" # endif # else // _LIBCPP_VERSION # ifdef __cpp_lib_execution @@ -2073,6 +2602,19 @@ # error "__cpp_lib_int_pow2 should have the value 202002L in c++2a" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_integer_comparison_functions +# error "__cpp_lib_integer_comparison_functions should be defined in c++2a" +# endif +# if __cpp_lib_integer_comparison_functions != 202002L +# error "__cpp_lib_integer_comparison_functions should have the value 202002L in c++2a" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_integer_comparison_functions +# error "__cpp_lib_integer_comparison_functions should not be defined because it is unimplemented in libc++!" +# endif +# endif + # ifndef __cpp_lib_integer_sequence # error "__cpp_lib_integer_sequence should be defined in c++2a" # endif @@ -2141,6 +2683,32 @@ # error "__cpp_lib_is_invocable should have the value 201703L in c++2a" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_is_layout_compatible +# error "__cpp_lib_is_layout_compatible should be defined in c++2a" +# endif +# if __cpp_lib_is_layout_compatible != 201907L +# error "__cpp_lib_is_layout_compatible should have the value 201907L in c++2a" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_is_layout_compatible +# error "__cpp_lib_is_layout_compatible should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_is_nothrow_convertible +# error "__cpp_lib_is_nothrow_convertible should be defined in c++2a" +# endif +# if __cpp_lib_is_nothrow_convertible != 201806L +# error "__cpp_lib_is_nothrow_convertible should have the value 201806L in c++2a" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_is_nothrow_convertible +# error "__cpp_lib_is_nothrow_convertible should not be defined because it is unimplemented in libc++!" +# endif +# endif + # ifndef __cpp_lib_is_null_pointer # error "__cpp_lib_is_null_pointer should be defined in c++2a" # endif @@ -2148,6 +2716,19 @@ # error "__cpp_lib_is_null_pointer should have the value 201309L in c++2a" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_is_pointer_interconvertible +# error "__cpp_lib_is_pointer_interconvertible should be defined in c++2a" +# endif +# if __cpp_lib_is_pointer_interconvertible != 201907L +# error "__cpp_lib_is_pointer_interconvertible should have the value 201907L in c++2a" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_is_pointer_interconvertible +# error "__cpp_lib_is_pointer_interconvertible should not be defined because it is unimplemented in libc++!" +# endif +# endif + # ifndef __cpp_lib_is_swappable # error "__cpp_lib_is_swappable should be defined in c++2a" # endif @@ -2155,6 +2736,32 @@ # error "__cpp_lib_is_swappable should have the value 201603L in c++2a" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_jthread +# error "__cpp_lib_jthread should be defined in c++2a" +# endif +# if __cpp_lib_jthread != 201911L +# error "__cpp_lib_jthread should have the value 201911L in c++2a" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_jthread +# error "__cpp_lib_jthread should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# if !defined(_LIBCPP_HAS_NO_THREADS) +# ifndef __cpp_lib_latch +# error "__cpp_lib_latch should be defined in c++2a" +# endif +# if __cpp_lib_latch != 201907L +# error "__cpp_lib_latch should have the value 201907L in c++2a" +# endif +# else +# ifdef __cpp_lib_latch +# error "__cpp_lib_latch should not be defined when !defined(_LIBCPP_HAS_NO_THREADS) is not defined!" +# endif +# endif + # ifndef __cpp_lib_launder # error "__cpp_lib_launder should be defined in c++2a" # endif @@ -2291,6 +2898,19 @@ # endif # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_polymorphic_allocator +# error "__cpp_lib_polymorphic_allocator should be defined in c++2a" +# endif +# if __cpp_lib_polymorphic_allocator != 201902L +# error "__cpp_lib_polymorphic_allocator should have the value 201902L in c++2a" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_polymorphic_allocator +# error "__cpp_lib_polymorphic_allocator should not be defined because it is unimplemented in libc++!" +# endif +# endif + # ifndef __cpp_lib_quoted_string_io # error "__cpp_lib_quoted_string_io should be defined in c++2a" # endif @@ -2318,6 +2938,13 @@ # error "__cpp_lib_raw_memory_algorithms should have the value 201606L in c++2a" # endif +# ifndef __cpp_lib_remove_cvref +# error "__cpp_lib_remove_cvref should be defined in c++2a" +# endif +# if __cpp_lib_remove_cvref != 201711L +# error "__cpp_lib_remove_cvref should have the value 201711L in c++2a" +# endif + # ifndef __cpp_lib_result_of_sfinae # error "__cpp_lib_result_of_sfinae should be defined in c++2a" # endif @@ -2346,6 +2973,19 @@ # error "__cpp_lib_scoped_lock should have the value 201703L in c++2a" # endif +# if !defined(_LIBCPP_HAS_NO_THREADS) +# ifndef __cpp_lib_semaphore +# error "__cpp_lib_semaphore should be defined in c++2a" +# endif +# if __cpp_lib_semaphore != 201907L +# error "__cpp_lib_semaphore should have the value 201907L in c++2a" +# endif +# else +# ifdef __cpp_lib_semaphore +# error "__cpp_lib_semaphore should not be defined when !defined(_LIBCPP_HAS_NO_THREADS) is not defined!" +# endif +# endif + # if !defined(_LIBCPP_HAS_NO_THREADS) # ifndef __cpp_lib_shared_mutex # error "__cpp_lib_shared_mutex should be defined in c++2a" @@ -2386,6 +3026,45 @@ # endif # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_shift +# error "__cpp_lib_shift should be defined in c++2a" +# endif +# if __cpp_lib_shift != 201806L +# error "__cpp_lib_shift should have the value 201806L in c++2a" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_shift +# error "__cpp_lib_shift should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_smart_ptr_for_overwrite +# error "__cpp_lib_smart_ptr_for_overwrite should be defined in c++2a" +# endif +# if __cpp_lib_smart_ptr_for_overwrite != 202002L +# error "__cpp_lib_smart_ptr_for_overwrite should have the value 202002L in c++2a" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_smart_ptr_for_overwrite +# error "__cpp_lib_smart_ptr_for_overwrite should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_source_location +# error "__cpp_lib_source_location should be defined in c++2a" +# endif +# if __cpp_lib_source_location != 201907L +# error "__cpp_lib_source_location should have the value 201907L in c++2a" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_source_location +# error "__cpp_lib_source_location should not be defined because it is unimplemented in libc++!" +# endif +# endif + # ifndef __cpp_lib_span # error "__cpp_lib_span should be defined in c++2a" # endif @@ -2393,6 +3072,20 @@ # error "__cpp_lib_span should have the value 202002L in c++2a" # endif +# ifndef __cpp_lib_ssize +# error "__cpp_lib_ssize should be defined in c++2a" +# endif +# if __cpp_lib_ssize != 201902L +# error "__cpp_lib_ssize should have the value 201902L in c++2a" +# endif + +# ifndef __cpp_lib_starts_ends_with +# error "__cpp_lib_starts_ends_with should be defined in c++2a" +# endif +# if __cpp_lib_starts_ends_with != 201711L +# error "__cpp_lib_starts_ends_with should have the value 201711L in c++2a" +# endif + # ifndef __cpp_lib_string_udls # error "__cpp_lib_string_udls should be defined in c++2a" # endif @@ -2403,16 +3096,29 @@ # ifndef __cpp_lib_string_view # error "__cpp_lib_string_view should be defined in c++2a" # endif -# if __cpp_lib_string_view != 201606L -# error "__cpp_lib_string_view should have the value 201606L in c++2a" +# if __cpp_lib_string_view != 201803L +# error "__cpp_lib_string_view should have the value 201803L in c++2a" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_syncbuf +# error "__cpp_lib_syncbuf should be defined in c++2a" +# endif +# if __cpp_lib_syncbuf != 201803L +# error "__cpp_lib_syncbuf should have the value 201803L in c++2a" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_syncbuf +# error "__cpp_lib_syncbuf should not be defined because it is unimplemented in libc++!" +# endif # endif # if !defined(_LIBCPP_VERSION) # ifndef __cpp_lib_three_way_comparison # error "__cpp_lib_three_way_comparison should be defined in c++2a" # endif -# if __cpp_lib_three_way_comparison != 201711L -# error "__cpp_lib_three_way_comparison should have the value 201711L in c++2a" +# if __cpp_lib_three_way_comparison != 201907L +# error "__cpp_lib_three_way_comparison should have the value 201907L in c++2a" # endif # else // _LIBCPP_VERSION # ifdef __cpp_lib_three_way_comparison @@ -2420,6 +3126,13 @@ # endif # endif +# ifndef __cpp_lib_to_address +# error "__cpp_lib_to_address should be defined in c++2a" +# endif +# if __cpp_lib_to_address != 201711L +# error "__cpp_lib_to_address should have the value 201711L in c++2a" +# endif + # ifndef __cpp_lib_to_array # error "__cpp_lib_to_array should be defined in c++2a" # endif @@ -2489,6 +3202,13 @@ # error "__cpp_lib_unordered_map_try_emplace should have the value 201411L in c++2a" # endif +# ifndef __cpp_lib_unwrap_ref +# error "__cpp_lib_unwrap_ref should be defined in c++2a" +# endif +# if __cpp_lib_unwrap_ref != 201811L +# error "__cpp_lib_unwrap_ref should have the value 201811L in c++2a" +# endif + # ifndef __cpp_lib_variant # error "__cpp_lib_variant should be defined in c++2a" # endif diff --git a/libcxx/utils/generate_feature_test_macro_components.py b/libcxx/utils/generate_feature_test_macro_components.py --- a/libcxx/utils/generate_feature_test_macro_components.py +++ b/libcxx/utils/generate_feature_test_macro_components.py @@ -31,463 +31,596 @@ tc["headers"].append("version") return tc -feature_test_macros = sorted([ add_version_header(x) for x in [ - # C++14 macros +feature_test_macros = [ add_version_header(x) for x in [ { - "name": "__cpp_lib_integer_sequence", - "values": { "c++14": int(201304) }, - "headers": ["utility"], - }, { - "name": "__cpp_lib_exchange_function", - "values": { "c++14": int(201304) }, - "headers": ["utility"], - }, { - "name": "__cpp_lib_tuples_by_type", - "values": { "c++14": int(201304) }, - "headers": ["utility", "tuple"], - }, { - "name": "__cpp_lib_tuple_element_t", - "values": { "c++14": int(201402) }, - "headers": ["tuple"], - }, { - "name": "__cpp_lib_make_unique", - "values": { "c++14": int(201304) }, - "headers": ["memory"], - }, { - "name": "__cpp_lib_transparent_operators", - "values": { "c++14": int(201210), "c++17": int(201510) }, - "headers": ["functional"], - }, { - "name": "__cpp_lib_integral_constant_callable", - "values": { "c++14": int(201304) }, - "headers": ["type_traits"], - }, { - "name": "__cpp_lib_transformation_trait_aliases", - "values": { "c++14": int(201304) }, - "headers": ["type_traits"] - }, { - "name": "__cpp_lib_result_of_sfinae", - "values": { "c++14": int(201210) }, - "headers": ["functional", "type_traits"] - }, { - "name": "__cpp_lib_is_final", - "values": { "c++14": int(201402) }, - "headers": ["type_traits"] - }, { - "name": "__cpp_lib_is_null_pointer", - "values": { "c++14": int(201309) }, - "headers": ["type_traits"] - }, { - "name": "__cpp_lib_chrono_udls", - "values": { "c++14": int(201304) }, - "headers": ["chrono"] - }, { - "name": "__cpp_lib_string_udls", - "values": { "c++14": int(201304) }, - "headers": ["string"] - }, { - "name": "__cpp_lib_generic_associative_lookup", - "values": { "c++14": int(201304) }, - "headers": ["map", "set"] - }, { - "name": "__cpp_lib_null_iterators", - "values": { "c++14": int(201304) }, - "headers": ["iterator"] - }, { - "name": "__cpp_lib_make_reverse_iterator", - "values": { "c++14": int(201402) }, - "headers": ["iterator"] - }, { - "name": "__cpp_lib_robust_nonmodifying_seq_ops", - "values": { "c++14": int(201304) }, - "headers": ["algorithm"] - }, { - "name": "__cpp_lib_complex_udls", - "values": { "c++14": int(201309) }, - "headers": ["complex"] - }, { - "name": "__cpp_lib_quoted_string_io", - "values": { "c++14": int(201304) }, - "headers": ["iomanip"] - }, { - "name": "__cpp_lib_shared_timed_mutex", - "values": { "c++14": int(201402) }, - "headers": ["shared_mutex"], - "depends": "!defined(_LIBCPP_HAS_NO_THREADS)", - "internal_depends": "!defined(_LIBCPP_HAS_NO_THREADS)", + 'name': '__cpp_lib_addressof_constexpr', + 'values': {'c++17': 201603}, + 'headers': ['memory'], + 'depends': 'TEST_HAS_BUILTIN(__builtin_addressof) || TEST_GCC_VER >= 700', + 'internal_depends': '!defined(_LIBCPP_HAS_NO_BUILTIN_ADDRESSOF)', + }, { + 'name': '__cpp_lib_allocator_traits_is_always_equal', + 'values': {'c++17': 201411}, + 'headers': ['deque', 'forward_list', 'list', 'map', 'memory', 'scoped_allocator', 'set', 'string', 'unordered_map', 'unordered_set', 'vector'], + }, { + 'name': '__cpp_lib_any', + 'values': {'c++17': 201606}, + 'headers': ['any'], + }, { + 'name': '__cpp_lib_apply', + 'values': {'c++17': 201603}, + 'headers': ['tuple'], + }, { + 'name': '__cpp_lib_array_constexpr', + 'values': {'c++17': 201603, 'c++2a': 201811}, + 'headers': ['array', 'iterator'], + }, { + 'name': '__cpp_lib_as_const', + 'values': {'c++17': 201510}, + 'headers': ['utility'], + }, { + 'name': '__cpp_lib_assume_aligned', + 'values': {'c++2a': 201811}, + 'headers': ['memory'], + 'unimplemented': True, + }, { + 'name': '__cpp_lib_atomic_flag_test', + 'values': {'c++2a': 201907}, + 'headers': ['atomic'], + 'depends': '!defined(_LIBCPP_HAS_NO_THREADS)', + 'internal_depends': '!defined(_LIBCPP_HAS_NO_THREADS)', + }, { + 'name': '__cpp_lib_atomic_float', + 'values': {'c++2a': 201711}, + 'headers': ['atomic'], + 'depends': '!defined(_LIBCPP_HAS_NO_THREADS)', + 'internal_depends': '!defined(_LIBCPP_HAS_NO_THREADS)', + 'unimplemented': True, + }, { + 'name': '__cpp_lib_atomic_is_always_lock_free', + 'values': {'c++17': 201603}, + 'headers': ['atomic'], + 'depends': '!defined(_LIBCPP_HAS_NO_THREADS)', + 'internal_depends': '!defined(_LIBCPP_HAS_NO_THREADS)', + }, { + 'name': '__cpp_lib_atomic_lock_free_type_aliases', + 'values': {'c++2a': 201907}, + 'headers': ['atomic'], + 'depends': '!defined(_LIBCPP_HAS_NO_THREADS)', + 'internal_depends': '!defined(_LIBCPP_HAS_NO_THREADS)', + }, { + 'name': '__cpp_lib_atomic_ref', + 'values': {'c++2a': 201806}, + 'headers': ['atomic'], + 'depends': '!defined(_LIBCPP_HAS_NO_THREADS)', + 'internal_depends': '!defined(_LIBCPP_HAS_NO_THREADS)', + 'unimplemented': True, + }, { + 'name': '__cpp_lib_atomic_shared_ptr', + 'values': {'c++2a': 201711}, + 'headers': ['atomic'], + 'depends': '!defined(_LIBCPP_HAS_NO_THREADS)', + 'internal_depends': '!defined(_LIBCPP_HAS_NO_THREADS)', + 'unimplemented': True, + }, { + 'name': '__cpp_lib_atomic_value_initialization', + 'values': {'c++2a': 201911}, + 'headers': ['atomic', 'memory'], + 'depends': '!defined(_LIBCPP_HAS_NO_THREADS)', + 'internal_depends': '!defined(_LIBCPP_HAS_NO_THREADS)', + 'unimplemented': True, + }, { + 'name': '__cpp_lib_atomic_wait', + 'values': {'c++2a': 201907}, + 'headers': ['atomic'], + 'depends': '!defined(_LIBCPP_HAS_NO_THREADS)', + 'internal_depends': '!defined(_LIBCPP_HAS_NO_THREADS)', + }, { + 'name': '__cpp_lib_barrier', + 'values': {'c++2a': 201907}, + 'headers': ['barrier'], + 'depends': '!defined(_LIBCPP_HAS_NO_THREADS)', + 'internal_depends': '!defined(_LIBCPP_HAS_NO_THREADS)', + }, { + 'name': '__cpp_lib_bind_front', + 'values': {'c++2a': 201907}, + 'headers': ['functional'], + 'unimplemented': True, + }, { + 'name': '__cpp_lib_bit_cast', + 'values': {'c++2a': 201806}, + 'headers': ['bit'], + 'unimplemented': True, + }, { + 'name': '__cpp_lib_bitops', + 'values': {'c++2a': 201907}, + 'headers': ['bit'], + 'unimplemented': True, + }, { + 'name': '__cpp_lib_bool_constant', + 'values': {'c++17': 201505}, + 'headers': ['type_traits'], + }, { + 'name': '__cpp_lib_bounded_array_traits', + 'values': {'c++2a': 201902}, + 'headers': ['type_traits'], + }, { + 'name': '__cpp_lib_boyer_moore_searcher', + 'values': {'c++17': 201603}, + 'headers': ['functional'], + 'unimplemented': True, + }, { + 'name': '__cpp_lib_byte', + 'values': {'c++17': 201603}, + 'headers': ['cstddef'], + }, { + 'name': '__cpp_lib_char8_t', + 'values': {'c++2a': 201811}, + 'headers': ['atomic', 'filesystem', 'istream', 'limits', 'locale', 'ostream', 'string', 'string_view'], + 'depends': 'defined(__cpp_char8_t)', + 'internal_depends': '!defined(_LIBCPP_NO_HAS_CHAR8_T)', + }, { + 'name': '__cpp_lib_chrono', + 'values': {'c++17': 201611}, + 'headers': ['chrono'], + }, { + 'name': '__cpp_lib_chrono_udls', + 'values': {'c++14': 201304}, + 'headers': ['chrono'], + }, { + 'name': '__cpp_lib_clamp', + 'values': {'c++17': 201603}, + 'headers': ['algorithm'], + }, { + 'name': '__cpp_lib_complex_udls', + 'values': {'c++14': 201309}, + 'headers': ['complex'], + }, { + 'name': '__cpp_lib_concepts', + 'values': {'c++2a': 202002}, + 'headers': ['concepts'], + 'unimplemented': True, + }, { + 'name': '__cpp_lib_constexpr_algorithms', + 'values': {'c++2a': 201806}, + 'headers': ['algorithm'], + 'unimplemented': True, + }, { + 'name': '__cpp_lib_constexpr_complex', + 'values': {'c++2a': 201711}, + 'headers': ['complex'], + 'unimplemented': True, + }, { + 'name': '__cpp_lib_constexpr_dynamic_alloc', + 'values': {'c++2a': 201907}, + 'headers': ['memory'], + }, { + 'name': '__cpp_lib_constexpr_functional', + 'values': {'c++2a': 201907}, + 'headers': ['functional'], + 'unimplemented': True, + }, { + 'name': '__cpp_lib_constexpr_iterator', + 'values': {'c++2a': 201811}, + 'headers': ['iterator'], + 'unimplemented': True, + }, { + 'name': '__cpp_lib_constexpr_memory', + 'values': {'c++2a': 201811}, + 'headers': ['memory'], + 'unimplemented': True, + }, { + 'name': '__cpp_lib_constexpr_numeric', + 'values': {'c++2a': 201911}, + 'headers': ['numeric'], + }, { + 'name': '__cpp_lib_constexpr_string', + 'values': {'c++2a': 201907}, + 'headers': ['string'], + 'unimplemented': True, + }, { + 'name': '__cpp_lib_constexpr_string_view', + 'values': {'c++2a': 201811}, + 'headers': ['string_view'], + 'unimplemented': True, + }, { + 'name': '__cpp_lib_constexpr_tuple', + 'values': {'c++2a': 201811}, + 'headers': ['tuple'], + 'unimplemented': True, + }, { + 'name': '__cpp_lib_constexpr_utility', + 'values': {'c++2a': 201811}, + 'headers': ['utility'], + }, { + 'name': '__cpp_lib_constexpr_vector', + 'values': {'c++2a': 201907}, + 'headers': ['vector'], + 'unimplemented': True, + }, { + 'name': '__cpp_lib_coroutine', + 'values': {'c++2a': 201902}, + 'headers': ['coroutine'], + 'unimplemented': True, + }, { + 'name': '__cpp_lib_destroying_delete', + 'values': {'c++2a': 201806}, + 'headers': ['new'], + 'depends': 'TEST_STD_VER > 17 && defined(__cpp_impl_destroying_delete) && __cpp_impl_destroying_delete >= 201806L', + 'internal_depends': '_LIBCPP_STD_VER > 17 && defined(__cpp_impl_destroying_delete) && __cpp_impl_destroying_delete >= 201806L', + }, { + 'name': '__cpp_lib_enable_shared_from_this', + 'values': {'c++17': 201603}, + 'headers': ['memory'], + }, { + 'name': '__cpp_lib_endian', + 'values': {'c++2a': 201907}, + 'headers': ['bit'], + }, { + 'name': '__cpp_lib_erase_if', + 'values': {'c++2a': 202002}, + 'headers': ['deque', 'forward_list', 'list', 'map', 'set', 'string', 'unordered_map', 'unordered_set', 'vector'], + }, { + 'name': '__cpp_lib_exchange_function', + 'values': {'c++14': 201304}, + 'headers': ['utility'], + }, { + 'name': '__cpp_lib_execution', + 'values': {'c++17': 201603, 'c++2a': 201902}, + 'headers': ['execution'], + 'unimplemented': True, + }, { + 'name': '__cpp_lib_filesystem', + 'values': {'c++17': 201703}, + 'headers': ['filesystem'], + }, { + 'name': '__cpp_lib_gcd_lcm', + 'values': {'c++17': 201606}, + 'headers': ['numeric'], + }, { + 'name': '__cpp_lib_generic_associative_lookup', + 'values': {'c++14': 201304}, + 'headers': ['map', 'set'], + }, { + 'name': '__cpp_lib_generic_unordered_lookup', + 'values': {'c++2a': 201811}, + 'headers': ['unordered_map', 'unordered_set'], + }, { + 'name': '__cpp_lib_hardware_interference_size', + 'values': {'c++17': 201703}, + 'headers': ['new'], + 'unimplemented': True, + }, { + 'name': '__cpp_lib_has_unique_object_representations', + 'values': {'c++17': 201606}, + 'headers': ['type_traits'], + 'depends': 'TEST_HAS_BUILTIN_IDENTIFIER(__has_unique_object_representations) || TEST_GCC_VER >= 700', + 'internal_depends': 'defined(_LIBCPP_HAS_UNIQUE_OBJECT_REPRESENTATIONS)', + }, { + 'name': '__cpp_lib_hypot', + 'values': {'c++17': 201603}, + 'headers': ['cmath'], + }, { + 'name': '__cpp_lib_incomplete_container_elements', + 'values': {'c++17': 201505}, + 'headers': ['forward_list', 'list', 'vector'], + }, { + 'name': '__cpp_lib_int_pow2', + 'values': {'c++2a': 202002}, + 'headers': ['bit'], + }, { + 'name': '__cpp_lib_integer_comparison_functions', + 'values': {'c++2a': 202002}, + 'headers': ['utility'], + 'unimplemented': True, + }, { + 'name': '__cpp_lib_integer_sequence', + 'values': {'c++14': 201304}, + 'headers': ['utility'], + }, { + 'name': '__cpp_lib_integral_constant_callable', + 'values': {'c++14': 201304}, + 'headers': ['type_traits'], + }, { + 'name': '__cpp_lib_interpolate', + 'values': {'c++2a': 201902}, + 'headers': ['cmath', 'numeric'], + }, { + 'name': '__cpp_lib_invoke', + 'values': {'c++17': 201411}, + 'headers': ['functional'], + }, { + 'name': '__cpp_lib_is_aggregate', + 'values': {'c++17': 201703}, + 'headers': ['type_traits'], + 'depends': 'TEST_HAS_BUILTIN_IDENTIFIER(__is_aggregate) || TEST_GCC_VER_NEW >= 7001', + 'internal_depends': '!defined(_LIBCPP_HAS_NO_IS_AGGREGATE)', + }, { + 'name': '__cpp_lib_is_constant_evaluated', + 'values': {'c++2a': 201811}, + 'headers': ['type_traits'], + 'depends': 'TEST_HAS_BUILTIN(__builtin_is_constant_evaluated) || TEST_GCC_VER >= 900', + 'internal_depends': '!defined(_LIBCPP_HAS_NO_BUILTIN_IS_CONSTANT_EVALUATED)', + }, { + 'name': '__cpp_lib_is_final', + 'values': {'c++14': 201402}, + 'headers': ['type_traits'], + }, { + 'name': '__cpp_lib_is_invocable', + 'values': {'c++17': 201703}, + 'headers': ['type_traits'], + }, { + 'name': '__cpp_lib_is_layout_compatible', + 'values': {'c++2a': 201907}, + 'headers': ['type_traits'], + 'unimplemented': True, + }, { + 'name': '__cpp_lib_is_nothrow_convertible', + 'values': {'c++2a': 201806}, + 'headers': ['type_traits'], + 'unimplemented': True, + }, { + 'name': '__cpp_lib_is_null_pointer', + 'values': {'c++14': 201309}, + 'headers': ['type_traits'], + }, { + 'name': '__cpp_lib_is_pointer_interconvertible', + 'values': {'c++2a': 201907}, + 'headers': ['type_traits'], + 'unimplemented': True, + }, { + 'name': '__cpp_lib_is_swappable', + 'values': {'c++17': 201603}, + 'headers': ['type_traits'], + }, { + 'name': '__cpp_lib_jthread', + 'values': {'c++2a': 201911}, + 'headers': ['stop_token', 'thread'], + 'depends': '!defined(_LIBCPP_HAS_NO_THREADS)', + 'internal_depends': '!defined(_LIBCPP_HAS_NO_THREADS)', + 'unimplemented': True, + }, { + 'name': '__cpp_lib_latch', + 'values': {'c++2a': 201907}, + 'headers': ['latch'], + 'depends': '!defined(_LIBCPP_HAS_NO_THREADS)', + 'internal_depends': '!defined(_LIBCPP_HAS_NO_THREADS)', + }, { + 'name': '__cpp_lib_launder', + 'values': {'c++17': 201606}, + 'headers': ['new'], + }, { + 'name': '__cpp_lib_list_remove_return_type', + 'values': {'c++2a': 201806}, + 'headers': ['forward_list', 'list'], + }, { + 'name': '__cpp_lib_logical_traits', + 'values': {'c++17': 201510}, + 'headers': ['type_traits'], + }, { + 'name': '__cpp_lib_make_from_tuple', + 'values': {'c++17': 201606}, + 'headers': ['tuple'], + }, { + 'name': '__cpp_lib_make_reverse_iterator', + 'values': {'c++14': 201402}, + 'headers': ['iterator'], + }, { + 'name': '__cpp_lib_make_unique', + 'values': {'c++14': 201304}, + 'headers': ['memory'], + }, { + 'name': '__cpp_lib_map_try_emplace', + 'values': {'c++17': 201411}, + 'headers': ['map'], + }, { + 'name': '__cpp_lib_math_constants', + 'values': {'c++2a': 201907}, + 'headers': ['numbers'], + 'depends': 'defined(__cpp_concepts) && __cpp_concepts >= 201811L', + 'internal_depends': 'defined(__cpp_concepts) && __cpp_concepts >= 201811L', + }, { + 'name': '__cpp_lib_math_special_functions', + 'values': {'c++17': 201603}, + 'headers': ['cmath'], + 'unimplemented': True, + }, { + 'name': '__cpp_lib_memory_resource', + 'values': {'c++17': 201603}, + 'headers': ['memory_resource'], + 'unimplemented': True, + }, { + 'name': '__cpp_lib_node_extract', + 'values': {'c++17': 201606}, + 'headers': ['map', 'set', 'unordered_map', 'unordered_set'], + }, { + 'name': '__cpp_lib_nonmember_container_access', + 'values': {'c++17': 201411}, + 'headers': ['array', 'deque', 'forward_list', 'iterator', 'list', 'map', 'regex', 'set', 'string', 'unordered_map', 'unordered_set', 'vector'], + }, { + 'name': '__cpp_lib_not_fn', + 'values': {'c++17': 201603}, + 'headers': ['functional'], + }, { + 'name': '__cpp_lib_null_iterators', + 'values': {'c++14': 201304}, + 'headers': ['iterator'], + }, { + 'name': '__cpp_lib_optional', + 'values': {'c++17': 201606}, + 'headers': ['optional'], + }, { + 'name': '__cpp_lib_parallel_algorithm', + 'values': {'c++17': 201603}, + 'headers': ['algorithm', 'numeric'], + 'unimplemented': True, + }, { + 'name': '__cpp_lib_polymorphic_allocator', + 'values': {'c++2a': 201902}, + 'headers': ['memory'], + 'unimplemented': True, + }, { + 'name': '__cpp_lib_quoted_string_io', + 'values': {'c++14': 201304}, + 'headers': ['iomanip'], + }, { + 'name': '__cpp_lib_ranges', + 'values': {'c++2a': 201811}, + 'headers': ['algorithm', 'functional', 'iterator', 'memory', 'ranges'], + 'unimplemented': True, + }, { + 'name': '__cpp_lib_raw_memory_algorithms', + 'values': {'c++17': 201606}, + 'headers': ['memory'], + }, { + 'name': '__cpp_lib_remove_cvref', + 'values': {'c++2a': 201711}, + 'headers': ['type_traits'], + }, { + 'name': '__cpp_lib_result_of_sfinae', + 'values': {'c++14': 201210}, + 'headers': ['functional', 'type_traits'], + }, { + 'name': '__cpp_lib_robust_nonmodifying_seq_ops', + 'values': {'c++14': 201304}, + 'headers': ['algorithm'], + }, { + 'name': '__cpp_lib_sample', + 'values': {'c++17': 201603}, + 'headers': ['algorithm'], + }, { + 'name': '__cpp_lib_scoped_lock', + 'values': {'c++17': 201703}, + 'headers': ['mutex'], + }, { + 'name': '__cpp_lib_semaphore', + 'values': {'c++2a': 201907}, + 'headers': ['semaphore'], + 'depends': '!defined(_LIBCPP_HAS_NO_THREADS)', + 'internal_depends': '!defined(_LIBCPP_HAS_NO_THREADS)', + }, { + 'name': '__cpp_lib_shared_mutex', + 'values': {'c++17': 201505}, + 'headers': ['shared_mutex'], + 'depends': '!defined(_LIBCPP_HAS_NO_THREADS)', + 'internal_depends': '!defined(_LIBCPP_HAS_NO_THREADS)', + }, { + 'name': '__cpp_lib_shared_ptr_arrays', + 'values': {'c++17': 201611}, # C++20: 201707 for make_shared + 'headers': ['memory'], + }, { + 'name': '__cpp_lib_shared_ptr_weak_type', + 'values': {'c++17': 201606}, + 'headers': ['memory'], + }, { + 'name': '__cpp_lib_shared_timed_mutex', + 'values': {'c++14': 201402}, + 'headers': ['shared_mutex'], + 'depends': '!defined(_LIBCPP_HAS_NO_THREADS)', + 'internal_depends': '!defined(_LIBCPP_HAS_NO_THREADS)', + }, { + 'name': '__cpp_lib_shift', + 'values': {'c++2a': 201806}, + 'headers': ['algorithm'], + 'unimplemented': True, + }, { + 'name': '__cpp_lib_smart_ptr_for_overwrite', + 'values': {'c++2a': 202002}, + 'headers': ['memory'], + 'unimplemented': True, + }, { + 'name': '__cpp_lib_source_location', + 'values': {'c++2a': 201907}, + 'headers': ['source_location'], + 'unimplemented': True, + }, { + 'name': '__cpp_lib_span', + 'values': {'c++2a': 202002}, + 'headers': ['span'], + }, { + 'name': '__cpp_lib_ssize', + 'values': {'c++2a': 201902}, + 'headers': ['iterator'], + }, { + 'name': '__cpp_lib_starts_ends_with', + 'values': {'c++2a': 201711}, + 'headers': ['string', 'string_view'], + }, { + 'name': '__cpp_lib_string_udls', + 'values': {'c++14': 201304}, + 'headers': ['string'], + }, { + 'name': '__cpp_lib_string_view', + 'values': {'c++17': 201606, 'c++2a': 201803}, + 'headers': ['string', 'string_view'], + }, { + 'name': '__cpp_lib_syncbuf', + 'values': {'c++2a': 201803}, + 'headers': ['syncstream'], + 'unimplemented': True, + }, { + 'name': '__cpp_lib_three_way_comparison', + 'values': {'c++2a': 201907}, + 'headers': ['compare'], + 'unimplemented': True, + }, { + 'name': '__cpp_lib_to_address', + 'values': {'c++2a': 201711}, + 'headers': ['memory'], + }, { + 'name': '__cpp_lib_to_array', + 'values': {'c++2a': 201907}, + 'headers': ['array'], + }, { + 'name': '__cpp_lib_to_chars', + 'values': {'c++17': 201611}, + 'headers': ['utility'], + 'unimplemented': True, + }, { + 'name': '__cpp_lib_transformation_trait_aliases', + 'values': {'c++14': 201304}, + 'headers': ['type_traits'], + }, { + 'name': '__cpp_lib_transparent_operators', + 'values': {'c++14': 201210, 'c++17': 201510}, + 'headers': ['functional', 'memory'], + }, { + 'name': '__cpp_lib_tuple_element_t', + 'values': {'c++14': 201402}, + 'headers': ['tuple'], + }, { + 'name': '__cpp_lib_tuples_by_type', + 'values': {'c++14': 201304}, + 'headers': ['tuple', 'utility'], + }, { + 'name': '__cpp_lib_type_trait_variable_templates', + 'values': {'c++17': 201510}, + 'headers': ['type_traits'], + }, { + 'name': '__cpp_lib_uncaught_exceptions', + 'values': {'c++17': 201411}, + 'headers': ['exception'], + }, { + 'name': '__cpp_lib_unordered_map_try_emplace', + 'values': {'c++17': 201411}, + 'headers': ['unordered_map'], + }, { + 'name': '__cpp_lib_unwrap_ref', + 'values': {'c++2a': 201811}, + 'headers': ['functional'], + }, { + 'name': '__cpp_lib_variant', + 'values': {'c++17': 201606}, + 'headers': ['variant'], + }, { + 'name': '__cpp_lib_void_t', + 'values': {'c++17': 201411}, + 'headers': ['type_traits'], }, - # C++17 macros - { - "name": "__cpp_lib_atomic_is_always_lock_free", - "values": { "c++17": int(201603) }, - "headers": ["atomic"], - "depends": "!defined(_LIBCPP_HAS_NO_THREADS)", - "internal_depends": "!defined(_LIBCPP_HAS_NO_THREADS)", - }, { - "name": "__cpp_lib_filesystem", - "values": { "c++17": int(201703) }, - "headers": ["filesystem"] - }, { - "name": "__cpp_lib_invoke", - "values": { "c++17": int(201411) }, - "headers": ["functional"] - }, { - "name": "__cpp_lib_void_t", - "values": { "c++17": int(201411) }, - "headers": ["type_traits"] - }, { - "name": "__cpp_lib_node_extract", - "values": { "c++17": int(201606) }, - "headers": ["map", "set", "unordered_map", "unordered_set"] - }, { - "name": "__cpp_lib_byte", - "values": { "c++17": int(201603) }, - "headers": ["cstddef"], - }, { - "name": "__cpp_lib_hardware_interference_size", - "values": { "c++17": int(201703) }, - "headers": ["new"], - "unimplemented": True, - }, { - "name": "__cpp_lib_launder", - "values": { "c++17": int(201606) }, - "headers": ["new"], - }, { - "name": "__cpp_lib_uncaught_exceptions", - "values": { "c++17": int(201411) }, - "headers": ["exception"], - }, { - "name": "__cpp_lib_as_const", - "values": { "c++17": int(201510) }, - "headers": ["utility"], - }, { - "name": "__cpp_lib_make_from_tuple", - "values": { "c++17": int(201606) }, - "headers": ["tuple"], - }, { - "name": "__cpp_lib_apply", - "values": { "c++17": int(201603) }, - "headers": ["tuple"], - }, { - "name": "__cpp_lib_optional", - "values": { "c++17": int(201606) }, - "headers": ["optional"], - }, { - "name": "__cpp_lib_variant", - "values": { "c++17": int(201606) }, - "headers": ["variant"], - }, { - "name": "__cpp_lib_any", - "values": { "c++17": int(201606) }, - "headers": ["any"], - }, { - "name": "__cpp_lib_addressof_constexpr", - "values": { "c++17": int(201603) }, - "headers": ["memory"], - "depends": "TEST_HAS_BUILTIN(__builtin_addressof) || TEST_GCC_VER >= 700", - "internal_depends": "!defined(_LIBCPP_HAS_NO_BUILTIN_ADDRESSOF)", - }, { - "name": "__cpp_lib_raw_memory_algorithms", - "values": { "c++17": int(201606) }, - "headers": ["memory"], - }, { - "name": "__cpp_lib_enable_shared_from_this", - "values": { "c++17": int(201603) }, - "headers": ["memory"], - }, { - "name": "__cpp_lib_shared_ptr_weak_type", - "values": { "c++17": int(201606) }, - "headers": ["memory"], - }, { - "name": "__cpp_lib_shared_ptr_arrays", - "values": { "c++17": int(201611) }, # "c++20": int(201707) # Enable this when we support arrays in std::make_shared - "headers": ["memory"], - }, { - "name": "__cpp_lib_memory_resource", - "values": { "c++17": int(201603) }, - "headers": ["memory_resource"], - "unimplemented": True, - }, { - "name": "__cpp_lib_boyer_moore_searcher", - "values": { "c++17": int(201603) }, - "headers": ["functional"], - "unimplemented": True, - }, { - "name": "__cpp_lib_not_fn", - "values": { "c++17": int(201603) }, - "headers": ["functional"], - }, { - "name": "__cpp_lib_bool_constant", - "values": { "c++17": int(201505) }, - "headers": ["type_traits"], - }, { - "name": "__cpp_lib_type_trait_variable_templates", - "values": { "c++17": int(201510) }, - "headers": ["type_traits"], - }, { - "name": "__cpp_lib_logical_traits", - "values": { "c++17": int(201510) }, - "headers": ["type_traits"], - }, { - "name": "__cpp_lib_is_swappable", - "values": { "c++17": int(201603) }, - "headers": ["type_traits"], - }, { - "name": "__cpp_lib_is_invocable", - "values": { "c++17": int(201703) }, - "headers": ["type_traits"], - }, { - "name": "__cpp_lib_has_unique_object_representations", - "values": { "c++17": int(201606) }, - "headers": ["type_traits"], - "depends": "TEST_HAS_BUILTIN_IDENTIFIER(__has_unique_object_representations) || TEST_GCC_VER >= 700", - "internal_depends": "defined(_LIBCPP_HAS_UNIQUE_OBJECT_REPRESENTATIONS)", - }, { - "name": "__cpp_lib_is_aggregate", - "values": { "c++17": int(201703) }, - "headers": ["type_traits"], - "depends": "TEST_HAS_BUILTIN_IDENTIFIER(__is_aggregate) || TEST_GCC_VER_NEW >= 7001", - "internal_depends": "!defined(_LIBCPP_HAS_NO_IS_AGGREGATE)", - }, { - "name": "__cpp_lib_chrono", - "values": { "c++17": int(201611) }, - "headers": ["chrono"], - }, { - "name": "__cpp_lib_execution", - "values": { "c++17": int(201603) }, - "headers": ["execution"], - "unimplemented": True - }, { - "name": "__cpp_lib_parallel_algorithm", - "values": { "c++17": int(201603) }, - "headers": ["algorithm", "numeric"], - "unimplemented": True, - }, { - "name": "__cpp_lib_to_chars", - "values": { "c++17": int(201611) }, - "headers": ["utility"], - "unimplemented": True, - }, { - "name": "__cpp_lib_string_view", - "values": { "c++17": int(201606) }, - "headers": ["string", "string_view"], - }, { - "name": "__cpp_lib_allocator_traits_is_always_equal", - "values": { "c++17": int(201411) }, - "headers": ["memory", "scoped_allocator", "string", "deque", "forward_list", "list", "vector", "map", "set", "unordered_map", "unordered_set"], - }, { - "name": "__cpp_lib_incomplete_container_elements", - "values": { "c++17": int(201505) }, - "headers": ["forward_list", "list", "vector"], - }, { - "name": "__cpp_lib_map_try_emplace", - "values": { "c++17": int(201411) }, - "headers": ["map"], - }, { - "name": "__cpp_lib_unordered_map_try_emplace", - "values": { "c++17": int(201411) }, - "headers": ["unordered_map"], - }, { - "name": "__cpp_lib_array_constexpr", - "values": { "c++17": int(201603), "c++2a": int(201811) }, - "headers": ["iterator", "array"], - }, { - "name": "__cpp_lib_nonmember_container_access", - "values": { "c++17": int(201411) }, - "headers": ["iterator", "array", "deque", "forward_list", "list", "map", "regex", - "set", "string", "unordered_map", "unordered_set", "vector"], - }, { - "name": "__cpp_lib_sample", - "values": { "c++17": int(201603) }, - "headers": ["algorithm"], - }, { - "name": "__cpp_lib_clamp", - "values": { "c++17": int(201603) }, - "headers": ["algorithm"], - }, { - "name": "__cpp_lib_gcd_lcm", - "values": { "c++17": int(201606) }, - "headers": ["numeric"], - }, { - "name": "__cpp_lib_hypot", - "values": { "c++17": int(201603) }, - "headers": ["cmath"], - }, { - "name": "__cpp_lib_math_special_functions", - "values": { "c++17": int(201603) }, - "headers": ["cmath"], - "unimplemented": True, - }, { - "name": "__cpp_lib_shared_mutex", - "values": { "c++17": int(201505) }, - "headers": ["shared_mutex"], - "depends": "!defined(_LIBCPP_HAS_NO_THREADS)", - "internal_depends": "!defined(_LIBCPP_HAS_NO_THREADS)", - }, { - "name": "__cpp_lib_scoped_lock", - "values": { "c++17": int(201703) }, - "headers": ["mutex"], - }, - # C++2a - { - "name": "__cpp_lib_char8_t", - "values": { "c++2a": int(201811) }, - "headers": ["atomic", "filesystem", "istream", "limits", "locale", "ostream", - "string", "string_view"], - "depends": "defined(__cpp_char8_t)", - "internal_depends": "!defined(_LIBCPP_NO_HAS_CHAR8_T)", - }, { - "name": "__cpp_lib_erase_if", - "values": { "c++2a": int(202002) }, - "headers": ["string", "deque", "forward_list", "list", "vector", "map", - "set", "unordered_map", "unordered_set"] - }, { - "name": "__cpp_lib_destroying_delete", - "values": { "c++2a": int(201806) }, - "headers": ["new"], - "depends": - "TEST_STD_VER > 17" - " && defined(__cpp_impl_destroying_delete)" - " && __cpp_impl_destroying_delete >= 201806L", - "internal_depends": - "_LIBCPP_STD_VER > 17" - " && defined(__cpp_impl_destroying_delete)" - " && __cpp_impl_destroying_delete >= 201806L", - }, { - "name": "__cpp_lib_three_way_comparison", - "values": { "c++2a": int(201711) }, - "headers": ["compare"], - "unimplemented": True, - }, { - "name": "__cpp_lib_concepts", - "values": { "c++2a": int(201806) }, - "headers": ["concepts"], - "unimplemented": True, - }, { - "name": "__cpp_lib_constexpr_swap_algorithms", - "values": { "c++2a": int(201806) }, - "headers": ["algorithm"], - "unimplemented": True, - }, { - "name": "__cpp_lib_constexpr_misc", - "values": { "c++2a": int(201811) }, - "headers": ["array", "functional", "iterator", "string_view", "tuple", "utility"], - "unimplemented": True, - }, { - "name": "__cpp_lib_constexpr_numeric", - "values": { "c++2a": int(201911) }, - "headers": ["numeric"], - }, { - "name": "__cpp_lib_bind_front", - "values": { "c++2a": int(201811) }, - "headers": ["functional"], - "unimplemented": True, - }, { - "name": "__cpp_lib_is_constant_evaluated", - "values": { "c++2a": int(201811) }, - "headers": ["type_traits"], - "depends": "TEST_HAS_BUILTIN(__builtin_is_constant_evaluated) || TEST_GCC_VER >= 900", - "internal_depends": "!defined(_LIBCPP_HAS_NO_BUILTIN_IS_CONSTANT_EVALUATED)", - }, { - "name": "__cpp_lib_list_remove_return_type", - "values": { "c++2a": int(201806) }, - "headers": ["forward_list", "list"], - }, { - "name": "__cpp_lib_generic_unordered_lookup", - "values": { "c++2a": int(201811) }, - "headers": ["unordered_map", "unordered_set"], - }, { - "name": "__cpp_lib_ranges", - "values": { "c++2a": int(201811) }, - "headers": ["algorithm", "functional", "iterator", "memory", "ranges"], - "unimplemented": True, - }, { - "name": "__cpp_lib_bit_cast", - "values": { "c++2a": int(201806) }, - "headers": ["bit"], - "unimplemented": True, - }, { - "name": "__cpp_lib_atomic_ref", - "values": { "c++2a": int(201806) }, - "headers": ["atomic"], - "unimplemented": True, - "depends": "!defined(_LIBCPP_HAS_NO_THREADS)", - "internal_depends": "!defined(_LIBCPP_HAS_NO_THREADS)", - }, { - "name": "__cpp_lib_int_pow2", - "values": { "c++2a": int(202002) }, - "headers": ["bit"], - }, { - "name": "__cpp_lib_interpolate", - "values": { "c++2a": int(201902) }, - "headers": ["numeric"], - }, { - "name": "__cpp_lib_endian", - "values": { "c++2a": int(201907) }, - "headers": ["bit"], - }, { - "name": "__cpp_lib_to_array", - "values": { "c++2a": int(201907) }, - "headers": ["array"], - }, { - "name": "__cpp_lib_span", - "values": { "c++2a": int(202002) }, - "headers": ["span"], - }, { - "name": "__cpp_lib_math_constants", - "values": { "c++2a": int(201907) }, - "headers": ["numbers"], - "depends": "defined(__cpp_concepts) && __cpp_concepts >= 201811L", - "internal_depends": "defined(__cpp_concepts) && __cpp_concepts >= 201811L", - }, { - "name": "__cpp_lib_constexpr_utility", - "values": { "c++2a": int(201811) }, - "headers": ["utility"], - }, { - "name": "__cpp_lib_atomic_flag_test", - "values": { "c++2a": int(201907) }, - "headers": ["atomic"], - "depends": "!defined(_LIBCPP_HAS_NO_THREADS)", - "internal_depends": "!defined(_LIBCPP_HAS_NO_THREADS)", - }, { - "name": "__cpp_lib_atomic_lock_free_type_aliases", - "values": { "c++2a": int(201907) }, - "headers": ["atomic"], - "depends": "!defined(_LIBCPP_HAS_NO_THREADS)", - "internal_depends": "!defined(_LIBCPP_HAS_NO_THREADS)", - }, { - "name": "__cpp_lib_atomic_wait", - "values": { "c++2a": int(201907) }, - "headers": ["atomic"], - "depends": "!defined(_LIBCPP_HAS_NO_THREADS)", - "internal_depends": "!defined(_LIBCPP_HAS_NO_THREADS)", - }, { - "name": "__cpp_lib_atomic_float", - "values": { "c++2a": int(201711) }, - "headers": ["atomic"], - "unimplemented": True, - "depends": "!defined(_LIBCPP_HAS_NO_THREADS)", - "internal_depends": "!defined(_LIBCPP_HAS_NO_THREADS)", - }, { - "name": "__cpp_lib_atomic_shared_ptr", - "values": { "c++2a": int(201711) }, - "headers": ["atomic"], - "unimplemented": True, - "depends": "!defined(_LIBCPP_HAS_NO_THREADS)", - "internal_depends": "!defined(_LIBCPP_HAS_NO_THREADS)", - }, { - "name": "__cpp_lib_atomic_value_initialization", - "values": { "c++2a": int(201911) }, - "headers": ["atomic", "memory"], - "unimplemented": True, - "depends": "!defined(_LIBCPP_HAS_NO_THREADS)", - "internal_depends": "!defined(_LIBCPP_HAS_NO_THREADS)", - }, { - "name": "__cpp_lib_constexpr_dynamic_alloc", - "values": { "c++2a": int(201907) }, - "headers": ["memory"] - }, -]], key=lambda tc: tc["name"]) +]] + +assert feature_test_macros == sorted(feature_test_macros, key=lambda tc: tc["name"]) +assert all(tc["headers"] == sorted(tc["headers"]) for tc in feature_test_macros) # Map from each header to the Lit annotations that should be used for # tests that include that header. @@ -497,13 +630,13 @@ # is a hard error in that case. lit_markup = { "atomic": ["UNSUPPORTED: libcpp-has-no-threads"], - "shared_mutex": ["UNSUPPORTED: libcpp-has-no-threads"], - "thread": ["UNSUPPORTED: libcpp-has-no-threads"], "iomanip": ["UNSUPPORTED: libcpp-has-no-localization"], "istream": ["UNSUPPORTED: libcpp-has-no-localization"], "locale": ["UNSUPPORTED: libcpp-has-no-localization"], "ostream": ["UNSUPPORTED: libcpp-has-no-localization"], "regex": ["UNSUPPORTED: libcpp-has-no-localization"], + "shared_mutex": ["UNSUPPORTED: libcpp-has-no-threads"], + "thread": ["UNSUPPORTED: libcpp-has-no-threads"], } def get_std_dialects(): @@ -657,7 +790,7 @@ #endif #if _LIBCPP_STD_VER > 17 -{cxx2a_macros} +{cxx20_macros} #endif #endif // _LIBCPP_VERSIONH @@ -667,7 +800,7 @@ synopsis=produce_version_synopsis().strip(), cxx14_macros=produce_macros_definition_for_std('c++14').strip(), cxx17_macros=produce_macros_definition_for_std('c++17').strip(), - cxx2a_macros=produce_macros_definition_for_std('c++2a').strip()) + cxx20_macros=produce_macros_definition_for_std('c++2a').strip()) version_header_path = os.path.join(include_path, 'version') with open(version_header_path, 'w', newline='\n') as f: @@ -801,7 +934,7 @@ #elif TEST_STD_VER > 17 -{cxx2a_tests} +{cxx20_tests} #endif // TEST_STD_VER > 17 @@ -813,7 +946,7 @@ cxx11_tests=generate_std_test(test_list, 'c++11').strip(), cxx14_tests=generate_std_test(test_list, 'c++14').strip(), cxx17_tests=generate_std_test(test_list, 'c++17').strip(), - cxx2a_tests=generate_std_test(test_list, 'c++2a').strip()) + cxx20_tests=generate_std_test(test_list, 'c++2a').strip()) test_name = "{header}.version.pass.cpp".format(header=h) out_path = os.path.join(macro_test_path, test_name) with open(out_path, 'w', newline='\n') as f: