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_functional`` ``201907L`` + ``__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`` ``201806L`` + ------------------------------------------------- ----------------- + ``__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 @@ -24,6 +24,7 @@ __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,12 +48,20 @@ __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_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 @@ -57,7 +69,8 @@ __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 @@ -67,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 @@ -97,32 +116,44 @@ __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_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 @@ -225,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 @@ -246,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_functional 201907L +// # 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++20] + __cpp_lib_constexpr_algorithms 201806L [C++20] __cpp_lib_parallel_algorithm 201603L [C++17] __cpp_lib_ranges 201811L [C++20] __cpp_lib_robust_nonmodifying_seq_ops 201304L [C++14] __cpp_lib_sample 201603L [C++17] + __cpp_lib_shift 201806L [C++20] */ #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++20" +# ifdef __cpp_lib_constexpr_algorithms +# error "__cpp_lib_constexpr_algorithms should not be defined before c++20" # 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++20" +# 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++20" +# ifdef __cpp_lib_constexpr_algorithms +# error "__cpp_lib_constexpr_algorithms should not be defined before c++20" # 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++20" +# 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++20" +# ifdef __cpp_lib_constexpr_algorithms +# error "__cpp_lib_constexpr_algorithms should not be defined before c++20" # 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++20" +# endif + #elif TEST_STD_VER == 20 # 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++20" +# ifndef __cpp_lib_constexpr_algorithms +# error "__cpp_lib_constexpr_algorithms should be defined in c++20" # endif -# if __cpp_lib_constexpr_swap_algorithms != 201806L -# error "__cpp_lib_constexpr_swap_algorithms should have the value 201806L in c++20" +# if __cpp_lib_constexpr_algorithms != 201806L +# error "__cpp_lib_constexpr_algorithms should have the value 201806L in c++20" # 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++20" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_shift +# error "__cpp_lib_shift should be defined in c++20" +# endif +# if __cpp_lib_shift != 201806L +# error "__cpp_lib_shift should have the value 201806L in c++20" +# 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 == 20 int main(int, char**) { return 0; } 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++20] +*/ + +#include +#include "test_macros.h" + +#if TEST_STD_VER < 14 + +# ifdef __cpp_lib_barrier +# error "__cpp_lib_barrier should not be defined before c++20" +# endif + +#elif TEST_STD_VER == 14 + +# ifdef __cpp_lib_barrier +# error "__cpp_lib_barrier should not be defined before c++20" +# endif + +#elif TEST_STD_VER == 17 + +# ifdef __cpp_lib_barrier +# error "__cpp_lib_barrier should not be defined before c++20" +# endif + +#elif TEST_STD_VER == 20 + +# if !defined(_LIBCPP_HAS_NO_THREADS) +# ifndef __cpp_lib_barrier +# error "__cpp_lib_barrier should be defined in c++20" +# endif +# if __cpp_lib_barrier != 201907L +# error "__cpp_lib_barrier should have the value 201907L in c++20" +# 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 == 20 + +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++20] + __cpp_lib_bitops 201907L [C++20] __cpp_lib_endian 201907L [C++20] __cpp_lib_int_pow2 202002L [C++20] */ @@ -28,6 +29,10 @@ # error "__cpp_lib_bit_cast should not be defined before c++20" # endif +# ifdef __cpp_lib_bitops +# error "__cpp_lib_bitops should not be defined before c++20" +# endif + # ifdef __cpp_lib_endian # error "__cpp_lib_endian should not be defined before c++20" # endif @@ -42,6 +47,10 @@ # error "__cpp_lib_bit_cast should not be defined before c++20" # endif +# ifdef __cpp_lib_bitops +# error "__cpp_lib_bitops should not be defined before c++20" +# endif + # ifdef __cpp_lib_endian # error "__cpp_lib_endian should not be defined before c++20" # endif @@ -56,6 +65,10 @@ # error "__cpp_lib_bit_cast should not be defined before c++20" # endif +# ifdef __cpp_lib_bitops +# error "__cpp_lib_bitops should not be defined before c++20" +# endif + # ifdef __cpp_lib_endian # error "__cpp_lib_endian should not be defined before c++20" # endif @@ -79,6 +92,19 @@ # endif # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_bitops +# error "__cpp_lib_bitops should be defined in c++20" +# endif +# if __cpp_lib_bitops != 201907L +# error "__cpp_lib_bitops should have the value 201907L in c++20" +# 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++20" # 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++20] __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++20" +# 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++20" +# 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++20" +# 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++20" # endif +# ifndef __cpp_lib_interpolate +# error "__cpp_lib_interpolate should be defined in c++20" +# endif +# if __cpp_lib_interpolate != 201902L +# error "__cpp_lib_interpolate should have the value 201902L in c++20" +# endif + # if !defined(_LIBCPP_VERSION) # ifndef __cpp_lib_math_special_functions # error "__cpp_lib_math_special_functions should be defined in c++20" 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++20] + __cpp_lib_three_way_comparison 201907L [C++20] */ #include @@ -44,8 +44,8 @@ # ifndef __cpp_lib_three_way_comparison # error "__cpp_lib_three_way_comparison should be defined in c++20" # endif -# if __cpp_lib_three_way_comparison != 201711L -# error "__cpp_lib_three_way_comparison should have the value 201711L in c++20" +# if __cpp_lib_three_way_comparison != 201907L +# error "__cpp_lib_three_way_comparison should have the value 201907L in c++20" # 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++20] */ #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++20" +# 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++20" +# 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++20" +# endif + #elif TEST_STD_VER == 20 # ifndef __cpp_lib_complex_udls @@ -53,6 +66,19 @@ # error "__cpp_lib_complex_udls should have the value 201309L in c++20" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_constexpr_complex +# error "__cpp_lib_constexpr_complex should be defined in c++20" +# endif +# if __cpp_lib_constexpr_complex != 201711L +# error "__cpp_lib_constexpr_complex should have the value 201711L in c++20" +# 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 == 20 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++20] + __cpp_lib_concepts 202002L [C++20] */ #include @@ -44,8 +44,8 @@ # ifndef __cpp_lib_concepts # error "__cpp_lib_concepts should be defined in c++20" # endif -# if __cpp_lib_concepts != 201806L -# error "__cpp_lib_concepts should have the value 201806L in c++20" +# if __cpp_lib_concepts != 202002L +# error "__cpp_lib_concepts should have the value 202002L in c++20" # 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++20] */ #include @@ -53,8 +54,8 @@ # ifndef __cpp_lib_execution # error "__cpp_lib_execution should be defined in c++20" # endif -# if __cpp_lib_execution != 201603L -# error "__cpp_lib_execution should have the value 201603L in c++20" +# if __cpp_lib_execution != 201902L +# error "__cpp_lib_execution should have the value 201902L in c++20" # 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,7 +14,7 @@ // Test the feature test macros defined by /* Constant Value - __cpp_lib_bind_front 201811L [C++20] + __cpp_lib_bind_front 201907L [C++20] __cpp_lib_boyer_moore_searcher 201603L [C++17] __cpp_lib_constexpr_functional 201907L [C++20] __cpp_lib_invoke 201411L [C++17] @@ -23,6 +23,7 @@ __cpp_lib_result_of_sfinae 201210L [C++14] __cpp_lib_transparent_operators 201210L [C++14] 201510L [C++17] + __cpp_lib_unwrap_ref 201811L [C++20] */ #include @@ -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++20" +# endif + #elif TEST_STD_VER == 14 # ifdef __cpp_lib_bind_front @@ -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++20" +# endif + #elif TEST_STD_VER == 17 # ifdef __cpp_lib_bind_front @@ -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++20" +# endif + #elif TEST_STD_VER == 20 # if !defined(_LIBCPP_VERSION) # ifndef __cpp_lib_bind_front # error "__cpp_lib_bind_front should be defined in c++20" # endif -# if __cpp_lib_bind_front != 201811L -# error "__cpp_lib_bind_front should have the value 201811L in c++20" +# if __cpp_lib_bind_front != 201907L +# error "__cpp_lib_bind_front should have the value 201907L in c++20" # endif # else // _LIBCPP_VERSION # ifdef __cpp_lib_bind_front @@ -185,11 +198,17 @@ # endif # endif -# ifndef __cpp_lib_constexpr_functional -# error "__cpp_lib_constexpr_functional should be defined in c++20" -# endif -# if __cpp_lib_constexpr_functional != 201907L -# error "__cpp_lib_constexpr_functional should have the value 201907L in c++20" +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_constexpr_functional +# error "__cpp_lib_constexpr_functional should be defined in c++20" +# endif +# if __cpp_lib_constexpr_functional != 201907L +# error "__cpp_lib_constexpr_functional should have the value 201907L in c++20" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_constexpr_functional +# error "__cpp_lib_constexpr_functional should not be defined because it is unimplemented in libc++!" +# endif # endif # ifndef __cpp_lib_invoke @@ -233,6 +252,13 @@ # error "__cpp_lib_transparent_operators should have the value 201510L in c++20" # endif +# ifndef __cpp_lib_unwrap_ref +# error "__cpp_lib_unwrap_ref should be defined in c++20" +# endif +# if __cpp_lib_unwrap_ref != 201811L +# error "__cpp_lib_unwrap_ref should have the value 201811L in c++20" +# endif + #endif // TEST_STD_VER == 20 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,10 +16,12 @@ /* Constant Value __cpp_lib_array_constexpr 201603L [C++17] 201811L [C++20] + __cpp_lib_constexpr_iterator 201811L [C++20] __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++20] + __cpp_lib_ssize 201902L [C++20] */ #include @@ -31,6 +33,10 @@ # error "__cpp_lib_array_constexpr should not be defined before c++17" # endif +# ifdef __cpp_lib_constexpr_iterator +# error "__cpp_lib_constexpr_iterator should not be defined before c++20" +# endif + # ifdef __cpp_lib_make_reverse_iterator # error "__cpp_lib_make_reverse_iterator should not be defined before c++14" # endif @@ -47,12 +53,20 @@ # error "__cpp_lib_ranges should not be defined before c++20" # endif +# ifdef __cpp_lib_ssize +# error "__cpp_lib_ssize should not be defined before c++20" +# 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_iterator +# error "__cpp_lib_constexpr_iterator should not be defined before c++20" +# endif + # ifndef __cpp_lib_make_reverse_iterator # error "__cpp_lib_make_reverse_iterator should be defined in c++14" # endif @@ -75,6 +89,10 @@ # error "__cpp_lib_ranges should not be defined before c++20" # endif +# ifdef __cpp_lib_ssize +# error "__cpp_lib_ssize should not be defined before c++20" +# endif + #elif TEST_STD_VER == 17 # ifndef __cpp_lib_array_constexpr @@ -84,6 +102,10 @@ # error "__cpp_lib_array_constexpr should have the value 201603L in c++17" # endif +# ifdef __cpp_lib_constexpr_iterator +# error "__cpp_lib_constexpr_iterator should not be defined before c++20" +# endif + # ifndef __cpp_lib_make_reverse_iterator # error "__cpp_lib_make_reverse_iterator should be defined in c++17" # endif @@ -109,6 +131,10 @@ # error "__cpp_lib_ranges should not be defined before c++20" # endif +# ifdef __cpp_lib_ssize +# error "__cpp_lib_ssize should not be defined before c++20" +# endif + #elif TEST_STD_VER == 20 # ifndef __cpp_lib_array_constexpr @@ -118,6 +144,19 @@ # error "__cpp_lib_array_constexpr should have the value 201811L in c++20" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_constexpr_iterator +# error "__cpp_lib_constexpr_iterator should be defined in c++20" +# endif +# if __cpp_lib_constexpr_iterator != 201811L +# error "__cpp_lib_constexpr_iterator should have the value 201811L in c++20" +# 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 + # ifndef __cpp_lib_make_reverse_iterator # error "__cpp_lib_make_reverse_iterator should be defined in c++20" # endif @@ -152,6 +191,13 @@ # endif # endif +# ifndef __cpp_lib_ssize +# error "__cpp_lib_ssize should be defined in c++20" +# endif +# if __cpp_lib_ssize != 201902L +# error "__cpp_lib_ssize should have the value 201902L in c++20" +# endif + #endif // TEST_STD_VER == 20 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++20] +*/ + +#include +#include "test_macros.h" + +#if TEST_STD_VER < 14 + +# ifdef __cpp_lib_latch +# error "__cpp_lib_latch should not be defined before c++20" +# endif + +#elif TEST_STD_VER == 14 + +# ifdef __cpp_lib_latch +# error "__cpp_lib_latch should not be defined before c++20" +# endif + +#elif TEST_STD_VER == 17 + +# ifdef __cpp_lib_latch +# error "__cpp_lib_latch should not be defined before c++20" +# endif + +#elif TEST_STD_VER == 20 + +# if !defined(_LIBCPP_HAS_NO_THREADS) +# ifndef __cpp_lib_latch +# error "__cpp_lib_latch should be defined in c++20" +# endif +# if __cpp_lib_latch != 201907L +# error "__cpp_lib_latch should have the value 201907L in c++20" +# 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 == 20 + +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++20] __cpp_lib_atomic_value_initialization 201911L [C++20] __cpp_lib_constexpr_dynamic_alloc 201907L [C++20] + __cpp_lib_constexpr_memory 201811L [C++20] __cpp_lib_enable_shared_from_this 201603L [C++17] __cpp_lib_make_unique 201304L [C++14] + __cpp_lib_polymorphic_allocator 201902L [C++20] __cpp_lib_ranges 201811L [C++20] __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++20] + __cpp_lib_to_address 201711L [C++20] + __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++20" +# endif + # ifdef __cpp_lib_atomic_value_initialization # error "__cpp_lib_atomic_value_initialization should not be defined before c++20" # endif @@ -47,6 +58,10 @@ # error "__cpp_lib_constexpr_dynamic_alloc should not be defined before c++20" # endif +# ifdef __cpp_lib_constexpr_memory +# error "__cpp_lib_constexpr_memory should not be defined before c++20" +# 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++20" +# endif + # ifdef __cpp_lib_ranges # error "__cpp_lib_ranges should not be defined before c++20" # 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++20" +# endif + +# ifdef __cpp_lib_to_address +# error "__cpp_lib_to_address should not be defined before c++20" +# 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++20" +# endif + # ifdef __cpp_lib_atomic_value_initialization # error "__cpp_lib_atomic_value_initialization should not be defined before c++20" # endif @@ -89,6 +124,10 @@ # error "__cpp_lib_constexpr_dynamic_alloc should not be defined before c++20" # endif +# ifdef __cpp_lib_constexpr_memory +# error "__cpp_lib_constexpr_memory should not be defined before c++20" +# 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++20" +# endif + # ifdef __cpp_lib_ranges # error "__cpp_lib_ranges should not be defined before c++20" # 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++20" +# endif + +# ifdef __cpp_lib_to_address +# error "__cpp_lib_to_address should not be defined before c++20" +# 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++20" +# endif + # ifdef __cpp_lib_atomic_value_initialization # error "__cpp_lib_atomic_value_initialization should not be defined before c++20" # endif @@ -146,6 +208,10 @@ # error "__cpp_lib_constexpr_dynamic_alloc should not be defined before c++20" # endif +# ifdef __cpp_lib_constexpr_memory +# error "__cpp_lib_constexpr_memory should not be defined before c++20" +# 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++20" +# endif + # ifdef __cpp_lib_ranges # error "__cpp_lib_ranges should not be defined before c++20" # 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++20" +# endif + +# ifdef __cpp_lib_to_address +# error "__cpp_lib_to_address should not be defined before c++20" +# 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 == 20 # 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++20" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_assume_aligned +# error "__cpp_lib_assume_aligned should be defined in c++20" +# endif +# if __cpp_lib_assume_aligned != 201811L +# error "__cpp_lib_assume_aligned should have the value 201811L in c++20" +# 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++20" @@ -227,6 +325,19 @@ # error "__cpp_lib_constexpr_dynamic_alloc should have the value 201907L in c++20" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_constexpr_memory +# error "__cpp_lib_constexpr_memory should be defined in c++20" +# endif +# if __cpp_lib_constexpr_memory != 201811L +# error "__cpp_lib_constexpr_memory should have the value 201811L in c++20" +# 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++20" # endif @@ -241,6 +352,19 @@ # error "__cpp_lib_make_unique should have the value 201304L in c++20" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_polymorphic_allocator +# error "__cpp_lib_polymorphic_allocator should be defined in c++20" +# endif +# if __cpp_lib_polymorphic_allocator != 201902L +# error "__cpp_lib_polymorphic_allocator should have the value 201902L in c++20" +# 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++20" @@ -275,6 +399,33 @@ # error "__cpp_lib_shared_ptr_weak_type should have the value 201606L in c++20" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_smart_ptr_for_overwrite +# error "__cpp_lib_smart_ptr_for_overwrite should be defined in c++20" +# endif +# if __cpp_lib_smart_ptr_for_overwrite != 202002L +# error "__cpp_lib_smart_ptr_for_overwrite should have the value 202002L in c++20" +# 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++20" +# endif +# if __cpp_lib_to_address != 201711L +# error "__cpp_lib_to_address should have the value 201711L in c++20" +# endif + +# ifndef __cpp_lib_transparent_operators +# error "__cpp_lib_transparent_operators should be defined in c++20" +# endif +# if __cpp_lib_transparent_operators != 201510L +# error "__cpp_lib_transparent_operators should have the value 201510L in c++20" +# endif + #endif // TEST_STD_VER == 20 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++20] +*/ + +#include +#include "test_macros.h" + +#if TEST_STD_VER < 14 + +# ifdef __cpp_lib_semaphore +# error "__cpp_lib_semaphore should not be defined before c++20" +# endif + +#elif TEST_STD_VER == 14 + +# ifdef __cpp_lib_semaphore +# error "__cpp_lib_semaphore should not be defined before c++20" +# endif + +#elif TEST_STD_VER == 17 + +# ifdef __cpp_lib_semaphore +# error "__cpp_lib_semaphore should not be defined before c++20" +# endif + +#elif TEST_STD_VER == 20 + +# if !defined(_LIBCPP_HAS_NO_THREADS) +# ifndef __cpp_lib_semaphore +# error "__cpp_lib_semaphore should be defined in c++20" +# endif +# if __cpp_lib_semaphore != 201907L +# error "__cpp_lib_semaphore should have the value 201907L in c++20" +# 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 == 20 + +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++20] + __cpp_lib_constexpr_string 201907L [C++20] __cpp_lib_erase_if 202002L [C++20] __cpp_lib_nonmember_container_access 201411L [C++17] + __cpp_lib_starts_ends_with 201711L [C++20] __cpp_lib_string_udls 201304L [C++14] __cpp_lib_string_view 201606L [C++17] + 201803L [C++20] */ #include @@ -35,6 +38,10 @@ # error "__cpp_lib_char8_t should not be defined before c++20" # endif +# ifdef __cpp_lib_constexpr_string +# error "__cpp_lib_constexpr_string should not be defined before c++20" +# endif + # ifdef __cpp_lib_erase_if # error "__cpp_lib_erase_if should not be defined before c++20" # 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++20" +# 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++20" # endif +# ifdef __cpp_lib_constexpr_string +# error "__cpp_lib_constexpr_string should not be defined before c++20" +# endif + # ifdef __cpp_lib_erase_if # error "__cpp_lib_erase_if should not be defined before c++20" # 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++20" +# 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++20" # endif +# ifdef __cpp_lib_constexpr_string +# error "__cpp_lib_constexpr_string should not be defined before c++20" +# endif + # ifdef __cpp_lib_erase_if # error "__cpp_lib_erase_if should not be defined before c++20" # 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++20" +# 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++20" +# endif +# if __cpp_lib_constexpr_string != 201907L +# error "__cpp_lib_constexpr_string should have the value 201907L in c++20" +# 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++20" # endif @@ -154,6 +194,13 @@ # error "__cpp_lib_nonmember_container_access should have the value 201411L in c++20" # endif +# ifndef __cpp_lib_starts_ends_with +# error "__cpp_lib_starts_ends_with should be defined in c++20" +# endif +# if __cpp_lib_starts_ends_with != 201711L +# error "__cpp_lib_starts_ends_with should have the value 201711L in c++20" +# endif + # ifndef __cpp_lib_string_udls # error "__cpp_lib_string_udls should be defined in c++20" # endif @@ -164,8 +211,8 @@ # ifndef __cpp_lib_string_view # error "__cpp_lib_string_view should be defined in c++20" # endif -# if __cpp_lib_string_view != 201606L -# error "__cpp_lib_string_view should have the value 201606L in c++20" +# if __cpp_lib_string_view != 201803L +# error "__cpp_lib_string_view should have the value 201803L in c++20" # endif #endif // TEST_STD_VER == 20 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,9 +13,12 @@ // Test the feature test macros defined by -/* Constant Value - __cpp_lib_char8_t 201811L [C++20] - __cpp_lib_string_view 201606L [C++17] +/* Constant Value + __cpp_lib_char8_t 201811L [C++20] + __cpp_lib_constexpr_string_view 201811L [C++20] + __cpp_lib_starts_ends_with 201711L [C++20] + __cpp_lib_string_view 201606L [C++17] + 201803L [C++20] */ #include @@ -27,6 +30,14 @@ # error "__cpp_lib_char8_t should not be defined before c++20" # endif +# ifdef __cpp_lib_constexpr_string_view +# error "__cpp_lib_constexpr_string_view should not be defined before c++20" +# endif + +# ifdef __cpp_lib_starts_ends_with +# error "__cpp_lib_starts_ends_with should not be defined before c++20" +# endif + # ifdef __cpp_lib_string_view # error "__cpp_lib_string_view should not be defined before c++17" # endif @@ -37,6 +48,14 @@ # error "__cpp_lib_char8_t should not be defined before c++20" # endif +# ifdef __cpp_lib_constexpr_string_view +# error "__cpp_lib_constexpr_string_view should not be defined before c++20" +# endif + +# ifdef __cpp_lib_starts_ends_with +# error "__cpp_lib_starts_ends_with should not be defined before c++20" +# endif + # ifdef __cpp_lib_string_view # error "__cpp_lib_string_view should not be defined before c++17" # endif @@ -47,6 +66,14 @@ # error "__cpp_lib_char8_t should not be defined before c++20" # endif +# ifdef __cpp_lib_constexpr_string_view +# error "__cpp_lib_constexpr_string_view should not be defined before c++20" +# endif + +# ifdef __cpp_lib_starts_ends_with +# error "__cpp_lib_starts_ends_with should not be defined before c++20" +# endif + # ifndef __cpp_lib_string_view # error "__cpp_lib_string_view should be defined in c++17" # endif @@ -69,11 +96,31 @@ # endif # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_constexpr_string_view +# error "__cpp_lib_constexpr_string_view should be defined in c++20" +# endif +# if __cpp_lib_constexpr_string_view != 201811L +# error "__cpp_lib_constexpr_string_view should have the value 201811L in c++20" +# 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 + +# ifndef __cpp_lib_starts_ends_with +# error "__cpp_lib_starts_ends_with should be defined in c++20" +# endif +# if __cpp_lib_starts_ends_with != 201711L +# error "__cpp_lib_starts_ends_with should have the value 201711L in c++20" +# endif + # ifndef __cpp_lib_string_view # error "__cpp_lib_string_view should be defined in c++20" # endif -# if __cpp_lib_string_view != 201606L -# error "__cpp_lib_string_view should have the value 201606L in c++20" +# if __cpp_lib_string_view != 201803L +# error "__cpp_lib_string_view should have the value 201803L in c++20" # endif #endif // TEST_STD_VER == 20 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++20] +*/ + +#include +#include "test_macros.h" + +#if TEST_STD_VER < 14 + +# ifdef __cpp_lib_jthread +# error "__cpp_lib_jthread should not be defined before c++20" +# endif + +#elif TEST_STD_VER == 14 + +# ifdef __cpp_lib_jthread +# error "__cpp_lib_jthread should not be defined before c++20" +# endif + +#elif TEST_STD_VER == 17 + +# ifdef __cpp_lib_jthread +# error "__cpp_lib_jthread should not be defined before c++20" +# endif + +#elif TEST_STD_VER == 20 + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_jthread +# error "__cpp_lib_jthread should be defined in c++20" +# endif +# if __cpp_lib_jthread != 201911L +# error "__cpp_lib_jthread should have the value 201911L in c++20" +# 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 == 20 + +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,6 +15,7 @@ /* Constant Value __cpp_lib_apply 201603L [C++17] + __cpp_lib_constexpr_tuple 201811L [C++20] __cpp_lib_make_from_tuple 201606L [C++17] __cpp_lib_tuple_element_t 201402L [C++14] __cpp_lib_tuples_by_type 201304L [C++14] @@ -29,6 +30,10 @@ # error "__cpp_lib_apply should not be defined before c++17" # endif +# ifdef __cpp_lib_constexpr_tuple +# error "__cpp_lib_constexpr_tuple should not be defined before c++20" +# endif + # ifdef __cpp_lib_make_from_tuple # error "__cpp_lib_make_from_tuple should not be defined before c++17" # endif @@ -47,6 +52,10 @@ # error "__cpp_lib_apply should not be defined before c++17" # endif +# ifdef __cpp_lib_constexpr_tuple +# error "__cpp_lib_constexpr_tuple should not be defined before c++20" +# endif + # ifdef __cpp_lib_make_from_tuple # error "__cpp_lib_make_from_tuple should not be defined before c++17" # endif @@ -74,6 +83,10 @@ # error "__cpp_lib_apply should have the value 201603L in c++17" # endif +# ifdef __cpp_lib_constexpr_tuple +# error "__cpp_lib_constexpr_tuple should not be defined before c++20" +# endif + # ifndef __cpp_lib_make_from_tuple # error "__cpp_lib_make_from_tuple should be defined in c++17" # endif @@ -104,6 +117,19 @@ # error "__cpp_lib_apply should have the value 201603L in c++20" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_constexpr_tuple +# error "__cpp_lib_constexpr_tuple should be defined in c++20" +# endif +# if __cpp_lib_constexpr_tuple != 201811L +# error "__cpp_lib_constexpr_tuple should have the value 201811L in c++20" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_constexpr_tuple +# error "__cpp_lib_constexpr_tuple should not be defined because it is unimplemented in libc++!" +# endif +# endif + # ifndef __cpp_lib_make_from_tuple # error "__cpp_lib_make_from_tuple should be defined in c++20" # 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++20] __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++20] __cpp_lib_is_final 201402L [C++14] __cpp_lib_is_invocable 201703L [C++17] + __cpp_lib_is_layout_compatible 201907L [C++20] + __cpp_lib_is_nothrow_convertible 201806L [C++20] __cpp_lib_is_null_pointer 201309L [C++14] + __cpp_lib_is_pointer_interconvertible 201907L [C++20] __cpp_lib_is_swappable 201603L [C++17] __cpp_lib_logical_traits 201510L [C++17] + __cpp_lib_remove_cvref 201711L [C++20] __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++20" +# 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++20" +# endif + +# ifdef __cpp_lib_is_nothrow_convertible +# error "__cpp_lib_is_nothrow_convertible should not be defined before c++20" +# 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++20" +# 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++20" +# 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++20" +# 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++20" +# endif + +# ifdef __cpp_lib_is_nothrow_convertible +# error "__cpp_lib_is_nothrow_convertible should not be defined before c++20" +# 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++20" +# 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++20" +# 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++20" +# 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++20" +# endif + +# ifdef __cpp_lib_is_nothrow_convertible +# error "__cpp_lib_is_nothrow_convertible should not be defined before c++20" +# 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++20" +# 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++20" +# 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++20" # endif +# ifndef __cpp_lib_bounded_array_traits +# error "__cpp_lib_bounded_array_traits should be defined in c++20" +# endif +# if __cpp_lib_bounded_array_traits != 201902L +# error "__cpp_lib_bounded_array_traits should have the value 201902L in c++20" +# 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++20" @@ -342,6 +414,26 @@ # error "__cpp_lib_is_invocable should have the value 201703L in c++20" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_is_layout_compatible +# error "__cpp_lib_is_layout_compatible should be defined in c++20" +# endif +# if __cpp_lib_is_layout_compatible != 201907L +# error "__cpp_lib_is_layout_compatible should have the value 201907L in c++20" +# 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 + +# ifndef __cpp_lib_is_nothrow_convertible +# error "__cpp_lib_is_nothrow_convertible should be defined in c++20" +# endif +# if __cpp_lib_is_nothrow_convertible != 201806L +# error "__cpp_lib_is_nothrow_convertible should have the value 201806L in c++20" +# endif + # ifndef __cpp_lib_is_null_pointer # error "__cpp_lib_is_null_pointer should be defined in c++20" # endif @@ -349,6 +441,19 @@ # error "__cpp_lib_is_null_pointer should have the value 201309L in c++20" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_is_pointer_interconvertible +# error "__cpp_lib_is_pointer_interconvertible should be defined in c++20" +# endif +# if __cpp_lib_is_pointer_interconvertible != 201907L +# error "__cpp_lib_is_pointer_interconvertible should have the value 201907L in c++20" +# 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++20" # endif @@ -363,6 +468,13 @@ # error "__cpp_lib_logical_traits should have the value 201510L in c++20" # endif +# ifndef __cpp_lib_remove_cvref +# error "__cpp_lib_remove_cvref should be defined in c++20" +# endif +# if __cpp_lib_remove_cvref != 201711L +# error "__cpp_lib_remove_cvref should have the value 201711L in c++20" +# endif + # ifndef __cpp_lib_result_of_sfinae # error "__cpp_lib_result_of_sfinae should be defined in c++20" # 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,13 +13,14 @@ // Test the feature test macros defined by -/* Constant Value - __cpp_lib_as_const 201510L [C++17] - __cpp_lib_constexpr_utility 201811L [C++20] - __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++20] + __cpp_lib_exchange_function 201304L [C++14] + __cpp_lib_integer_comparison_functions 202002L [C++20] + __cpp_lib_integer_sequence 201304L [C++14] + __cpp_lib_to_chars 201611L [C++17] + __cpp_lib_tuples_by_type 201304L [C++14] */ #include @@ -39,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++20" +# endif + # ifdef __cpp_lib_integer_sequence # error "__cpp_lib_integer_sequence should not be defined before c++14" # endif @@ -68,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++20" +# endif + # ifndef __cpp_lib_integer_sequence # error "__cpp_lib_integer_sequence should be defined in c++14" # endif @@ -106,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++20" +# endif + # ifndef __cpp_lib_integer_sequence # error "__cpp_lib_integer_sequence should be defined in c++17" # endif @@ -156,6 +169,19 @@ # error "__cpp_lib_exchange_function should have the value 201304L in c++20" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_integer_comparison_functions +# error "__cpp_lib_integer_comparison_functions should be defined in c++20" +# endif +# if __cpp_lib_integer_comparison_functions != 202002L +# error "__cpp_lib_integer_comparison_functions should have the value 202002L in c++20" +# 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++20" # 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++20] __cpp_lib_erase_if 202002L [C++20] __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++20" +# endif + # ifdef __cpp_lib_erase_if # error "__cpp_lib_erase_if should not be defined before c++20" # 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++20" +# endif + # ifdef __cpp_lib_erase_if # error "__cpp_lib_erase_if should not be defined before c++20" # 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++20" +# endif + # ifdef __cpp_lib_erase_if # error "__cpp_lib_erase_if should not be defined before c++20" # endif @@ -95,6 +108,19 @@ # error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++20" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_constexpr_vector +# error "__cpp_lib_constexpr_vector should be defined in c++20" +# endif +# if __cpp_lib_constexpr_vector != 201907L +# error "__cpp_lib_constexpr_vector should have the value 201907L in c++20" +# 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++20" # 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++20] __cpp_lib_as_const 201510L [C++17] + __cpp_lib_assume_aligned 201811L [C++20] __cpp_lib_atomic_flag_test 201907L [C++20] __cpp_lib_atomic_float 201711L [C++20] __cpp_lib_atomic_is_always_lock_free 201603L [C++17] @@ -29,9 +30,12 @@ __cpp_lib_atomic_shared_ptr 201711L [C++20] __cpp_lib_atomic_value_initialization 201911L [C++20] __cpp_lib_atomic_wait 201907L [C++20] - __cpp_lib_bind_front 201811L [C++20] + __cpp_lib_barrier 201907L [C++20] + __cpp_lib_bind_front 201907L [C++20] __cpp_lib_bit_cast 201806L [C++20] + __cpp_lib_bitops 201907L [C++20] __cpp_lib_bool_constant 201505L [C++17] + __cpp_lib_bounded_array_traits 201902L [C++20] __cpp_lib_boyer_moore_searcher 201603L [C++17] __cpp_lib_byte 201603L [C++17] __cpp_lib_char8_t 201811L [C++20] @@ -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++20] + __cpp_lib_concepts 202002L [C++20] + __cpp_lib_constexpr_algorithms 201806L [C++20] + __cpp_lib_constexpr_complex 201711L [C++20] __cpp_lib_constexpr_dynamic_alloc 201907L [C++20] __cpp_lib_constexpr_functional 201907L [C++20] + __cpp_lib_constexpr_iterator 201811L [C++20] + __cpp_lib_constexpr_memory 201811L [C++20] __cpp_lib_constexpr_numeric 201911L [C++20] - __cpp_lib_constexpr_swap_algorithms 201806L [C++20] + __cpp_lib_constexpr_string 201907L [C++20] + __cpp_lib_constexpr_string_view 201811L [C++20] + __cpp_lib_constexpr_tuple 201811L [C++20] __cpp_lib_constexpr_utility 201811L [C++20] + __cpp_lib_constexpr_vector 201907L [C++20] + __cpp_lib_coroutine 201902L [C++20] __cpp_lib_destroying_delete 201806L [C++20] __cpp_lib_enable_shared_from_this 201603L [C++17] __cpp_lib_endian 201907L [C++20] __cpp_lib_erase_if 202002L [C++20] __cpp_lib_exchange_function 201304L [C++14] __cpp_lib_execution 201603L [C++17] + 201902L [C++20] __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++20] + __cpp_lib_integer_comparison_functions 202002L [C++20] __cpp_lib_integer_sequence 201304L [C++14] __cpp_lib_integral_constant_callable 201304L [C++14] __cpp_lib_interpolate 201902L [C++20] @@ -68,8 +82,13 @@ __cpp_lib_is_constant_evaluated 201811L [C++20] __cpp_lib_is_final 201402L [C++14] __cpp_lib_is_invocable 201703L [C++17] + __cpp_lib_is_layout_compatible 201907L [C++20] + __cpp_lib_is_nothrow_convertible 201806L [C++20] __cpp_lib_is_null_pointer 201309L [C++14] + __cpp_lib_is_pointer_interconvertible 201907L [C++20] __cpp_lib_is_swappable 201603L [C++17] + __cpp_lib_jthread 201911L [C++20] + __cpp_lib_latch 201907L [C++20] __cpp_lib_launder 201606L [C++17] __cpp_lib_list_remove_return_type 201806L [C++20] __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++20] __cpp_lib_quoted_string_io 201304L [C++14] __cpp_lib_ranges 201811L [C++20] __cpp_lib_raw_memory_algorithms 201606L [C++17] + __cpp_lib_remove_cvref 201711L [C++20] __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++20] __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++20] + __cpp_lib_smart_ptr_for_overwrite 202002L [C++20] + __cpp_lib_source_location 201907L [C++20] __cpp_lib_span 202002L [C++20] + __cpp_lib_ssize 201902L [C++20] + __cpp_lib_starts_ends_with 201711L [C++20] __cpp_lib_string_udls 201304L [C++14] __cpp_lib_string_view 201606L [C++17] - __cpp_lib_three_way_comparison 201711L [C++20] + 201803L [C++20] + __cpp_lib_syncbuf 201803L [C++20] + __cpp_lib_three_way_comparison 201907L [C++20] + __cpp_lib_to_address 201711L [C++20] __cpp_lib_to_array 201907L [C++20] __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++20] __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++20" +# endif + # ifdef __cpp_lib_atomic_flag_test # error "__cpp_lib_atomic_flag_test should not be defined before c++20" # endif @@ -176,6 +211,10 @@ # error "__cpp_lib_atomic_wait should not be defined before c++20" # endif +# ifdef __cpp_lib_barrier +# error "__cpp_lib_barrier should not be defined before c++20" +# endif + # ifdef __cpp_lib_bind_front # error "__cpp_lib_bind_front should not be defined before c++20" # endif @@ -184,10 +223,18 @@ # error "__cpp_lib_bit_cast should not be defined before c++20" # endif +# ifdef __cpp_lib_bitops +# error "__cpp_lib_bitops should not be defined before c++20" +# 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++20" +# endif + # ifdef __cpp_lib_boyer_moore_searcher # error "__cpp_lib_boyer_moore_searcher should not be defined before c++17" # endif @@ -220,6 +267,14 @@ # error "__cpp_lib_concepts should not be defined before c++20" # endif +# ifdef __cpp_lib_constexpr_algorithms +# error "__cpp_lib_constexpr_algorithms should not be defined before c++20" +# endif + +# ifdef __cpp_lib_constexpr_complex +# error "__cpp_lib_constexpr_complex should not be defined before c++20" +# endif + # ifdef __cpp_lib_constexpr_dynamic_alloc # error "__cpp_lib_constexpr_dynamic_alloc should not be defined before c++20" # endif @@ -228,18 +283,42 @@ # error "__cpp_lib_constexpr_functional should not be defined before c++20" # endif +# ifdef __cpp_lib_constexpr_iterator +# error "__cpp_lib_constexpr_iterator should not be defined before c++20" +# endif + +# ifdef __cpp_lib_constexpr_memory +# error "__cpp_lib_constexpr_memory should not be defined before c++20" +# endif + # ifdef __cpp_lib_constexpr_numeric # error "__cpp_lib_constexpr_numeric should not be defined before c++20" # endif -# ifdef __cpp_lib_constexpr_swap_algorithms -# error "__cpp_lib_constexpr_swap_algorithms should not be defined before c++20" +# ifdef __cpp_lib_constexpr_string +# error "__cpp_lib_constexpr_string should not be defined before c++20" +# endif + +# ifdef __cpp_lib_constexpr_string_view +# error "__cpp_lib_constexpr_string_view should not be defined before c++20" +# endif + +# ifdef __cpp_lib_constexpr_tuple +# error "__cpp_lib_constexpr_tuple should not be defined before c++20" # endif # ifdef __cpp_lib_constexpr_utility # error "__cpp_lib_constexpr_utility should not be defined before c++20" # endif +# ifdef __cpp_lib_constexpr_vector +# error "__cpp_lib_constexpr_vector should not be defined before c++20" +# endif + +# ifdef __cpp_lib_coroutine +# error "__cpp_lib_coroutine should not be defined before c++20" +# endif + # ifdef __cpp_lib_destroying_delete # error "__cpp_lib_destroying_delete should not be defined before c++20" # endif @@ -300,6 +379,10 @@ # error "__cpp_lib_int_pow2 should not be defined before c++20" # endif +# ifdef __cpp_lib_integer_comparison_functions +# error "__cpp_lib_integer_comparison_functions should not be defined before c++20" +# 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++20" +# endif + +# ifdef __cpp_lib_is_nothrow_convertible +# error "__cpp_lib_is_nothrow_convertible should not be defined before c++20" +# 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++20" +# 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++20" +# endif + +# ifdef __cpp_lib_latch +# error "__cpp_lib_latch should not be defined before c++20" +# 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++20" +# 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++20" +# 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++20" +# 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++20" +# endif + +# ifdef __cpp_lib_smart_ptr_for_overwrite +# error "__cpp_lib_smart_ptr_for_overwrite should not be defined before c++20" +# endif + +# ifdef __cpp_lib_source_location +# error "__cpp_lib_source_location should not be defined before c++20" +# endif + # ifdef __cpp_lib_span # error "__cpp_lib_span should not be defined before c++20" # endif +# ifdef __cpp_lib_ssize +# error "__cpp_lib_ssize should not be defined before c++20" +# endif + +# ifdef __cpp_lib_starts_ends_with +# error "__cpp_lib_starts_ends_with should not be defined before c++20" +# 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++20" +# endif + # ifdef __cpp_lib_three_way_comparison # error "__cpp_lib_three_way_comparison should not be defined before c++20" # endif +# ifdef __cpp_lib_to_address +# error "__cpp_lib_to_address should not be defined before c++20" +# endif + # ifdef __cpp_lib_to_array # error "__cpp_lib_to_array should not be defined before c++20" # 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++20" +# 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++20" +# endif + # ifdef __cpp_lib_atomic_flag_test # error "__cpp_lib_atomic_flag_test should not be defined before c++20" # endif @@ -566,6 +717,10 @@ # error "__cpp_lib_atomic_wait should not be defined before c++20" # endif +# ifdef __cpp_lib_barrier +# error "__cpp_lib_barrier should not be defined before c++20" +# endif + # ifdef __cpp_lib_bind_front # error "__cpp_lib_bind_front should not be defined before c++20" # endif @@ -574,10 +729,18 @@ # error "__cpp_lib_bit_cast should not be defined before c++20" # endif +# ifdef __cpp_lib_bitops +# error "__cpp_lib_bitops should not be defined before c++20" +# 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++20" +# endif + # ifdef __cpp_lib_boyer_moore_searcher # error "__cpp_lib_boyer_moore_searcher should not be defined before c++17" # endif @@ -616,6 +779,14 @@ # error "__cpp_lib_concepts should not be defined before c++20" # endif +# ifdef __cpp_lib_constexpr_algorithms +# error "__cpp_lib_constexpr_algorithms should not be defined before c++20" +# endif + +# ifdef __cpp_lib_constexpr_complex +# error "__cpp_lib_constexpr_complex should not be defined before c++20" +# endif + # ifdef __cpp_lib_constexpr_dynamic_alloc # error "__cpp_lib_constexpr_dynamic_alloc should not be defined before c++20" # endif @@ -624,18 +795,42 @@ # error "__cpp_lib_constexpr_functional should not be defined before c++20" # endif +# ifdef __cpp_lib_constexpr_iterator +# error "__cpp_lib_constexpr_iterator should not be defined before c++20" +# endif + +# ifdef __cpp_lib_constexpr_memory +# error "__cpp_lib_constexpr_memory should not be defined before c++20" +# endif + # ifdef __cpp_lib_constexpr_numeric # error "__cpp_lib_constexpr_numeric should not be defined before c++20" # endif -# ifdef __cpp_lib_constexpr_swap_algorithms -# error "__cpp_lib_constexpr_swap_algorithms should not be defined before c++20" +# ifdef __cpp_lib_constexpr_string +# error "__cpp_lib_constexpr_string should not be defined before c++20" +# endif + +# ifdef __cpp_lib_constexpr_string_view +# error "__cpp_lib_constexpr_string_view should not be defined before c++20" +# endif + +# ifdef __cpp_lib_constexpr_tuple +# error "__cpp_lib_constexpr_tuple should not be defined before c++20" # endif # ifdef __cpp_lib_constexpr_utility # error "__cpp_lib_constexpr_utility should not be defined before c++20" # endif +# ifdef __cpp_lib_constexpr_vector +# error "__cpp_lib_constexpr_vector should not be defined before c++20" +# endif + +# ifdef __cpp_lib_coroutine +# error "__cpp_lib_coroutine should not be defined before c++20" +# endif + # ifdef __cpp_lib_destroying_delete # error "__cpp_lib_destroying_delete should not be defined before c++20" # endif @@ -702,6 +897,10 @@ # error "__cpp_lib_int_pow2 should not be defined before c++20" # endif +# ifdef __cpp_lib_integer_comparison_functions +# error "__cpp_lib_integer_comparison_functions should not be defined before c++20" +# 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++20" +# endif + +# ifdef __cpp_lib_is_nothrow_convertible +# error "__cpp_lib_is_nothrow_convertible should not be defined before c++20" +# 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++20" +# 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++20" +# endif + +# ifdef __cpp_lib_latch +# error "__cpp_lib_latch should not be defined before c++20" +# 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++20" +# 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++20" +# 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++20" +# 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++20" +# endif + +# ifdef __cpp_lib_smart_ptr_for_overwrite +# error "__cpp_lib_smart_ptr_for_overwrite should not be defined before c++20" +# endif + +# ifdef __cpp_lib_source_location +# error "__cpp_lib_source_location should not be defined before c++20" +# endif + # ifdef __cpp_lib_span # error "__cpp_lib_span should not be defined before c++20" # endif +# ifdef __cpp_lib_ssize +# error "__cpp_lib_ssize should not be defined before c++20" +# endif + +# ifdef __cpp_lib_starts_ends_with +# error "__cpp_lib_starts_ends_with should not be defined before c++20" +# 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++20" +# endif + # ifdef __cpp_lib_three_way_comparison # error "__cpp_lib_three_way_comparison should not be defined before c++20" # endif +# ifdef __cpp_lib_to_address +# error "__cpp_lib_to_address should not be defined before c++20" +# endif + # ifdef __cpp_lib_to_array # error "__cpp_lib_to_array should not be defined before c++20" # 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++20" +# 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++20" +# endif + # ifdef __cpp_lib_atomic_flag_test # error "__cpp_lib_atomic_flag_test should not be defined before c++20" # endif @@ -1055,6 +1322,10 @@ # error "__cpp_lib_atomic_wait should not be defined before c++20" # endif +# ifdef __cpp_lib_barrier +# error "__cpp_lib_barrier should not be defined before c++20" +# endif + # ifdef __cpp_lib_bind_front # error "__cpp_lib_bind_front should not be defined before c++20" # endif @@ -1063,6 +1334,10 @@ # error "__cpp_lib_bit_cast should not be defined before c++20" # endif +# ifdef __cpp_lib_bitops +# error "__cpp_lib_bitops should not be defined before c++20" +# 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++20" +# endif + # if !defined(_LIBCPP_VERSION) # ifndef __cpp_lib_boyer_moore_searcher # error "__cpp_lib_boyer_moore_searcher should be defined in c++17" @@ -1126,6 +1405,14 @@ # error "__cpp_lib_concepts should not be defined before c++20" # endif +# ifdef __cpp_lib_constexpr_algorithms +# error "__cpp_lib_constexpr_algorithms should not be defined before c++20" +# endif + +# ifdef __cpp_lib_constexpr_complex +# error "__cpp_lib_constexpr_complex should not be defined before c++20" +# endif + # ifdef __cpp_lib_constexpr_dynamic_alloc # error "__cpp_lib_constexpr_dynamic_alloc should not be defined before c++20" # endif @@ -1134,18 +1421,42 @@ # error "__cpp_lib_constexpr_functional should not be defined before c++20" # endif +# ifdef __cpp_lib_constexpr_iterator +# error "__cpp_lib_constexpr_iterator should not be defined before c++20" +# endif + +# ifdef __cpp_lib_constexpr_memory +# error "__cpp_lib_constexpr_memory should not be defined before c++20" +# endif + # ifdef __cpp_lib_constexpr_numeric # error "__cpp_lib_constexpr_numeric should not be defined before c++20" # endif -# ifdef __cpp_lib_constexpr_swap_algorithms -# error "__cpp_lib_constexpr_swap_algorithms should not be defined before c++20" +# ifdef __cpp_lib_constexpr_string +# error "__cpp_lib_constexpr_string should not be defined before c++20" +# endif + +# ifdef __cpp_lib_constexpr_string_view +# error "__cpp_lib_constexpr_string_view should not be defined before c++20" +# endif + +# ifdef __cpp_lib_constexpr_tuple +# error "__cpp_lib_constexpr_tuple should not be defined before c++20" # endif # ifdef __cpp_lib_constexpr_utility # error "__cpp_lib_constexpr_utility should not be defined before c++20" # endif +# ifdef __cpp_lib_constexpr_vector +# error "__cpp_lib_constexpr_vector should not be defined before c++20" +# endif + +# ifdef __cpp_lib_coroutine +# error "__cpp_lib_coroutine should not be defined before c++20" +# endif + # ifdef __cpp_lib_destroying_delete # error "__cpp_lib_destroying_delete should not be defined before c++20" # endif @@ -1254,6 +1565,10 @@ # error "__cpp_lib_int_pow2 should not be defined before c++20" # endif +# ifdef __cpp_lib_integer_comparison_functions +# error "__cpp_lib_integer_comparison_functions should not be defined before c++20" +# 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++20" +# endif + +# ifdef __cpp_lib_is_nothrow_convertible +# error "__cpp_lib_is_nothrow_convertible should not be defined before c++20" +# 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++20" +# 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++20" +# endif + +# ifdef __cpp_lib_latch +# error "__cpp_lib_latch should not be defined before c++20" +# 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++20" +# 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++20" +# 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++20" +# 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++20" +# endif + +# ifdef __cpp_lib_smart_ptr_for_overwrite +# error "__cpp_lib_smart_ptr_for_overwrite should not be defined before c++20" +# endif + +# ifdef __cpp_lib_source_location +# error "__cpp_lib_source_location should not be defined before c++20" +# endif + # ifdef __cpp_lib_span # error "__cpp_lib_span should not be defined before c++20" # endif +# ifdef __cpp_lib_ssize +# error "__cpp_lib_ssize should not be defined before c++20" +# endif + +# ifdef __cpp_lib_starts_ends_with +# error "__cpp_lib_starts_ends_with should not be defined before c++20" +# 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++20" +# endif + # ifdef __cpp_lib_three_way_comparison # error "__cpp_lib_three_way_comparison should not be defined before c++20" # endif +# ifdef __cpp_lib_to_address +# error "__cpp_lib_to_address should not be defined before c++20" +# endif + # ifdef __cpp_lib_to_array # error "__cpp_lib_to_array should not be defined before c++20" # 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++20" +# 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++20" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_assume_aligned +# error "__cpp_lib_assume_aligned should be defined in c++20" +# endif +# if __cpp_lib_assume_aligned != 201811L +# error "__cpp_lib_assume_aligned should have the value 201811L in c++20" +# 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++20" @@ -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++20" +# endif +# if __cpp_lib_barrier != 201907L +# error "__cpp_lib_barrier should have the value 201907L in c++20" +# 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++20" # endif -# if __cpp_lib_bind_front != 201811L -# error "__cpp_lib_bind_front should have the value 201811L in c++20" +# if __cpp_lib_bind_front != 201907L +# error "__cpp_lib_bind_front should have the value 201907L in c++20" # 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++20" +# endif +# if __cpp_lib_bitops != 201907L +# error "__cpp_lib_bitops should have the value 201907L in c++20" +# 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++20" # endif @@ -1823,6 +2241,13 @@ # error "__cpp_lib_bool_constant should have the value 201505L in c++20" # endif +# ifndef __cpp_lib_bounded_array_traits +# error "__cpp_lib_bounded_array_traits should be defined in c++20" +# endif +# if __cpp_lib_bounded_array_traits != 201902L +# error "__cpp_lib_bounded_array_traits should have the value 201902L in c++20" +# endif + # if !defined(_LIBCPP_VERSION) # ifndef __cpp_lib_boyer_moore_searcher # error "__cpp_lib_boyer_moore_searcher should be defined in c++20" @@ -1888,8 +2313,8 @@ # ifndef __cpp_lib_concepts # error "__cpp_lib_concepts should be defined in c++20" # endif -# if __cpp_lib_concepts != 201806L -# error "__cpp_lib_concepts should have the value 201806L in c++20" +# if __cpp_lib_concepts != 202002L +# error "__cpp_lib_concepts should have the value 202002L in c++20" # 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++20" +# endif +# if __cpp_lib_constexpr_algorithms != 201806L +# error "__cpp_lib_constexpr_algorithms should have the value 201806L in c++20" +# 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++20" +# endif +# if __cpp_lib_constexpr_complex != 201711L +# error "__cpp_lib_constexpr_complex should have the value 201711L in c++20" +# 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++20" # endif @@ -1904,11 +2355,43 @@ # error "__cpp_lib_constexpr_dynamic_alloc should have the value 201907L in c++20" # endif -# ifndef __cpp_lib_constexpr_functional -# error "__cpp_lib_constexpr_functional should be defined in c++20" +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_constexpr_functional +# error "__cpp_lib_constexpr_functional should be defined in c++20" +# endif +# if __cpp_lib_constexpr_functional != 201907L +# error "__cpp_lib_constexpr_functional should have the value 201907L in c++20" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_constexpr_functional +# error "__cpp_lib_constexpr_functional should not be defined because it is unimplemented in libc++!" +# endif # endif -# if __cpp_lib_constexpr_functional != 201907L -# error "__cpp_lib_constexpr_functional should have the value 201907L in c++20" + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_constexpr_iterator +# error "__cpp_lib_constexpr_iterator should be defined in c++20" +# endif +# if __cpp_lib_constexpr_iterator != 201811L +# error "__cpp_lib_constexpr_iterator should have the value 201811L in c++20" +# 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++20" +# endif +# if __cpp_lib_constexpr_memory != 201811L +# error "__cpp_lib_constexpr_memory should have the value 201811L in c++20" +# 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_constexpr_numeric @@ -1919,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++20" +# ifndef __cpp_lib_constexpr_string +# error "__cpp_lib_constexpr_string should be defined in c++20" +# endif +# if __cpp_lib_constexpr_string != 201907L +# error "__cpp_lib_constexpr_string should have the value 201907L in c++20" +# 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++20" # endif -# if __cpp_lib_constexpr_swap_algorithms != 201806L -# error "__cpp_lib_constexpr_swap_algorithms should have the value 201806L in c++20" +# if __cpp_lib_constexpr_string_view != 201811L +# error "__cpp_lib_constexpr_string_view should have the value 201811L in c++20" # 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_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++20" +# endif +# if __cpp_lib_constexpr_tuple != 201811L +# error "__cpp_lib_constexpr_tuple should have the value 201811L in c++20" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_constexpr_tuple +# error "__cpp_lib_constexpr_tuple should not be defined because it is unimplemented in libc++!" # endif # endif @@ -1938,6 +2447,32 @@ # error "__cpp_lib_constexpr_utility should have the value 201811L in c++20" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_constexpr_vector +# error "__cpp_lib_constexpr_vector should be defined in c++20" +# endif +# if __cpp_lib_constexpr_vector != 201907L +# error "__cpp_lib_constexpr_vector should have the value 201907L in c++20" +# 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++20" +# endif +# if __cpp_lib_coroutine != 201902L +# error "__cpp_lib_coroutine should have the value 201902L in c++20" +# 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++20" @@ -1983,8 +2518,8 @@ # ifndef __cpp_lib_execution # error "__cpp_lib_execution should be defined in c++20" # endif -# if __cpp_lib_execution != 201603L -# error "__cpp_lib_execution should have the value 201603L in c++20" +# if __cpp_lib_execution != 201902L +# error "__cpp_lib_execution should have the value 201902L in c++20" # endif # else // _LIBCPP_VERSION # ifdef __cpp_lib_execution @@ -2067,6 +2602,19 @@ # error "__cpp_lib_int_pow2 should have the value 202002L in c++20" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_integer_comparison_functions +# error "__cpp_lib_integer_comparison_functions should be defined in c++20" +# endif +# if __cpp_lib_integer_comparison_functions != 202002L +# error "__cpp_lib_integer_comparison_functions should have the value 202002L in c++20" +# 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++20" # endif @@ -2135,6 +2683,26 @@ # error "__cpp_lib_is_invocable should have the value 201703L in c++20" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_is_layout_compatible +# error "__cpp_lib_is_layout_compatible should be defined in c++20" +# endif +# if __cpp_lib_is_layout_compatible != 201907L +# error "__cpp_lib_is_layout_compatible should have the value 201907L in c++20" +# 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 + +# ifndef __cpp_lib_is_nothrow_convertible +# error "__cpp_lib_is_nothrow_convertible should be defined in c++20" +# endif +# if __cpp_lib_is_nothrow_convertible != 201806L +# error "__cpp_lib_is_nothrow_convertible should have the value 201806L in c++20" +# endif + # ifndef __cpp_lib_is_null_pointer # error "__cpp_lib_is_null_pointer should be defined in c++20" # endif @@ -2142,6 +2710,19 @@ # error "__cpp_lib_is_null_pointer should have the value 201309L in c++20" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_is_pointer_interconvertible +# error "__cpp_lib_is_pointer_interconvertible should be defined in c++20" +# endif +# if __cpp_lib_is_pointer_interconvertible != 201907L +# error "__cpp_lib_is_pointer_interconvertible should have the value 201907L in c++20" +# 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++20" # endif @@ -2149,6 +2730,32 @@ # error "__cpp_lib_is_swappable should have the value 201603L in c++20" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_jthread +# error "__cpp_lib_jthread should be defined in c++20" +# endif +# if __cpp_lib_jthread != 201911L +# error "__cpp_lib_jthread should have the value 201911L in c++20" +# 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++20" +# endif +# if __cpp_lib_latch != 201907L +# error "__cpp_lib_latch should have the value 201907L in c++20" +# 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++20" # endif @@ -2285,6 +2892,19 @@ # endif # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_polymorphic_allocator +# error "__cpp_lib_polymorphic_allocator should be defined in c++20" +# endif +# if __cpp_lib_polymorphic_allocator != 201902L +# error "__cpp_lib_polymorphic_allocator should have the value 201902L in c++20" +# 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++20" # endif @@ -2312,6 +2932,13 @@ # error "__cpp_lib_raw_memory_algorithms should have the value 201606L in c++20" # endif +# ifndef __cpp_lib_remove_cvref +# error "__cpp_lib_remove_cvref should be defined in c++20" +# endif +# if __cpp_lib_remove_cvref != 201711L +# error "__cpp_lib_remove_cvref should have the value 201711L in c++20" +# endif + # ifndef __cpp_lib_result_of_sfinae # error "__cpp_lib_result_of_sfinae should be defined in c++20" # endif @@ -2340,6 +2967,19 @@ # error "__cpp_lib_scoped_lock should have the value 201703L in c++20" # endif +# if !defined(_LIBCPP_HAS_NO_THREADS) +# ifndef __cpp_lib_semaphore +# error "__cpp_lib_semaphore should be defined in c++20" +# endif +# if __cpp_lib_semaphore != 201907L +# error "__cpp_lib_semaphore should have the value 201907L in c++20" +# 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++20" @@ -2380,6 +3020,45 @@ # endif # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_shift +# error "__cpp_lib_shift should be defined in c++20" +# endif +# if __cpp_lib_shift != 201806L +# error "__cpp_lib_shift should have the value 201806L in c++20" +# 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++20" +# endif +# if __cpp_lib_smart_ptr_for_overwrite != 202002L +# error "__cpp_lib_smart_ptr_for_overwrite should have the value 202002L in c++20" +# 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++20" +# endif +# if __cpp_lib_source_location != 201907L +# error "__cpp_lib_source_location should have the value 201907L in c++20" +# 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++20" # endif @@ -2387,6 +3066,20 @@ # error "__cpp_lib_span should have the value 202002L in c++20" # endif +# ifndef __cpp_lib_ssize +# error "__cpp_lib_ssize should be defined in c++20" +# endif +# if __cpp_lib_ssize != 201902L +# error "__cpp_lib_ssize should have the value 201902L in c++20" +# endif + +# ifndef __cpp_lib_starts_ends_with +# error "__cpp_lib_starts_ends_with should be defined in c++20" +# endif +# if __cpp_lib_starts_ends_with != 201711L +# error "__cpp_lib_starts_ends_with should have the value 201711L in c++20" +# endif + # ifndef __cpp_lib_string_udls # error "__cpp_lib_string_udls should be defined in c++20" # endif @@ -2397,16 +3090,29 @@ # ifndef __cpp_lib_string_view # error "__cpp_lib_string_view should be defined in c++20" # endif -# if __cpp_lib_string_view != 201606L -# error "__cpp_lib_string_view should have the value 201606L in c++20" +# if __cpp_lib_string_view != 201803L +# error "__cpp_lib_string_view should have the value 201803L in c++20" +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_syncbuf +# error "__cpp_lib_syncbuf should be defined in c++20" +# endif +# if __cpp_lib_syncbuf != 201803L +# error "__cpp_lib_syncbuf should have the value 201803L in c++20" +# 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++20" # endif -# if __cpp_lib_three_way_comparison != 201711L -# error "__cpp_lib_three_way_comparison should have the value 201711L in c++20" +# if __cpp_lib_three_way_comparison != 201907L +# error "__cpp_lib_three_way_comparison should have the value 201907L in c++20" # endif # else // _LIBCPP_VERSION # ifdef __cpp_lib_three_way_comparison @@ -2414,6 +3120,13 @@ # endif # endif +# ifndef __cpp_lib_to_address +# error "__cpp_lib_to_address should be defined in c++20" +# endif +# if __cpp_lib_to_address != 201711L +# error "__cpp_lib_to_address should have the value 201711L in c++20" +# endif + # ifndef __cpp_lib_to_array # error "__cpp_lib_to_array should be defined in c++20" # endif @@ -2483,6 +3196,13 @@ # error "__cpp_lib_unordered_map_try_emplace should have the value 201411L in c++20" # endif +# ifndef __cpp_lib_unwrap_ref +# error "__cpp_lib_unwrap_ref should be defined in c++20" +# endif +# if __cpp_lib_unwrap_ref != 201811L +# error "__cpp_lib_unwrap_ref should have the value 201811L in c++20" +# endif + # ifndef __cpp_lib_variant # error "__cpp_lib_variant should be defined in c++20" # 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 @@ -56,6 +56,11 @@ "name": "__cpp_lib_as_const", "values": { "c++17": 201510 }, "headers": ["utility"], + }, { + "name": "__cpp_lib_assume_aligned", + "values": { "c++20": 201811 }, + "headers": ["memory"], + "unimplemented": True, }, { "name": "__cpp_lib_atomic_flag_test", "values": { "c++20": 201907 }, @@ -108,9 +113,15 @@ "headers": ["atomic"], "depends": "!defined(_LIBCPP_HAS_NO_THREADS)", "internal_depends": "!defined(_LIBCPP_HAS_NO_THREADS)", + }, { + "name": "__cpp_lib_barrier", + "values": { "c++20": 201907 }, + "headers": ["barrier"], + "depends": "!defined(_LIBCPP_HAS_NO_THREADS)", + "internal_depends": "!defined(_LIBCPP_HAS_NO_THREADS)", }, { "name": "__cpp_lib_bind_front", - "values": { "c++20": 201811 }, + "values": { "c++20": 201907 }, "headers": ["functional"], "unimplemented": True, }, { @@ -118,10 +129,19 @@ "values": { "c++20": 201806 }, "headers": ["bit"], "unimplemented": True, + }, { + "name": "__cpp_lib_bitops", + "values": { "c++20": 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++20": 201902 }, + "headers": ["type_traits"], }, { "name": "__cpp_lib_boyer_moore_searcher", "values": { "c++17": 201603 }, @@ -155,9 +175,19 @@ "headers": ["complex"], }, { "name": "__cpp_lib_concepts", - "values": { "c++20": 201806 }, + "values": { "c++20": 202002 }, "headers": ["concepts"], "unimplemented": True, + }, { + "name": "__cpp_lib_constexpr_algorithms", + "values": { "c++20": 201806 }, + "headers": ["algorithm"], + "unimplemented": True, + }, { + "name": "__cpp_lib_constexpr_complex", + "values": { "c++20": 201711 }, + "headers": ["complex"], + "unimplemented": True, }, { "name": "__cpp_lib_constexpr_dynamic_alloc", "values": { "c++20": 201907 }, @@ -166,19 +196,50 @@ "name": "__cpp_lib_constexpr_functional", "values": { "c++20": 201907 }, "headers": ["functional"], + "unimplemented": True, + }, { + "name": "__cpp_lib_constexpr_iterator", + "values": { "c++20": 201811 }, + "headers": ["iterator"], + "unimplemented": True, + }, { + "name": "__cpp_lib_constexpr_memory", + "values": { "c++20": 201811 }, + "headers": ["memory"], + "unimplemented": True, }, { "name": "__cpp_lib_constexpr_numeric", "values": { "c++20": 201911 }, "headers": ["numeric"], }, { - "name": "__cpp_lib_constexpr_swap_algorithms", - "values": { "c++20": 201806 }, - "headers": ["algorithm"], + "name": "__cpp_lib_constexpr_string", + "values": { "c++20": 201907 }, + "headers": ["string"], + "unimplemented": True, + }, { + "name": "__cpp_lib_constexpr_string_view", + "values": { "c++20": 201811 }, + "headers": ["string_view"], + "unimplemented": True, + }, { + "name": "__cpp_lib_constexpr_tuple", + "values": { "c++20": 201811 }, + "headers": ["tuple"], "unimplemented": True, }, { "name": "__cpp_lib_constexpr_utility", "values": { "c++20": 201811 }, "headers": ["utility"], + }, { + "name": "__cpp_lib_constexpr_vector", + "values": { "c++20": 201907 }, + "headers": ["vector"], + "unimplemented": True, + }, { + "name": "__cpp_lib_coroutine", + "values": { "c++20": 201902 }, + "headers": ["coroutine"], + "unimplemented": True, }, { "name": "__cpp_lib_destroying_delete", "values": { "c++20": 201806 }, @@ -203,7 +264,7 @@ "headers": ["utility"], }, { "name": "__cpp_lib_execution", - "values": { "c++17": 201603 }, + "values": { "c++17": 201603, "c++20": 201902 }, "headers": ["execution"], "unimplemented": True, }, { @@ -245,6 +306,11 @@ "name": "__cpp_lib_int_pow2", "values": { "c++20": 202002 }, "headers": ["bit"], + }, { + "name": "__cpp_lib_integer_comparison_functions", + "values": { "c++20": 202002 }, + "headers": ["utility"], + "unimplemented": True, }, { "name": "__cpp_lib_integer_sequence", "values": { "c++14": 201304 }, @@ -256,7 +322,7 @@ }, { "name": "__cpp_lib_interpolate", "values": { "c++20": 201902 }, - "headers": ["numeric"], + "headers": ["cmath", "numeric"], }, { "name": "__cpp_lib_invoke", "values": { "c++17": 201411 }, @@ -281,14 +347,41 @@ "name": "__cpp_lib_is_invocable", "values": { "c++17": 201703 }, "headers": ["type_traits"], + }, { + "name": "__cpp_lib_is_layout_compatible", + "values": { "c++20": 201907 }, + "headers": ["type_traits"], + "unimplemented": True, + }, { + "name": "__cpp_lib_is_nothrow_convertible", + "values": { "c++20": 201806 }, + "headers": ["type_traits"], }, { "name": "__cpp_lib_is_null_pointer", "values": { "c++14": 201309 }, "headers": ["type_traits"], + }, { + "name": "__cpp_lib_is_pointer_interconvertible", + "values": { "c++20": 201907 }, + "headers": ["type_traits"], + "unimplemented": True, }, { "name": "__cpp_lib_is_swappable", "values": { "c++17": 201603 }, "headers": ["type_traits"], + }, { + "name": "__cpp_lib_jthread", + "values": { "c++20": 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++20": 201907 }, + "headers": ["latch"], + "depends": "!defined(_LIBCPP_HAS_NO_THREADS)", + "internal_depends": "!defined(_LIBCPP_HAS_NO_THREADS)", }, { "name": "__cpp_lib_launder", "values": { "c++17": 201606 }, @@ -358,6 +451,11 @@ "values": { "c++17": 201603 }, "headers": ["algorithm", "numeric"], "unimplemented": True, + }, { + "name": "__cpp_lib_polymorphic_allocator", + "values": { "c++20": 201902 }, + "headers": ["memory"], + "unimplemented": True, }, { "name": "__cpp_lib_quoted_string_io", "values": { "c++14": 201304 }, @@ -371,6 +469,10 @@ "name": "__cpp_lib_raw_memory_algorithms", "values": { "c++17": 201606 }, "headers": ["memory"], + }, { + "name": "__cpp_lib_remove_cvref", + "values": { "c++20": 201711 }, + "headers": ["type_traits"], }, { "name": "__cpp_lib_result_of_sfinae", "values": { "c++14": 201210 }, @@ -387,6 +489,12 @@ "name": "__cpp_lib_scoped_lock", "values": { "c++17": 201703 }, "headers": ["mutex"], + }, { + "name": "__cpp_lib_semaphore", + "values": { "c++20": 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 }, @@ -407,23 +515,55 @@ "headers": ["shared_mutex"], "depends": "!defined(_LIBCPP_HAS_NO_THREADS)", "internal_depends": "!defined(_LIBCPP_HAS_NO_THREADS)", + }, { + "name": "__cpp_lib_shift", + "values": { "c++20": 201806 }, + "headers": ["algorithm"], + "unimplemented": True, + }, { + "name": "__cpp_lib_smart_ptr_for_overwrite", + "values": { "c++20": 202002 }, + "headers": ["memory"], + "unimplemented": True, + }, { + "name": "__cpp_lib_source_location", + "values": { "c++20": 201907 }, + "headers": ["source_location"], + "unimplemented": True, }, { "name": "__cpp_lib_span", "values": { "c++20": 202002 }, "headers": ["span"], + }, { + "name": "__cpp_lib_ssize", + "values": { "c++20": 201902 }, + "headers": ["iterator"], + }, { + "name": "__cpp_lib_starts_ends_with", + "values": { "c++20": 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 }, + "values": { "c++17": 201606, "c++20": 201803 }, "headers": ["string", "string_view"], + }, { + "name": "__cpp_lib_syncbuf", + "values": { "c++20": 201803 }, + "headers": ["syncstream"], + "unimplemented": True, }, { "name": "__cpp_lib_three_way_comparison", - "values": { "c++20": 201711 }, + "values": { "c++20": 201907 }, "headers": ["compare"], "unimplemented": True, + }, { + "name": "__cpp_lib_to_address", + "values": { "c++20": 201711 }, + "headers": ["memory"], }, { "name": "__cpp_lib_to_array", "values": { "c++20": 201907 }, @@ -440,7 +580,7 @@ }, { "name": "__cpp_lib_transparent_operators", "values": { "c++14": 201210, "c++17": 201510 }, - "headers": ["functional"], + "headers": ["functional", "memory"], }, { "name": "__cpp_lib_tuple_element_t", "values": { "c++14": 201402 }, @@ -461,6 +601,10 @@ "name": "__cpp_lib_unordered_map_try_emplace", "values": { "c++17": 201411 }, "headers": ["unordered_map"], + }, { + "name": "__cpp_lib_unwrap_ref", + "values": { "c++20": 201811 }, + "headers": ["functional"], }, { "name": "__cpp_lib_variant", "values": { "c++17": 201606 },