diff --git a/libcxx/docs/FeatureTestMacroTable.rst b/libcxx/docs/FeatureTestMacroTable.rst --- a/libcxx/docs/FeatureTestMacroTable.rst +++ b/libcxx/docs/FeatureTestMacroTable.rst @@ -290,16 +290,36 @@ ------------------------------------------------- ----------------- ``__cpp_lib_to_array`` ``201907L`` ------------------------------------------------- ----------------- + ``__cpp_lib_type_identity`` ``201806L`` + ------------------------------------------------- ----------------- ``__cpp_lib_unwrap_ref`` ``201811L`` ------------------------------------------------- ----------------- **C++ 2b** ------------------------------------------------------------------- + ``__cpp_lib_allocate_at_least`` *unimplemented* + ------------------------------------------------- ----------------- + ``__cpp_lib_associative_heterogeneous_erasure`` *unimplemented* + ------------------------------------------------- ----------------- ``__cpp_lib_byteswap`` ``202110L`` ------------------------------------------------- ----------------- + ``__cpp_lib_constexpr_typeinfo`` *unimplemented* + ------------------------------------------------- ----------------- + ``__cpp_lib_invoke_r`` *unimplemented* + ------------------------------------------------- ----------------- ``__cpp_lib_is_scoped_enum`` ``202011L`` ------------------------------------------------- ----------------- ``__cpp_lib_monadic_optional`` ``202110L`` ------------------------------------------------- ----------------- + ``__cpp_lib_move_only_function`` *unimplemented* + ------------------------------------------------- ----------------- + ``__cpp_lib_out_ptr`` *unimplemented* + ------------------------------------------------- ----------------- + ``__cpp_lib_ranges_starts_ends_with`` *unimplemented* + ------------------------------------------------- ----------------- + ``__cpp_lib_ranges_zip`` *unimplemented* + ------------------------------------------------- ----------------- + ``__cpp_lib_spanstream`` *unimplemented* + ------------------------------------------------- ----------------- ``__cpp_lib_stacktrace`` *unimplemented* ------------------------------------------------- ----------------- ``__cpp_lib_stdatomic_h`` *unimplemented* diff --git a/libcxx/include/version b/libcxx/include/version --- a/libcxx/include/version +++ b/libcxx/include/version @@ -15,6 +15,7 @@ Macro name Value Headers __cpp_lib_addressof_constexpr 201603L +__cpp_lib_allocate_at_least 202106L __cpp_lib_allocator_traits_is_always_equal 201411L @@ -24,6 +25,8 @@ __cpp_lib_array_constexpr 201811L 201603L // C++17 __cpp_lib_as_const 201510L +__cpp_lib_associative_heterogeneous_erasure 202110L + __cpp_lib_assume_aligned 201811L __cpp_lib_atomic_flag_test 201907L __cpp_lib_atomic_float 201711L @@ -60,6 +63,7 @@ __cpp_lib_constexpr_string 201811L __cpp_lib_constexpr_string_view 201811L __cpp_lib_constexpr_tuple 201811L +__cpp_lib_constexpr_typeinfo 202106L __cpp_lib_constexpr_utility 201811L __cpp_lib_constexpr_vector 201907L __cpp_lib_coroutine 201902L @@ -87,6 +91,7 @@ __cpp_lib_integral_constant_callable 201304L __cpp_lib_interpolate 201902L __cpp_lib_invoke 201411L +__cpp_lib_invoke_r 202106L __cpp_lib_is_aggregate 201703L __cpp_lib_is_constant_evaluated 201811L __cpp_lib_is_final 201402L @@ -110,6 +115,7 @@ __cpp_lib_math_special_functions 201603L __cpp_lib_memory_resource 201603L __cpp_lib_monadic_optional 202110L +__cpp_lib_move_only_function 202110L __cpp_lib_node_extract 201606L __cpp_lib_nonmember_container_access 201411L @@ -119,11 +125,14 @@ __cpp_lib_not_fn 201603L __cpp_lib_null_iterators 201304L __cpp_lib_optional 201606L +__cpp_lib_out_ptr 202106L __cpp_lib_parallel_algorithm 201603L __cpp_lib_polymorphic_allocator 201902L __cpp_lib_quoted_string_io 201304L __cpp_lib_ranges 201811L +__cpp_lib_ranges_starts_ends_with 202106L +__cpp_lib_ranges_zip 202110L __cpp_lib_raw_memory_algorithms 201606L __cpp_lib_remove_cvref 201711L __cpp_lib_result_of_sfinae 201210L @@ -139,6 +148,7 @@ __cpp_lib_smart_ptr_for_overwrite 202002L __cpp_lib_source_location 201907L __cpp_lib_span 202002L +__cpp_lib_spanstream 202106L __cpp_lib_ssize 201902L __cpp_lib_stacktrace 202011L __cpp_lib_starts_ends_with 201711L @@ -158,6 +168,7 @@ 201210L // C++14 __cpp_lib_tuple_element_t 201402L __cpp_lib_tuples_by_type 201304L +__cpp_lib_type_identity 201806L __cpp_lib_type_trait_variable_templates 201510L __cpp_lib_uncaught_exceptions 201411L __cpp_lib_unordered_map_try_emplace 201411L @@ -342,13 +353,23 @@ // # define __cpp_lib_three_way_comparison 201907L # define __cpp_lib_to_address 201711L # define __cpp_lib_to_array 201907L +# define __cpp_lib_type_identity 201806L # define __cpp_lib_unwrap_ref 201811L #endif #if _LIBCPP_STD_VER > 20 +// # define __cpp_lib_allocate_at_least 202106L +// # define __cpp_lib_associative_heterogeneous_erasure 202110L # define __cpp_lib_byteswap 202110L +// # define __cpp_lib_constexpr_typeinfo 202106L +// # define __cpp_lib_invoke_r 202106L # define __cpp_lib_is_scoped_enum 202011L # define __cpp_lib_monadic_optional 202110L +// # define __cpp_lib_move_only_function 202110L +// # define __cpp_lib_out_ptr 202106L +// # define __cpp_lib_ranges_starts_ends_with 202106L +// # define __cpp_lib_ranges_zip 202110L +// # define __cpp_lib_spanstream 202106L // # define __cpp_lib_stacktrace 202011L // # define __cpp_lib_stdatomic_h 202011L # define __cpp_lib_string_contains 202011L 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 @@ -20,6 +20,7 @@ __cpp_lib_constexpr_algorithms 201806L [C++20] __cpp_lib_parallel_algorithm 201603L [C++17] __cpp_lib_ranges 201811L [C++20] + __cpp_lib_ranges_starts_ends_with 202106L [C++2b] __cpp_lib_robust_nonmodifying_seq_ops 201304L [C++14] __cpp_lib_sample 201603L [C++17] __cpp_lib_shift 201806L [C++20] @@ -46,6 +47,10 @@ # error "__cpp_lib_ranges should not be defined before c++20" # endif +# ifdef __cpp_lib_ranges_starts_ends_with +# error "__cpp_lib_ranges_starts_ends_with should not be defined before c++2b" +# endif + # ifdef __cpp_lib_robust_nonmodifying_seq_ops # error "__cpp_lib_robust_nonmodifying_seq_ops should not be defined before c++14" # endif @@ -76,6 +81,10 @@ # error "__cpp_lib_ranges should not be defined before c++20" # endif +# ifdef __cpp_lib_ranges_starts_ends_with +# error "__cpp_lib_ranges_starts_ends_with should not be defined before c++2b" +# endif + # ifndef __cpp_lib_robust_nonmodifying_seq_ops # error "__cpp_lib_robust_nonmodifying_seq_ops should be defined in c++14" # endif @@ -121,6 +130,10 @@ # error "__cpp_lib_ranges should not be defined before c++20" # endif +# ifdef __cpp_lib_ranges_starts_ends_with +# error "__cpp_lib_ranges_starts_ends_with should not be defined before c++2b" +# endif + # ifndef __cpp_lib_robust_nonmodifying_seq_ops # error "__cpp_lib_robust_nonmodifying_seq_ops should be defined in c++17" # endif @@ -181,6 +194,10 @@ # endif # endif +# ifdef __cpp_lib_ranges_starts_ends_with +# error "__cpp_lib_ranges_starts_ends_with should not be defined before c++2b" +# endif + # ifndef __cpp_lib_robust_nonmodifying_seq_ops # error "__cpp_lib_robust_nonmodifying_seq_ops should be defined in c++20" # endif @@ -244,6 +261,19 @@ # endif # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_ranges_starts_ends_with +# error "__cpp_lib_ranges_starts_ends_with should be defined in c++2b" +# endif +# if __cpp_lib_ranges_starts_ends_with != 202106L +# error "__cpp_lib_ranges_starts_ends_with should have the value 202106L in c++2b" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_ranges_starts_ends_with +# error "__cpp_lib_ranges_starts_ends_with should not be defined because it is unimplemented in libc++!" +# endif +# endif + # ifndef __cpp_lib_robust_nonmodifying_seq_ops # error "__cpp_lib_robust_nonmodifying_seq_ops should be defined in c++2b" # endif 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 @@ -20,6 +20,8 @@ __cpp_lib_boyer_moore_searcher 201603L [C++17] __cpp_lib_constexpr_functional 201907L [C++20] __cpp_lib_invoke 201411L [C++17] + __cpp_lib_invoke_r 202106L [C++2b] + __cpp_lib_move_only_function 202110L [C++2b] __cpp_lib_not_fn 201603L [C++17] __cpp_lib_ranges 201811L [C++20] __cpp_lib_result_of_sfinae 201210L [C++14] @@ -49,6 +51,14 @@ # error "__cpp_lib_invoke should not be defined before c++17" # endif +# ifdef __cpp_lib_invoke_r +# error "__cpp_lib_invoke_r should not be defined before c++2b" +# endif + +# ifdef __cpp_lib_move_only_function +# error "__cpp_lib_move_only_function should not be defined before c++2b" +# endif + # ifdef __cpp_lib_not_fn # error "__cpp_lib_not_fn should not be defined before c++17" # endif @@ -87,6 +97,14 @@ # error "__cpp_lib_invoke should not be defined before c++17" # endif +# ifdef __cpp_lib_invoke_r +# error "__cpp_lib_invoke_r should not be defined before c++2b" +# endif + +# ifdef __cpp_lib_move_only_function +# error "__cpp_lib_move_only_function should not be defined before c++2b" +# endif + # ifdef __cpp_lib_not_fn # error "__cpp_lib_not_fn should not be defined before c++17" # endif @@ -143,6 +161,14 @@ # error "__cpp_lib_invoke should have the value 201411L in c++17" # endif +# ifdef __cpp_lib_invoke_r +# error "__cpp_lib_invoke_r should not be defined before c++2b" +# endif + +# ifdef __cpp_lib_move_only_function +# error "__cpp_lib_move_only_function should not be defined before c++2b" +# endif + # ifndef __cpp_lib_not_fn # error "__cpp_lib_not_fn should be defined in c++17" # endif @@ -208,6 +234,14 @@ # error "__cpp_lib_invoke should have the value 201411L in c++20" # endif +# ifdef __cpp_lib_invoke_r +# error "__cpp_lib_invoke_r should not be defined before c++2b" +# endif + +# ifdef __cpp_lib_move_only_function +# error "__cpp_lib_move_only_function should not be defined before c++2b" +# endif + # ifndef __cpp_lib_not_fn # error "__cpp_lib_not_fn should be defined in c++20" # endif @@ -285,6 +319,32 @@ # error "__cpp_lib_invoke should have the value 201411L in c++2b" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_invoke_r +# error "__cpp_lib_invoke_r should be defined in c++2b" +# endif +# if __cpp_lib_invoke_r != 202106L +# error "__cpp_lib_invoke_r should have the value 202106L in c++2b" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_invoke_r +# error "__cpp_lib_invoke_r should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_move_only_function +# error "__cpp_lib_move_only_function should be defined in c++2b" +# endif +# if __cpp_lib_move_only_function != 202110L +# error "__cpp_lib_move_only_function should have the value 202110L in c++2b" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_move_only_function +# error "__cpp_lib_move_only_function should not be defined because it is unimplemented in libc++!" +# endif +# endif + # ifndef __cpp_lib_not_fn # error "__cpp_lib_not_fn should be defined in c++2b" # endif diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/map.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/map.version.pass.cpp --- a/libcxx/test/std/language.support/support.limits/support.limits.general/map.version.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/map.version.pass.cpp @@ -15,13 +15,14 @@ // Test the feature test macros defined by -/* Constant Value - __cpp_lib_allocator_traits_is_always_equal 201411L [C++17] - __cpp_lib_erase_if 202002L [C++20] - __cpp_lib_generic_associative_lookup 201304L [C++14] - __cpp_lib_map_try_emplace 201411L [C++17] - __cpp_lib_node_extract 201606L [C++17] - __cpp_lib_nonmember_container_access 201411L [C++17] +/* Constant Value + __cpp_lib_allocator_traits_is_always_equal 201411L [C++17] + __cpp_lib_associative_heterogeneous_erasure 202110L [C++2b] + __cpp_lib_erase_if 202002L [C++20] + __cpp_lib_generic_associative_lookup 201304L [C++14] + __cpp_lib_map_try_emplace 201411L [C++17] + __cpp_lib_node_extract 201606L [C++17] + __cpp_lib_nonmember_container_access 201411L [C++17] */ #include @@ -33,6 +34,10 @@ # error "__cpp_lib_allocator_traits_is_always_equal should not be defined before c++17" # endif +# ifdef __cpp_lib_associative_heterogeneous_erasure +# error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++2b" +# endif + # ifdef __cpp_lib_erase_if # error "__cpp_lib_erase_if should not be defined before c++20" # endif @@ -59,6 +64,10 @@ # error "__cpp_lib_allocator_traits_is_always_equal should not be defined before c++17" # endif +# ifdef __cpp_lib_associative_heterogeneous_erasure +# error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++2b" +# endif + # ifdef __cpp_lib_erase_if # error "__cpp_lib_erase_if should not be defined before c++20" # endif @@ -91,6 +100,10 @@ # error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++17" # endif +# ifdef __cpp_lib_associative_heterogeneous_erasure +# error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++2b" +# endif + # ifdef __cpp_lib_erase_if # error "__cpp_lib_erase_if should not be defined before c++20" # endif @@ -132,6 +145,10 @@ # error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++20" # endif +# ifdef __cpp_lib_associative_heterogeneous_erasure +# error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++2b" +# endif + # ifndef __cpp_lib_erase_if # error "__cpp_lib_erase_if should be defined in c++20" # endif @@ -176,6 +193,19 @@ # error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++2b" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_associative_heterogeneous_erasure +# error "__cpp_lib_associative_heterogeneous_erasure should be defined in c++2b" +# endif +# if __cpp_lib_associative_heterogeneous_erasure != 202110L +# error "__cpp_lib_associative_heterogeneous_erasure should have the value 202110L in c++2b" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_associative_heterogeneous_erasure +# error "__cpp_lib_associative_heterogeneous_erasure 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++2b" # endif 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 @@ -17,6 +17,7 @@ /* Constant Value __cpp_lib_addressof_constexpr 201603L [C++17] + __cpp_lib_allocate_at_least 202106L [C++2b] __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] @@ -24,6 +25,7 @@ __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_out_ptr 202106L [C++2b] __cpp_lib_polymorphic_allocator 201902L [C++20] __cpp_lib_ranges 201811L [C++20] __cpp_lib_raw_memory_algorithms 201606L [C++17] @@ -44,6 +46,10 @@ # error "__cpp_lib_addressof_constexpr should not be defined before c++17" # endif +# ifdef __cpp_lib_allocate_at_least +# error "__cpp_lib_allocate_at_least should not be defined before c++2b" +# endif + # ifdef __cpp_lib_allocator_traits_is_always_equal # error "__cpp_lib_allocator_traits_is_always_equal should not be defined before c++17" # endif @@ -72,6 +78,10 @@ # error "__cpp_lib_make_unique should not be defined before c++14" # endif +# ifdef __cpp_lib_out_ptr +# error "__cpp_lib_out_ptr should not be defined before c++2b" +# endif + # ifdef __cpp_lib_polymorphic_allocator # error "__cpp_lib_polymorphic_allocator should not be defined before c++20" # endif @@ -110,6 +120,10 @@ # error "__cpp_lib_addressof_constexpr should not be defined before c++17" # endif +# ifdef __cpp_lib_allocate_at_least +# error "__cpp_lib_allocate_at_least should not be defined before c++2b" +# endif + # ifdef __cpp_lib_allocator_traits_is_always_equal # error "__cpp_lib_allocator_traits_is_always_equal should not be defined before c++17" # endif @@ -141,6 +155,10 @@ # error "__cpp_lib_make_unique should have the value 201304L in c++14" # endif +# ifdef __cpp_lib_out_ptr +# error "__cpp_lib_out_ptr should not be defined before c++2b" +# endif + # ifdef __cpp_lib_polymorphic_allocator # error "__cpp_lib_polymorphic_allocator should not be defined before c++20" # endif @@ -185,6 +203,10 @@ # error "__cpp_lib_addressof_constexpr should have the value 201603L in c++17" # endif +# ifdef __cpp_lib_allocate_at_least +# error "__cpp_lib_allocate_at_least should not be defined before c++2b" +# endif + # ifndef __cpp_lib_allocator_traits_is_always_equal # error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++17" # endif @@ -222,6 +244,10 @@ # error "__cpp_lib_make_unique should have the value 201304L in c++17" # endif +# ifdef __cpp_lib_out_ptr +# error "__cpp_lib_out_ptr should not be defined before c++2b" +# endif + # ifdef __cpp_lib_polymorphic_allocator # error "__cpp_lib_polymorphic_allocator should not be defined before c++20" # endif @@ -275,6 +301,10 @@ # error "__cpp_lib_addressof_constexpr should have the value 201603L in c++20" # endif +# ifdef __cpp_lib_allocate_at_least +# error "__cpp_lib_allocate_at_least should not be defined before c++2b" +# endif + # ifndef __cpp_lib_allocator_traits_is_always_equal # error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++20" # endif @@ -330,6 +360,10 @@ # error "__cpp_lib_make_unique should have the value 201304L in c++20" # endif +# ifdef __cpp_lib_out_ptr +# error "__cpp_lib_out_ptr should not be defined before c++2b" +# endif + # if !defined(_LIBCPP_VERSION) # ifndef __cpp_lib_polymorphic_allocator # error "__cpp_lib_polymorphic_allocator should be defined in c++20" @@ -413,6 +447,19 @@ # error "__cpp_lib_addressof_constexpr should have the value 201603L in c++2b" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_allocate_at_least +# error "__cpp_lib_allocate_at_least should be defined in c++2b" +# endif +# if __cpp_lib_allocate_at_least != 202106L +# error "__cpp_lib_allocate_at_least should have the value 202106L in c++2b" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_allocate_at_least +# error "__cpp_lib_allocate_at_least should not be defined because it is unimplemented in libc++!" +# endif +# endif + # ifndef __cpp_lib_allocator_traits_is_always_equal # error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++2b" # endif @@ -468,6 +515,19 @@ # error "__cpp_lib_make_unique should have the value 201304L in c++2b" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_out_ptr +# error "__cpp_lib_out_ptr should be defined in c++2b" +# endif +# if __cpp_lib_out_ptr != 202106L +# error "__cpp_lib_out_ptr should have the value 202106L in c++2b" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_out_ptr +# error "__cpp_lib_out_ptr should not be defined because it is unimplemented in libc++!" +# endif +# endif + # if !defined(_LIBCPP_VERSION) # ifndef __cpp_lib_polymorphic_allocator # error "__cpp_lib_polymorphic_allocator should be defined in c++2b" diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/ranges.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/ranges.version.pass.cpp --- a/libcxx/test/std/language.support/support.limits/support.limits.general/ranges.version.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/ranges.version.pass.cpp @@ -17,8 +17,9 @@ // Test the feature test macros defined by -/* Constant Value - __cpp_lib_ranges 201811L [C++20] +/* Constant Value + __cpp_lib_ranges 201811L [C++20] + __cpp_lib_ranges_zip 202110L [C++2b] */ #include @@ -30,18 +31,30 @@ # error "__cpp_lib_ranges should not be defined before c++20" # endif +# ifdef __cpp_lib_ranges_zip +# error "__cpp_lib_ranges_zip should not be defined before c++2b" +# endif + #elif TEST_STD_VER == 14 # ifdef __cpp_lib_ranges # error "__cpp_lib_ranges should not be defined before c++20" # endif +# ifdef __cpp_lib_ranges_zip +# error "__cpp_lib_ranges_zip should not be defined before c++2b" +# endif + #elif TEST_STD_VER == 17 # ifdef __cpp_lib_ranges # error "__cpp_lib_ranges should not be defined before c++20" # endif +# ifdef __cpp_lib_ranges_zip +# error "__cpp_lib_ranges_zip should not be defined before c++2b" +# endif + #elif TEST_STD_VER == 20 # if !defined(_LIBCPP_VERSION) @@ -57,6 +70,10 @@ # endif # endif +# ifdef __cpp_lib_ranges_zip +# error "__cpp_lib_ranges_zip should not be defined before c++2b" +# endif + #elif TEST_STD_VER > 20 # if !defined(_LIBCPP_VERSION) @@ -72,6 +89,19 @@ # endif # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_ranges_zip +# error "__cpp_lib_ranges_zip should be defined in c++2b" +# endif +# if __cpp_lib_ranges_zip != 202110L +# error "__cpp_lib_ranges_zip should have the value 202110L in c++2b" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_ranges_zip +# error "__cpp_lib_ranges_zip 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/set.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/set.version.pass.cpp --- a/libcxx/test/std/language.support/support.limits/support.limits.general/set.version.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/set.version.pass.cpp @@ -15,12 +15,13 @@ // Test the feature test macros defined by -/* Constant Value - __cpp_lib_allocator_traits_is_always_equal 201411L [C++17] - __cpp_lib_erase_if 202002L [C++20] - __cpp_lib_generic_associative_lookup 201304L [C++14] - __cpp_lib_node_extract 201606L [C++17] - __cpp_lib_nonmember_container_access 201411L [C++17] +/* Constant Value + __cpp_lib_allocator_traits_is_always_equal 201411L [C++17] + __cpp_lib_associative_heterogeneous_erasure 202110L [C++2b] + __cpp_lib_erase_if 202002L [C++20] + __cpp_lib_generic_associative_lookup 201304L [C++14] + __cpp_lib_node_extract 201606L [C++17] + __cpp_lib_nonmember_container_access 201411L [C++17] */ #include @@ -32,6 +33,10 @@ # error "__cpp_lib_allocator_traits_is_always_equal should not be defined before c++17" # endif +# ifdef __cpp_lib_associative_heterogeneous_erasure +# error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++2b" +# endif + # ifdef __cpp_lib_erase_if # error "__cpp_lib_erase_if should not be defined before c++20" # endif @@ -54,6 +59,10 @@ # error "__cpp_lib_allocator_traits_is_always_equal should not be defined before c++17" # endif +# ifdef __cpp_lib_associative_heterogeneous_erasure +# error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++2b" +# endif + # ifdef __cpp_lib_erase_if # error "__cpp_lib_erase_if should not be defined before c++20" # endif @@ -82,6 +91,10 @@ # error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++17" # endif +# ifdef __cpp_lib_associative_heterogeneous_erasure +# error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++2b" +# endif + # ifdef __cpp_lib_erase_if # error "__cpp_lib_erase_if should not be defined before c++20" # endif @@ -116,6 +129,10 @@ # error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++20" # endif +# ifdef __cpp_lib_associative_heterogeneous_erasure +# error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++2b" +# endif + # ifndef __cpp_lib_erase_if # error "__cpp_lib_erase_if should be defined in c++20" # endif @@ -153,6 +170,19 @@ # error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++2b" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_associative_heterogeneous_erasure +# error "__cpp_lib_associative_heterogeneous_erasure should be defined in c++2b" +# endif +# if __cpp_lib_associative_heterogeneous_erasure != 202110L +# error "__cpp_lib_associative_heterogeneous_erasure should have the value 202110L in c++2b" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_associative_heterogeneous_erasure +# error "__cpp_lib_associative_heterogeneous_erasure 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++2b" # endif 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 @@ -19,6 +19,7 @@ __cpp_lib_apply 201603L [C++17] __cpp_lib_constexpr_tuple 201811L [C++20] __cpp_lib_make_from_tuple 201606L [C++17] + __cpp_lib_ranges_zip 202110L [C++2b] __cpp_lib_tuple_element_t 201402L [C++14] __cpp_lib_tuples_by_type 201304L [C++14] */ @@ -40,6 +41,10 @@ # error "__cpp_lib_make_from_tuple should not be defined before c++17" # endif +# ifdef __cpp_lib_ranges_zip +# error "__cpp_lib_ranges_zip should not be defined before c++2b" +# endif + # ifdef __cpp_lib_tuple_element_t # error "__cpp_lib_tuple_element_t should not be defined before c++14" # endif @@ -62,6 +67,10 @@ # error "__cpp_lib_make_from_tuple should not be defined before c++17" # endif +# ifdef __cpp_lib_ranges_zip +# error "__cpp_lib_ranges_zip should not be defined before c++2b" +# endif + # ifndef __cpp_lib_tuple_element_t # error "__cpp_lib_tuple_element_t should be defined in c++14" # endif @@ -96,6 +105,10 @@ # error "__cpp_lib_make_from_tuple should have the value 201606L in c++17" # endif +# ifdef __cpp_lib_ranges_zip +# error "__cpp_lib_ranges_zip should not be defined before c++2b" +# endif + # ifndef __cpp_lib_tuple_element_t # error "__cpp_lib_tuple_element_t should be defined in c++17" # endif @@ -133,6 +146,10 @@ # error "__cpp_lib_make_from_tuple should have the value 201606L in c++20" # endif +# ifdef __cpp_lib_ranges_zip +# error "__cpp_lib_ranges_zip should not be defined before c++2b" +# endif + # ifndef __cpp_lib_tuple_element_t # error "__cpp_lib_tuple_element_t should be defined in c++20" # endif @@ -170,6 +187,19 @@ # error "__cpp_lib_make_from_tuple should have the value 201606L in c++2b" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_ranges_zip +# error "__cpp_lib_ranges_zip should be defined in c++2b" +# endif +# if __cpp_lib_ranges_zip != 202110L +# error "__cpp_lib_ranges_zip should have the value 202110L in c++2b" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_ranges_zip +# error "__cpp_lib_ranges_zip should not be defined because it is unimplemented in libc++!" +# endif +# endif + # ifndef __cpp_lib_tuple_element_t # error "__cpp_lib_tuple_element_t should be defined in c++2b" # 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 @@ -34,6 +34,7 @@ __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_identity 201806L [C++20] __cpp_lib_type_trait_variable_templates 201510L [C++17] __cpp_lib_void_t 201411L [C++17] */ @@ -115,6 +116,10 @@ # error "__cpp_lib_transformation_trait_aliases should not be defined before c++14" # endif +# ifdef __cpp_lib_type_identity +# error "__cpp_lib_type_identity should not be defined before c++20" +# endif + # ifdef __cpp_lib_type_trait_variable_templates # error "__cpp_lib_type_trait_variable_templates should not be defined before c++17" # endif @@ -212,6 +217,10 @@ # error "__cpp_lib_transformation_trait_aliases should have the value 201304L in c++14" # endif +# ifdef __cpp_lib_type_identity +# error "__cpp_lib_type_identity should not be defined before c++20" +# endif + # ifdef __cpp_lib_type_trait_variable_templates # error "__cpp_lib_type_trait_variable_templates should not be defined before c++17" # endif @@ -327,6 +336,10 @@ # error "__cpp_lib_transformation_trait_aliases should have the value 201304L in c++17" # endif +# ifdef __cpp_lib_type_identity +# error "__cpp_lib_type_identity should not be defined before c++20" +# endif + # ifndef __cpp_lib_type_trait_variable_templates # error "__cpp_lib_type_trait_variable_templates should be defined in c++17" # endif @@ -478,6 +491,13 @@ # error "__cpp_lib_transformation_trait_aliases should have the value 201304L in c++20" # endif +# ifndef __cpp_lib_type_identity +# error "__cpp_lib_type_identity should be defined in c++20" +# endif +# if __cpp_lib_type_identity != 201806L +# error "__cpp_lib_type_identity should have the value 201806L in c++20" +# endif + # ifndef __cpp_lib_type_trait_variable_templates # error "__cpp_lib_type_trait_variable_templates should be defined in c++20" # endif @@ -632,6 +652,13 @@ # error "__cpp_lib_transformation_trait_aliases should have the value 201304L in c++2b" # endif +# ifndef __cpp_lib_type_identity +# error "__cpp_lib_type_identity should be defined in c++2b" +# endif +# if __cpp_lib_type_identity != 201806L +# error "__cpp_lib_type_identity should have the value 201806L in c++2b" +# endif + # ifndef __cpp_lib_type_trait_variable_templates # error "__cpp_lib_type_trait_variable_templates should be defined in c++2b" # endif diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/typeinfo.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/typeinfo.version.pass.cpp new file mode 100644 --- /dev/null +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/typeinfo.version.pass.cpp @@ -0,0 +1,66 @@ +//===----------------------------------------------------------------------===// +// +// 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. +// +// clang-format off + +// + +// Test the feature test macros defined by + +/* Constant Value + __cpp_lib_constexpr_typeinfo 202106L [C++2b] +*/ + +#include +#include "test_macros.h" + +#if TEST_STD_VER < 14 + +# ifdef __cpp_lib_constexpr_typeinfo +# error "__cpp_lib_constexpr_typeinfo should not be defined before c++2b" +# endif + +#elif TEST_STD_VER == 14 + +# ifdef __cpp_lib_constexpr_typeinfo +# error "__cpp_lib_constexpr_typeinfo should not be defined before c++2b" +# endif + +#elif TEST_STD_VER == 17 + +# ifdef __cpp_lib_constexpr_typeinfo +# error "__cpp_lib_constexpr_typeinfo should not be defined before c++2b" +# endif + +#elif TEST_STD_VER == 20 + +# ifdef __cpp_lib_constexpr_typeinfo +# error "__cpp_lib_constexpr_typeinfo should not be defined before c++2b" +# endif + +#elif TEST_STD_VER > 20 + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_constexpr_typeinfo +# error "__cpp_lib_constexpr_typeinfo should be defined in c++2b" +# endif +# if __cpp_lib_constexpr_typeinfo != 202106L +# error "__cpp_lib_constexpr_typeinfo should have the value 202106L in c++2b" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_constexpr_typeinfo +# error "__cpp_lib_constexpr_typeinfo 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/unordered_map.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/unordered_map.version.pass.cpp --- a/libcxx/test/std/language.support/support.limits/support.limits.general/unordered_map.version.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/unordered_map.version.pass.cpp @@ -15,13 +15,14 @@ // Test the feature test macros defined by -/* Constant Value - __cpp_lib_allocator_traits_is_always_equal 201411L [C++17] - __cpp_lib_erase_if 202002L [C++20] - __cpp_lib_generic_unordered_lookup 201811L [C++20] - __cpp_lib_node_extract 201606L [C++17] - __cpp_lib_nonmember_container_access 201411L [C++17] - __cpp_lib_unordered_map_try_emplace 201411L [C++17] +/* Constant Value + __cpp_lib_allocator_traits_is_always_equal 201411L [C++17] + __cpp_lib_associative_heterogeneous_erasure 202110L [C++2b] + __cpp_lib_erase_if 202002L [C++20] + __cpp_lib_generic_unordered_lookup 201811L [C++20] + __cpp_lib_node_extract 201606L [C++17] + __cpp_lib_nonmember_container_access 201411L [C++17] + __cpp_lib_unordered_map_try_emplace 201411L [C++17] */ #include @@ -33,6 +34,10 @@ # error "__cpp_lib_allocator_traits_is_always_equal should not be defined before c++17" # endif +# ifdef __cpp_lib_associative_heterogeneous_erasure +# error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++2b" +# endif + # ifdef __cpp_lib_erase_if # error "__cpp_lib_erase_if should not be defined before c++20" # endif @@ -59,6 +64,10 @@ # error "__cpp_lib_allocator_traits_is_always_equal should not be defined before c++17" # endif +# ifdef __cpp_lib_associative_heterogeneous_erasure +# error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++2b" +# endif + # ifdef __cpp_lib_erase_if # error "__cpp_lib_erase_if should not be defined before c++20" # endif @@ -88,6 +97,10 @@ # error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++17" # endif +# ifdef __cpp_lib_associative_heterogeneous_erasure +# error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++2b" +# endif + # ifdef __cpp_lib_erase_if # error "__cpp_lib_erase_if should not be defined before c++20" # endif @@ -126,6 +139,10 @@ # error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++20" # endif +# ifdef __cpp_lib_associative_heterogeneous_erasure +# error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++2b" +# endif + # ifndef __cpp_lib_erase_if # error "__cpp_lib_erase_if should be defined in c++20" # endif @@ -170,6 +187,19 @@ # error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++2b" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_associative_heterogeneous_erasure +# error "__cpp_lib_associative_heterogeneous_erasure should be defined in c++2b" +# endif +# if __cpp_lib_associative_heterogeneous_erasure != 202110L +# error "__cpp_lib_associative_heterogeneous_erasure should have the value 202110L in c++2b" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_associative_heterogeneous_erasure +# error "__cpp_lib_associative_heterogeneous_erasure 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++2b" # endif diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/unordered_set.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/unordered_set.version.pass.cpp --- a/libcxx/test/std/language.support/support.limits/support.limits.general/unordered_set.version.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/unordered_set.version.pass.cpp @@ -15,12 +15,13 @@ // Test the feature test macros defined by -/* Constant Value - __cpp_lib_allocator_traits_is_always_equal 201411L [C++17] - __cpp_lib_erase_if 202002L [C++20] - __cpp_lib_generic_unordered_lookup 201811L [C++20] - __cpp_lib_node_extract 201606L [C++17] - __cpp_lib_nonmember_container_access 201411L [C++17] +/* Constant Value + __cpp_lib_allocator_traits_is_always_equal 201411L [C++17] + __cpp_lib_associative_heterogeneous_erasure 202110L [C++2b] + __cpp_lib_erase_if 202002L [C++20] + __cpp_lib_generic_unordered_lookup 201811L [C++20] + __cpp_lib_node_extract 201606L [C++17] + __cpp_lib_nonmember_container_access 201411L [C++17] */ #include @@ -32,6 +33,10 @@ # error "__cpp_lib_allocator_traits_is_always_equal should not be defined before c++17" # endif +# ifdef __cpp_lib_associative_heterogeneous_erasure +# error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++2b" +# endif + # ifdef __cpp_lib_erase_if # error "__cpp_lib_erase_if should not be defined before c++20" # endif @@ -54,6 +59,10 @@ # error "__cpp_lib_allocator_traits_is_always_equal should not be defined before c++17" # endif +# ifdef __cpp_lib_associative_heterogeneous_erasure +# error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++2b" +# endif + # ifdef __cpp_lib_erase_if # error "__cpp_lib_erase_if should not be defined before c++20" # endif @@ -79,6 +88,10 @@ # error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++17" # endif +# ifdef __cpp_lib_associative_heterogeneous_erasure +# error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++2b" +# endif + # ifdef __cpp_lib_erase_if # error "__cpp_lib_erase_if should not be defined before c++20" # endif @@ -110,6 +123,10 @@ # error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++20" # endif +# ifdef __cpp_lib_associative_heterogeneous_erasure +# error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++2b" +# endif + # ifndef __cpp_lib_erase_if # error "__cpp_lib_erase_if should be defined in c++20" # endif @@ -147,6 +164,19 @@ # error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++2b" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_associative_heterogeneous_erasure +# error "__cpp_lib_associative_heterogeneous_erasure should be defined in c++2b" +# endif +# if __cpp_lib_associative_heterogeneous_erasure != 202110L +# error "__cpp_lib_associative_heterogeneous_erasure should have the value 202110L in c++2b" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_associative_heterogeneous_erasure +# error "__cpp_lib_associative_heterogeneous_erasure 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++2b" # 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 @@ -21,6 +21,7 @@ __cpp_lib_exchange_function 201304L [C++14] __cpp_lib_integer_comparison_functions 202002L [C++20] __cpp_lib_integer_sequence 201304L [C++14] + __cpp_lib_ranges_zip 202110L [C++2b] __cpp_lib_to_underlying 202102L [C++2b] __cpp_lib_tuples_by_type 201304L [C++14] */ @@ -50,6 +51,10 @@ # error "__cpp_lib_integer_sequence should not be defined before c++14" # endif +# ifdef __cpp_lib_ranges_zip +# error "__cpp_lib_ranges_zip should not be defined before c++2b" +# endif + # ifdef __cpp_lib_to_underlying # error "__cpp_lib_to_underlying should not be defined before c++2b" # endif @@ -86,6 +91,10 @@ # error "__cpp_lib_integer_sequence should have the value 201304L in c++14" # endif +# ifdef __cpp_lib_ranges_zip +# error "__cpp_lib_ranges_zip should not be defined before c++2b" +# endif + # ifdef __cpp_lib_to_underlying # error "__cpp_lib_to_underlying should not be defined before c++2b" # endif @@ -128,6 +137,10 @@ # error "__cpp_lib_integer_sequence should have the value 201304L in c++17" # endif +# ifdef __cpp_lib_ranges_zip +# error "__cpp_lib_ranges_zip should not be defined before c++2b" +# endif + # ifdef __cpp_lib_to_underlying # error "__cpp_lib_to_underlying should not be defined before c++2b" # endif @@ -182,6 +195,10 @@ # error "__cpp_lib_integer_sequence should have the value 201304L in c++20" # endif +# ifdef __cpp_lib_ranges_zip +# error "__cpp_lib_ranges_zip should not be defined before c++2b" +# endif + # ifdef __cpp_lib_to_underlying # error "__cpp_lib_to_underlying should not be defined before c++2b" # endif @@ -236,6 +253,19 @@ # error "__cpp_lib_integer_sequence should have the value 201304L in c++2b" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_ranges_zip +# error "__cpp_lib_ranges_zip should be defined in c++2b" +# endif +# if __cpp_lib_ranges_zip != 202110L +# error "__cpp_lib_ranges_zip should have the value 202110L in c++2b" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_ranges_zip +# error "__cpp_lib_ranges_zip should not be defined because it is unimplemented in libc++!" +# endif +# endif + # ifndef __cpp_lib_to_underlying # error "__cpp_lib_to_underlying should be defined in c++2b" # 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 @@ -17,12 +17,14 @@ /* Constant Value __cpp_lib_addressof_constexpr 201603L [C++17] + __cpp_lib_allocate_at_least 202106L [C++2b] __cpp_lib_allocator_traits_is_always_equal 201411L [C++17] __cpp_lib_any 201606L [C++17] __cpp_lib_apply 201603L [C++17] __cpp_lib_array_constexpr 201603L [C++17] 201811L [C++20] __cpp_lib_as_const 201510L [C++17] + __cpp_lib_associative_heterogeneous_erasure 202110L [C++2b] __cpp_lib_assume_aligned 201811L [C++20] __cpp_lib_atomic_flag_test 201907L [C++20] __cpp_lib_atomic_float 201711L [C++20] @@ -57,6 +59,7 @@ __cpp_lib_constexpr_string 201811L [C++20] __cpp_lib_constexpr_string_view 201811L [C++20] __cpp_lib_constexpr_tuple 201811L [C++20] + __cpp_lib_constexpr_typeinfo 202106L [C++2b] __cpp_lib_constexpr_utility 201811L [C++20] __cpp_lib_constexpr_vector 201907L [C++20] __cpp_lib_coroutine 201902L [C++20] @@ -82,6 +85,7 @@ __cpp_lib_integral_constant_callable 201304L [C++14] __cpp_lib_interpolate 201902L [C++20] __cpp_lib_invoke 201411L [C++17] + __cpp_lib_invoke_r 202106L [C++2b] __cpp_lib_is_aggregate 201703L [C++17] __cpp_lib_is_constant_evaluated 201811L [C++20] __cpp_lib_is_final 201402L [C++14] @@ -105,15 +109,19 @@ __cpp_lib_math_special_functions 201603L [C++17] __cpp_lib_memory_resource 201603L [C++17] __cpp_lib_monadic_optional 202110L [C++2b] + __cpp_lib_move_only_function 202110L [C++2b] __cpp_lib_node_extract 201606L [C++17] __cpp_lib_nonmember_container_access 201411L [C++17] __cpp_lib_not_fn 201603L [C++17] __cpp_lib_null_iterators 201304L [C++14] __cpp_lib_optional 201606L [C++17] + __cpp_lib_out_ptr 202106L [C++2b] __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_ranges_starts_ends_with 202106L [C++2b] + __cpp_lib_ranges_zip 202110L [C++2b] __cpp_lib_raw_memory_algorithms 201606L [C++17] __cpp_lib_remove_cvref 201711L [C++20] __cpp_lib_result_of_sfinae 201210L [C++14] @@ -129,6 +137,7 @@ __cpp_lib_smart_ptr_for_overwrite 202002L [C++20] __cpp_lib_source_location 201907L [C++20] __cpp_lib_span 202002L [C++20] + __cpp_lib_spanstream 202106L [C++2b] __cpp_lib_ssize 201902L [C++20] __cpp_lib_stacktrace 202011L [C++2b] __cpp_lib_starts_ends_with 201711L [C++20] @@ -148,6 +157,7 @@ 201510L [C++17] __cpp_lib_tuple_element_t 201402L [C++14] __cpp_lib_tuples_by_type 201304L [C++14] + __cpp_lib_type_identity 201806L [C++20] __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] @@ -165,6 +175,10 @@ # error "__cpp_lib_addressof_constexpr should not be defined before c++17" # endif +# ifdef __cpp_lib_allocate_at_least +# error "__cpp_lib_allocate_at_least should not be defined before c++2b" +# endif + # ifdef __cpp_lib_allocator_traits_is_always_equal # error "__cpp_lib_allocator_traits_is_always_equal should not be defined before c++17" # endif @@ -185,6 +199,10 @@ # error "__cpp_lib_as_const should not be defined before c++17" # endif +# ifdef __cpp_lib_associative_heterogeneous_erasure +# error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++2b" +# endif + # ifdef __cpp_lib_assume_aligned # error "__cpp_lib_assume_aligned should not be defined before c++20" # endif @@ -321,6 +339,10 @@ # error "__cpp_lib_constexpr_tuple should not be defined before c++20" # endif +# ifdef __cpp_lib_constexpr_typeinfo +# error "__cpp_lib_constexpr_typeinfo should not be defined before c++2b" +# endif + # ifdef __cpp_lib_constexpr_utility # error "__cpp_lib_constexpr_utility should not be defined before c++20" # endif @@ -417,6 +439,10 @@ # error "__cpp_lib_invoke should not be defined before c++17" # endif +# ifdef __cpp_lib_invoke_r +# error "__cpp_lib_invoke_r should not be defined before c++2b" +# endif + # ifdef __cpp_lib_is_aggregate # error "__cpp_lib_is_aggregate should not be defined before c++17" # endif @@ -509,6 +535,10 @@ # error "__cpp_lib_monadic_optional should not be defined before c++2b" # endif +# ifdef __cpp_lib_move_only_function +# error "__cpp_lib_move_only_function should not be defined before c++2b" +# endif + # ifdef __cpp_lib_node_extract # error "__cpp_lib_node_extract should not be defined before c++17" # endif @@ -529,6 +559,10 @@ # error "__cpp_lib_optional should not be defined before c++17" # endif +# ifdef __cpp_lib_out_ptr +# error "__cpp_lib_out_ptr should not be defined before c++2b" +# endif + # ifdef __cpp_lib_parallel_algorithm # error "__cpp_lib_parallel_algorithm should not be defined before c++17" # endif @@ -545,6 +579,14 @@ # error "__cpp_lib_ranges should not be defined before c++20" # endif +# ifdef __cpp_lib_ranges_starts_ends_with +# error "__cpp_lib_ranges_starts_ends_with should not be defined before c++2b" +# endif + +# ifdef __cpp_lib_ranges_zip +# error "__cpp_lib_ranges_zip should not be defined before c++2b" +# endif + # ifdef __cpp_lib_raw_memory_algorithms # error "__cpp_lib_raw_memory_algorithms should not be defined before c++17" # endif @@ -605,6 +647,10 @@ # error "__cpp_lib_span should not be defined before c++20" # endif +# ifdef __cpp_lib_spanstream +# error "__cpp_lib_spanstream should not be defined before c++2b" +# endif + # ifdef __cpp_lib_ssize # error "__cpp_lib_ssize should not be defined before c++20" # endif @@ -673,6 +719,10 @@ # error "__cpp_lib_tuples_by_type should not be defined before c++14" # endif +# ifdef __cpp_lib_type_identity +# error "__cpp_lib_type_identity should not be defined before c++20" +# endif + # ifdef __cpp_lib_type_trait_variable_templates # error "__cpp_lib_type_trait_variable_templates should not be defined before c++17" # endif @@ -703,6 +753,10 @@ # error "__cpp_lib_addressof_constexpr should not be defined before c++17" # endif +# ifdef __cpp_lib_allocate_at_least +# error "__cpp_lib_allocate_at_least should not be defined before c++2b" +# endif + # ifdef __cpp_lib_allocator_traits_is_always_equal # error "__cpp_lib_allocator_traits_is_always_equal should not be defined before c++17" # endif @@ -723,6 +777,10 @@ # error "__cpp_lib_as_const should not be defined before c++17" # endif +# ifdef __cpp_lib_associative_heterogeneous_erasure +# error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++2b" +# endif + # ifdef __cpp_lib_assume_aligned # error "__cpp_lib_assume_aligned should not be defined before c++20" # endif @@ -865,6 +923,10 @@ # error "__cpp_lib_constexpr_tuple should not be defined before c++20" # endif +# ifdef __cpp_lib_constexpr_typeinfo +# error "__cpp_lib_constexpr_typeinfo should not be defined before c++2b" +# endif + # ifdef __cpp_lib_constexpr_utility # error "__cpp_lib_constexpr_utility should not be defined before c++20" # endif @@ -973,6 +1035,10 @@ # error "__cpp_lib_invoke should not be defined before c++17" # endif +# ifdef __cpp_lib_invoke_r +# error "__cpp_lib_invoke_r should not be defined before c++2b" +# endif + # ifdef __cpp_lib_is_aggregate # error "__cpp_lib_is_aggregate should not be defined before c++17" # endif @@ -1077,6 +1143,10 @@ # error "__cpp_lib_monadic_optional should not be defined before c++2b" # endif +# ifdef __cpp_lib_move_only_function +# error "__cpp_lib_move_only_function should not be defined before c++2b" +# endif + # ifdef __cpp_lib_node_extract # error "__cpp_lib_node_extract should not be defined before c++17" # endif @@ -1100,6 +1170,10 @@ # error "__cpp_lib_optional should not be defined before c++17" # endif +# ifdef __cpp_lib_out_ptr +# error "__cpp_lib_out_ptr should not be defined before c++2b" +# endif + # ifdef __cpp_lib_parallel_algorithm # error "__cpp_lib_parallel_algorithm should not be defined before c++17" # endif @@ -1119,6 +1193,14 @@ # error "__cpp_lib_ranges should not be defined before c++20" # endif +# ifdef __cpp_lib_ranges_starts_ends_with +# error "__cpp_lib_ranges_starts_ends_with should not be defined before c++2b" +# endif + +# ifdef __cpp_lib_ranges_zip +# error "__cpp_lib_ranges_zip should not be defined before c++2b" +# endif + # ifdef __cpp_lib_raw_memory_algorithms # error "__cpp_lib_raw_memory_algorithms should not be defined before c++17" # endif @@ -1194,6 +1276,10 @@ # error "__cpp_lib_span should not be defined before c++20" # endif +# ifdef __cpp_lib_spanstream +# error "__cpp_lib_spanstream should not be defined before c++2b" +# endif + # ifdef __cpp_lib_ssize # error "__cpp_lib_ssize should not be defined before c++20" # endif @@ -1277,6 +1363,10 @@ # error "__cpp_lib_tuples_by_type should have the value 201304L in c++14" # endif +# ifdef __cpp_lib_type_identity +# error "__cpp_lib_type_identity should not be defined before c++20" +# endif + # ifdef __cpp_lib_type_trait_variable_templates # error "__cpp_lib_type_trait_variable_templates should not be defined before c++17" # endif @@ -1310,6 +1400,10 @@ # error "__cpp_lib_addressof_constexpr should have the value 201603L in c++17" # endif +# ifdef __cpp_lib_allocate_at_least +# error "__cpp_lib_allocate_at_least should not be defined before c++2b" +# endif + # ifndef __cpp_lib_allocator_traits_is_always_equal # error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++17" # endif @@ -1345,6 +1439,10 @@ # error "__cpp_lib_as_const should have the value 201510L in c++17" # endif +# ifdef __cpp_lib_associative_heterogeneous_erasure +# error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++2b" +# endif + # ifdef __cpp_lib_assume_aligned # error "__cpp_lib_assume_aligned should not be defined before c++20" # endif @@ -1511,6 +1609,10 @@ # error "__cpp_lib_constexpr_tuple should not be defined before c++20" # endif +# ifdef __cpp_lib_constexpr_typeinfo +# error "__cpp_lib_constexpr_typeinfo should not be defined before c++2b" +# endif + # ifdef __cpp_lib_constexpr_utility # error "__cpp_lib_constexpr_utility should not be defined before c++20" # endif @@ -1664,6 +1766,10 @@ # error "__cpp_lib_invoke should have the value 201411L in c++17" # endif +# ifdef __cpp_lib_invoke_r +# error "__cpp_lib_invoke_r should not be defined before c++2b" +# endif + # ifndef __cpp_lib_is_aggregate # error "__cpp_lib_is_aggregate should be defined in c++17" # endif @@ -1807,6 +1913,10 @@ # error "__cpp_lib_monadic_optional should not be defined before c++2b" # endif +# ifdef __cpp_lib_move_only_function +# error "__cpp_lib_move_only_function should not be defined before c++2b" +# endif + # ifndef __cpp_lib_node_extract # error "__cpp_lib_node_extract should be defined in c++17" # endif @@ -1842,6 +1952,10 @@ # error "__cpp_lib_optional should have the value 201606L in c++17" # endif +# ifdef __cpp_lib_out_ptr +# error "__cpp_lib_out_ptr should not be defined before c++2b" +# endif + # if !defined(_LIBCPP_VERSION) # ifndef __cpp_lib_parallel_algorithm # error "__cpp_lib_parallel_algorithm should be defined in c++17" @@ -1870,6 +1984,14 @@ # error "__cpp_lib_ranges should not be defined before c++20" # endif +# ifdef __cpp_lib_ranges_starts_ends_with +# error "__cpp_lib_ranges_starts_ends_with should not be defined before c++2b" +# endif + +# ifdef __cpp_lib_ranges_zip +# error "__cpp_lib_ranges_zip should not be defined before c++2b" +# endif + # ifndef __cpp_lib_raw_memory_algorithms # error "__cpp_lib_raw_memory_algorithms should be defined in c++17" # endif @@ -1969,6 +2091,10 @@ # error "__cpp_lib_span should not be defined before c++20" # endif +# ifdef __cpp_lib_spanstream +# error "__cpp_lib_spanstream should not be defined before c++2b" +# endif + # ifdef __cpp_lib_ssize # error "__cpp_lib_ssize should not be defined before c++20" # endif @@ -2064,6 +2190,10 @@ # error "__cpp_lib_tuples_by_type should have the value 201304L in c++17" # endif +# ifdef __cpp_lib_type_identity +# error "__cpp_lib_type_identity should not be defined before c++20" +# endif + # ifndef __cpp_lib_type_trait_variable_templates # error "__cpp_lib_type_trait_variable_templates should be defined in c++17" # endif @@ -2112,6 +2242,10 @@ # error "__cpp_lib_addressof_constexpr should have the value 201603L in c++20" # endif +# ifdef __cpp_lib_allocate_at_least +# error "__cpp_lib_allocate_at_least should not be defined before c++2b" +# endif + # ifndef __cpp_lib_allocator_traits_is_always_equal # error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++20" # endif @@ -2147,6 +2281,10 @@ # error "__cpp_lib_as_const should have the value 201510L in c++20" # endif +# ifdef __cpp_lib_associative_heterogeneous_erasure +# error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++2b" +# endif + # if !defined(_LIBCPP_VERSION) # ifndef __cpp_lib_assume_aligned # error "__cpp_lib_assume_aligned should be defined in c++20" @@ -2442,6 +2580,10 @@ # error "__cpp_lib_constexpr_tuple should have the value 201811L in c++20" # endif +# ifdef __cpp_lib_constexpr_typeinfo +# error "__cpp_lib_constexpr_typeinfo should not be defined before c++2b" +# endif + # ifndef __cpp_lib_constexpr_utility # error "__cpp_lib_constexpr_utility should be defined in c++20" # endif @@ -2652,6 +2794,10 @@ # error "__cpp_lib_invoke should have the value 201411L in c++20" # endif +# ifdef __cpp_lib_invoke_r +# error "__cpp_lib_invoke_r should not be defined before c++2b" +# endif + # ifndef __cpp_lib_is_aggregate # error "__cpp_lib_is_aggregate should be defined in c++20" # endif @@ -2849,6 +2995,10 @@ # error "__cpp_lib_monadic_optional should not be defined before c++2b" # endif +# ifdef __cpp_lib_move_only_function +# error "__cpp_lib_move_only_function should not be defined before c++2b" +# endif + # ifndef __cpp_lib_node_extract # error "__cpp_lib_node_extract should be defined in c++20" # endif @@ -2884,6 +3034,10 @@ # error "__cpp_lib_optional should have the value 201606L in c++20" # endif +# ifdef __cpp_lib_out_ptr +# error "__cpp_lib_out_ptr should not be defined before c++2b" +# endif + # if !defined(_LIBCPP_VERSION) # ifndef __cpp_lib_parallel_algorithm # error "__cpp_lib_parallel_algorithm should be defined in c++20" @@ -2930,6 +3084,14 @@ # endif # endif +# ifdef __cpp_lib_ranges_starts_ends_with +# error "__cpp_lib_ranges_starts_ends_with should not be defined before c++2b" +# endif + +# ifdef __cpp_lib_ranges_zip +# error "__cpp_lib_ranges_zip should not be defined before c++2b" +# endif + # ifndef __cpp_lib_raw_memory_algorithms # error "__cpp_lib_raw_memory_algorithms should be defined in c++20" # endif @@ -3065,6 +3227,10 @@ # error "__cpp_lib_span should have the value 202002L in c++20" # endif +# ifdef __cpp_lib_spanstream +# error "__cpp_lib_spanstream should not be defined before c++2b" +# endif + # ifndef __cpp_lib_ssize # error "__cpp_lib_ssize should be defined in c++20" # endif @@ -3190,6 +3356,13 @@ # error "__cpp_lib_tuples_by_type should have the value 201304L in c++20" # endif +# ifndef __cpp_lib_type_identity +# error "__cpp_lib_type_identity should be defined in c++20" +# endif +# if __cpp_lib_type_identity != 201806L +# error "__cpp_lib_type_identity should have the value 201806L in c++20" +# endif + # ifndef __cpp_lib_type_trait_variable_templates # error "__cpp_lib_type_trait_variable_templates should be defined in c++20" # endif @@ -3241,6 +3414,19 @@ # error "__cpp_lib_addressof_constexpr should have the value 201603L in c++2b" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_allocate_at_least +# error "__cpp_lib_allocate_at_least should be defined in c++2b" +# endif +# if __cpp_lib_allocate_at_least != 202106L +# error "__cpp_lib_allocate_at_least should have the value 202106L in c++2b" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_allocate_at_least +# error "__cpp_lib_allocate_at_least should not be defined because it is unimplemented in libc++!" +# endif +# endif + # ifndef __cpp_lib_allocator_traits_is_always_equal # error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++2b" # endif @@ -3276,6 +3462,19 @@ # error "__cpp_lib_as_const should have the value 201510L in c++2b" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_associative_heterogeneous_erasure +# error "__cpp_lib_associative_heterogeneous_erasure should be defined in c++2b" +# endif +# if __cpp_lib_associative_heterogeneous_erasure != 202110L +# error "__cpp_lib_associative_heterogeneous_erasure should have the value 202110L in c++2b" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_associative_heterogeneous_erasure +# error "__cpp_lib_associative_heterogeneous_erasure should not be defined because it is unimplemented in libc++!" +# endif +# endif + # if !defined(_LIBCPP_VERSION) # ifndef __cpp_lib_assume_aligned # error "__cpp_lib_assume_aligned should be defined in c++2b" @@ -3574,6 +3773,19 @@ # error "__cpp_lib_constexpr_tuple should have the value 201811L in c++2b" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_constexpr_typeinfo +# error "__cpp_lib_constexpr_typeinfo should be defined in c++2b" +# endif +# if __cpp_lib_constexpr_typeinfo != 202106L +# error "__cpp_lib_constexpr_typeinfo should have the value 202106L in c++2b" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_constexpr_typeinfo +# error "__cpp_lib_constexpr_typeinfo should not be defined because it is unimplemented in libc++!" +# endif +# endif + # ifndef __cpp_lib_constexpr_utility # error "__cpp_lib_constexpr_utility should be defined in c++2b" # endif @@ -3784,6 +3996,19 @@ # error "__cpp_lib_invoke should have the value 201411L in c++2b" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_invoke_r +# error "__cpp_lib_invoke_r should be defined in c++2b" +# endif +# if __cpp_lib_invoke_r != 202106L +# error "__cpp_lib_invoke_r should have the value 202106L in c++2b" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_invoke_r +# error "__cpp_lib_invoke_r should not be defined because it is unimplemented in libc++!" +# endif +# endif + # ifndef __cpp_lib_is_aggregate # error "__cpp_lib_is_aggregate should be defined in c++2b" # endif @@ -3987,6 +4212,19 @@ # error "__cpp_lib_monadic_optional should have the value 202110L in c++2b" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_move_only_function +# error "__cpp_lib_move_only_function should be defined in c++2b" +# endif +# if __cpp_lib_move_only_function != 202110L +# error "__cpp_lib_move_only_function should have the value 202110L in c++2b" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_move_only_function +# error "__cpp_lib_move_only_function should not be defined because it is unimplemented in libc++!" +# endif +# endif + # ifndef __cpp_lib_node_extract # error "__cpp_lib_node_extract should be defined in c++2b" # endif @@ -4022,6 +4260,19 @@ # error "__cpp_lib_optional should have the value 201606L in c++2b" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_out_ptr +# error "__cpp_lib_out_ptr should be defined in c++2b" +# endif +# if __cpp_lib_out_ptr != 202106L +# error "__cpp_lib_out_ptr should have the value 202106L in c++2b" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_out_ptr +# error "__cpp_lib_out_ptr should not be defined because it is unimplemented in libc++!" +# endif +# endif + # if !defined(_LIBCPP_VERSION) # ifndef __cpp_lib_parallel_algorithm # error "__cpp_lib_parallel_algorithm should be defined in c++2b" @@ -4068,6 +4319,32 @@ # endif # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_ranges_starts_ends_with +# error "__cpp_lib_ranges_starts_ends_with should be defined in c++2b" +# endif +# if __cpp_lib_ranges_starts_ends_with != 202106L +# error "__cpp_lib_ranges_starts_ends_with should have the value 202106L in c++2b" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_ranges_starts_ends_with +# error "__cpp_lib_ranges_starts_ends_with should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_ranges_zip +# error "__cpp_lib_ranges_zip should be defined in c++2b" +# endif +# if __cpp_lib_ranges_zip != 202110L +# error "__cpp_lib_ranges_zip should have the value 202110L in c++2b" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_ranges_zip +# error "__cpp_lib_ranges_zip should not be defined because it is unimplemented in libc++!" +# endif +# endif + # ifndef __cpp_lib_raw_memory_algorithms # error "__cpp_lib_raw_memory_algorithms should be defined in c++2b" # endif @@ -4203,6 +4480,19 @@ # error "__cpp_lib_span should have the value 202002L in c++2b" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_spanstream +# error "__cpp_lib_spanstream should be defined in c++2b" +# endif +# if __cpp_lib_spanstream != 202106L +# error "__cpp_lib_spanstream should have the value 202106L in c++2b" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_spanstream +# error "__cpp_lib_spanstream should not be defined because it is unimplemented in libc++!" +# endif +# endif + # ifndef __cpp_lib_ssize # error "__cpp_lib_ssize should be defined in c++2b" # endif @@ -4352,6 +4642,13 @@ # error "__cpp_lib_tuples_by_type should have the value 201304L in c++2b" # endif +# ifndef __cpp_lib_type_identity +# error "__cpp_lib_type_identity should be defined in c++2b" +# endif +# if __cpp_lib_type_identity != 201806L +# error "__cpp_lib_type_identity should have the value 201806L in c++2b" +# endif + # ifndef __cpp_lib_type_trait_variable_templates # error "__cpp_lib_type_trait_variable_templates should be defined in c++2b" # 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 @@ -66,6 +66,11 @@ "name": "__cpp_lib_addressof_constexpr", "values": { "c++17": 201603 }, "headers": ["memory"], + }, { + "name": "__cpp_lib_allocate_at_least", + "values": { "c++2b": 202106 }, + "headers": ["memory"], + "unimplemented": True, }, { "name": "__cpp_lib_allocator_traits_is_always_equal", "values": { "c++17": 201411 }, @@ -86,6 +91,11 @@ "name": "__cpp_lib_as_const", "values": { "c++17": 201510 }, "headers": ["utility"], + }, { + "name": "__cpp_lib_associative_heterogeneous_erasure", + "values": { "c++2b": 202110 }, + "headers": ["map", "set", "unordered_map", "unordered_set"], + "unimplemented": True, }, { "name": "__cpp_lib_assume_aligned", "values": { "c++20": 201811 }, @@ -235,6 +245,11 @@ "name": "__cpp_lib_constexpr_tuple", "values": { "c++20": 201811 }, "headers": ["tuple"], + }, { + "name": "__cpp_lib_constexpr_typeinfo", + "values": { "c++2b": 202106 }, + "headers": ["typeinfo"], + "unimplemented": True, }, { "name": "__cpp_lib_constexpr_utility", "values": { "c++20": 201811 }, @@ -343,6 +358,11 @@ "name": "__cpp_lib_invoke", "values": { "c++17": 201411 }, "headers": ["functional"], + }, { + "name": "__cpp_lib_invoke_r", + "values": { "c++2b": 202106 }, + "headers": ["functional"], + "unimplemented": True, }, { "name": "__cpp_lib_is_aggregate", "values": { "c++17": 201703 }, @@ -446,6 +466,11 @@ "name": "__cpp_lib_monadic_optional", "values": { "c++2b": 202110 }, "headers": ["optional"], + }, { + "name": "__cpp_lib_move_only_function", + "values": { "c++2b": 202110 }, + "headers": ["functional"], + "unimplemented": True, }, { "name": "__cpp_lib_node_extract", "values": { "c++17": 201606 }, @@ -466,6 +491,11 @@ "name": "__cpp_lib_optional", "values": { "c++17": 201606 }, "headers": ["optional"], + }, { + "name": "__cpp_lib_out_ptr", + "values": { "c++2b": 202106 }, + "headers": ["memory"], + "unimplemented": True, }, { "name": "__cpp_lib_parallel_algorithm", "values": { "c++17": 201603 }, @@ -485,6 +515,16 @@ "values": { "c++20": 201811 }, "headers": ["algorithm", "functional", "iterator", "memory", "ranges"], "unimplemented": True, + }, { + "name": "__cpp_lib_ranges_starts_ends_with", + "values": { "c++2b": 202106 }, + "headers": ["algorithm"], + "unimplemented": True, + }, { + "name": "__cpp_lib_ranges_zip", + "values": { "c++2b": 202110 }, + "headers": ["ranges", "tuple", "utility"], + "unimplemented": True, }, { "name": "__cpp_lib_raw_memory_algorithms", "values": { "c++17": 201606 }, @@ -553,6 +593,11 @@ "name": "__cpp_lib_span", "values": { "c++20": 202002 }, "headers": ["span"], + }, { + "name": "__cpp_lib_spanstream", + "values": { "c++2b": 202106 }, + "headers": ["spanstream"], + "unimplemented": True, }, { "name": "__cpp_lib_ssize", "values": { "c++20": 201902 }, @@ -626,6 +671,10 @@ "name": "__cpp_lib_tuples_by_type", "values": { "c++14": 201304 }, "headers": ["tuple", "utility"], + }, { + "name": "__cpp_lib_type_identity", + "values": { "c++20": 201806 }, + "headers": ["type_traits"], }, { "name": "__cpp_lib_type_trait_variable_templates", "values": { "c++17": 201510 },