diff --git a/libcxx/docs/FeatureTestMacroTable.rst b/libcxx/docs/FeatureTestMacroTable.rst index 42bf6eb46212d..9b4e46404d658 100644 --- a/libcxx/docs/FeatureTestMacroTable.rst +++ b/libcxx/docs/FeatureTestMacroTable.rst @@ -236,6 +236,8 @@ Status --------------------------------------------------- ----------------- ``__cpp_lib_format`` *unimplemented* --------------------------------------------------- ----------------- + ``__cpp_lib_format_uchar`` *unimplemented* + --------------------------------------------------- ----------------- ``__cpp_lib_generic_unordered_lookup`` ``201811L`` --------------------------------------------------- ----------------- ``__cpp_lib_int_pow2`` ``202002L`` @@ -342,6 +344,8 @@ Status --------------------------------------------------- ----------------- ``__cpp_lib_print`` *unimplemented* --------------------------------------------------- ----------------- + ``__cpp_lib_ranges_as_const`` *unimplemented* + --------------------------------------------------- ----------------- ``__cpp_lib_ranges_as_rvalue`` ``202207L`` --------------------------------------------------- ----------------- ``__cpp_lib_ranges_chunk`` *unimplemented* @@ -378,6 +382,8 @@ Status --------------------------------------------------- ----------------- ``__cpp_lib_to_underlying`` ``202102L`` --------------------------------------------------- ----------------- + ``__cpp_lib_tuple_like`` *unimplemented* + --------------------------------------------------- ----------------- ``__cpp_lib_unreachable`` ``202202L`` --------------------------------------------------- ----------------- **C++ 26** @@ -392,18 +398,44 @@ Status --------------------------------------------------- ----------------- ``__cpp_lib_copyable_function`` *unimplemented* --------------------------------------------------- ----------------- + ``__cpp_lib_debugging`` *unimplemented* + --------------------------------------------------- ----------------- + ``__cpp_lib_freestanding_algorithm`` *unimplemented* + --------------------------------------------------- ----------------- + ``__cpp_lib_freestanding_array`` *unimplemented* + --------------------------------------------------- ----------------- + ``__cpp_lib_freestanding_cstring`` *unimplemented* + --------------------------------------------------- ----------------- + ``__cpp_lib_freestanding_expected`` *unimplemented* + --------------------------------------------------- ----------------- + ``__cpp_lib_freestanding_mdspan`` *unimplemented* + --------------------------------------------------- ----------------- + ``__cpp_lib_freestanding_optional`` *unimplemented* + --------------------------------------------------- ----------------- + ``__cpp_lib_freestanding_string_view`` *unimplemented* + --------------------------------------------------- ----------------- + ``__cpp_lib_freestanding_variant`` *unimplemented* + --------------------------------------------------- ----------------- ``__cpp_lib_fstream_native_handle`` *unimplemented* --------------------------------------------------- ----------------- ``__cpp_lib_function_ref`` *unimplemented* --------------------------------------------------- ----------------- ``__cpp_lib_hazard_pointer`` *unimplemented* --------------------------------------------------- ----------------- + ``__cpp_lib_linalg`` *unimplemented* + --------------------------------------------------- ----------------- + ``__cpp_lib_out_ptr`` *unimplemented* + --------------------------------------------------- ----------------- ``__cpp_lib_ratio`` ``202306L`` --------------------------------------------------- ----------------- ``__cpp_lib_rcu`` *unimplemented* --------------------------------------------------- ----------------- + ``__cpp_lib_saturation_arithmetic`` *unimplemented* + --------------------------------------------------- ----------------- ``__cpp_lib_smart_ptr_owner_equality`` *unimplemented* --------------------------------------------------- ----------------- + ``__cpp_lib_span_initializer_list`` *unimplemented* + --------------------------------------------------- ----------------- ``__cpp_lib_sstream_from_string_view`` *unimplemented* --------------------------------------------------- ----------------- ``__cpp_lib_submdspan`` *unimplemented* @@ -412,6 +444,8 @@ Status --------------------------------------------------- ----------------- ``__cpp_lib_to_chars`` *unimplemented* --------------------------------------------------- ----------------- + ``__cpp_lib_tuple_like`` *unimplemented* + --------------------------------------------------- ----------------- ``__cpp_lib_within_lifetime`` *unimplemented* =================================================== ================= diff --git a/libcxx/docs/Helpers/Styles.rst b/libcxx/docs/Helpers/Styles.rst index 31352efde608f..67560351d7343 100644 --- a/libcxx/docs/Helpers/Styles.rst +++ b/libcxx/docs/Helpers/Styles.rst @@ -23,6 +23,7 @@ .spaceship { background-color: #B0E0E6; } .fc { background-color: #8EAF63; white-space:nowrap; } .concurrency { background-color: #909090; white-space:nowrap; } + .dr { background-color: #FFFF99; } .. role:: notstarted @@ -45,6 +46,7 @@ .. role:: spaceship .. role:: fc .. role:: concurrency +.. role:: dr .. |chrono| replace:: :chrono:`chrono` .. |format| replace:: :format:`format` @@ -52,6 +54,7 @@ .. |spaceship| replace:: :spaceship:`spaceship` .. |flat_containers| replace:: :fc:`flat containers` .. |concurrency TS| replace:: :concurrency:`concurrency TS` +.. |DR| replace:: :dr:`Defect Report` .. |sect| unicode:: U+00A7 .. |hellip| unicode:: U+2026 diff --git a/libcxx/docs/Status/Cxx2cIssues.csv b/libcxx/docs/Status/Cxx2cIssues.csv index a928b69ea10c4..fe0f13f6e8cb2 100644 --- a/libcxx/docs/Status/Cxx2cIssues.csv +++ b/libcxx/docs/Status/Cxx2cIssues.csv @@ -17,6 +17,28 @@ "`3938 `__","Cannot use ``std::expected`` monadic ops with move-only ``error_type``","Varna June 2023","|Complete|","18.0","" "`3940 `__","``std::expected::value()`` also needs ``E`` to be copy constructible","Varna June 2023","","","" "","","","","","" +"`2392 `__","""character type"" is used but not defined","Kona November 2023","","","" +"`3203 `__","``span`` element access invalidation","Kona November 2023","","","" +"`3305 `__","``any_cast``","Kona November 2023","","","" +"`3431 `__","``<=>`` for containers should require ``three_way_comparable`` instead of ``<=>``","Kona November 2023","","","" +"`3749 `__","``common_iterator`` should handle integer-class difference types","Kona November 2023","","","" +"`3809 `__","Is ``std::subtract_with_carry_engine`` supposed to work","Kona November 2023","","","" +"`3892 `__","Incorrect formatting of nested ranges and tuples","Kona November 2023","|Complete|","17.0","|format|" +"`3897 `__","``inout_ptr`` will not update raw pointer to 0","Kona November 2023","","","" +"`3946 `__","The definition of ``const_iterator_t`` should be reworked","Kona November 2023","","","" +"`3947 `__","Unexpected constraints on ``adjacent_transform_view::base()``","Kona November 2023","","","|ranges|" +"`3948 `__","``possibly-const-range and as-const-pointer`` should be ``noexcept``","Kona November 2023","","","|ranges|" +"`3949 `__","``std::atomic``'s trivial destructor dropped in C++17 spec wording","Kona November 2023","","","" +"`3951 `__","[expected.object.swap]: Using ``value()`` instead of ``has_value()``","Kona November 2023","","","" +"`3953 `__","``iter_move`` for ``common_iterator`` and ``counted_iterator`` should return ``decltype(auto)``","Kona November 2023","","","|ranges|" +"`3957 `__","[container.alloc.reqmts] The value category of v should be claimed","Kona November 2023","","","" +"`3965 `__","Incorrect example in [format.string.escaped] p3 for formatting of combining characters","Kona November 2023","","","|format|" +"`3970 `__","[mdspan.syn] Missing definition of ``full_extent_t`` and ``full_extent``","Kona November 2023","","","" +"`3973 `__","Monadic operations should be ADL-proof","Kona November 2023","","","" +"`3974 `__","``mdspan::operator[]`` should not copy ``OtherIndexTypes``","Kona November 2023","","","" +"`3987 `__","Including ```` doesn't provide ``std::begin``/``end``","Kona November 2023","","","|flat_containers|" +"`3990 `__","Program-defined specializations of ``std::tuple`` and ``std::variant`` can't be properly supported","Kona November 2023","","","" +"`4001 `__","``iota_view`` should provide ``empty``","Kona November 2023","","","|ranges|" +"","","","","","" "`3343 `__","Ordering of calls to ``unlock()`` and ``notify_all()`` in Effects element of ``notify_all_at_thread_exit()`` should be reversed","Not Yet Adopted","|Complete|","16.0","" -"`3892 `__","Incorrect formatting of nested ranges and tuples","Not Yet Adopted","|Complete|","17.0","|format|" "","","","","","" diff --git a/libcxx/docs/Status/Cxx2cPapers.csv b/libcxx/docs/Status/Cxx2cPapers.csv index 0590e2d487c27..eb5398f66d0e0 100644 --- a/libcxx/docs/Status/Cxx2cPapers.csv +++ b/libcxx/docs/Status/Cxx2cPapers.csv @@ -27,3 +27,22 @@ "`P2714R1 `__","LWG","Bind front and back to NTTP callables","Varna June 2023","","","" "`P2630R4 `__","LWG","``submdspan``","Varna June 2023","","","" "","","","","","","" +"`P0543R3 `__","LWG","Saturation arithmetic","Kona November 2023","","","" +"`P2407R5 `__","LWG","Freestanding Library: Partial Classes","Kona November 2023","","","" +"`P2546R5 `__","LWG","Debugging Support","Kona November 2023","","","" +"`P2905R2 `__","LWG","Runtime format strings","Kona November 2023","","","|format| |DR|" +"`P2918R2 `__","LWG","Runtime format strings II","Kona November 2023","","","|format|" +"`P2909R4 `__","LWG","Fix formatting of code units as integers (Dude, where’s my ``char``?)","Kona November 2023","","","|format| |DR|" +"`P0952R2 `__","LWG","A new specification for ``std::generate_canonical``","Kona November 2023","","","" +"`P2447R6 `__","LWG","``std::span`` over an initializer list","Kona November 2023","","","" +"`P2821R5 `__","LWG","``span.at()``","Kona November 2023","","","" +"`P2868R3 `__","LWG","Remove Deprecated ``std::allocator`` Typedef From C++26","Kona November 2023","","","" +"`P2870R3 `__","LWG","Remove ``basic_string::reserve()`` From C++26","Kona November 2023","","","" +"`P2871R3 `__","LWG","Remove Deprecated Unicode Conversion Facets from C++26","Kona November 2023","","","" +"`P2819R2 `__","LWG","Add tuple protocol to complex","Kona November 2023","","","" +"`P2937R0 `__","LWG","Freestanding: Remove ``strtok``","Kona November 2023","","","" +"`P2833R2 `__","LWG","Freestanding Library: inout expected span","Kona November 2023","","","" +"`P2836R1 `__","LWG","``std::basic_const_iterator`` should follow its underlying type's convertibility","Kona November 2023","","","|DR|" +"`P2264R7 `__","LWG","Make ``assert()`` macro user friendly for C and C++","Kona November 2023","","","" +"`P1673R13 `__","LWG","A free function linear algebra interface based on the BLAS","Kona November 2023","","","" +"","","","","","","" diff --git a/libcxx/include/version b/libcxx/include/version index ec0cb08134923..0db366af9e42e 100644 --- a/libcxx/include/version +++ b/libcxx/include/version @@ -79,6 +79,7 @@ __cpp_lib_constexpr_utility 201811L __cpp_lib_constexpr_vector 201907L __cpp_lib_copyable_function 202306L __cpp_lib_coroutine 201902L +__cpp_lib_debugging 202311L __cpp_lib_destroying_delete 201806L __cpp_lib_enable_shared_from_this 201603L __cpp_lib_endian 201907L @@ -92,8 +93,17 @@ __cpp_lib_expected 202211L __cpp_lib_filesystem 201703L __cpp_lib_format 202106L __cpp_lib_format_ranges 202207L +__cpp_lib_format_uchar 202311L <> __cpp_lib_formatters 202302L __cpp_lib_forward_like 202207L +__cpp_lib_freestanding_algorithm 202311L +__cpp_lib_freestanding_array 202311L +__cpp_lib_freestanding_cstring 202306L +__cpp_lib_freestanding_expected 202311L +__cpp_lib_freestanding_mdspan 202311L +__cpp_lib_freestanding_optional 202311L +__cpp_lib_freestanding_string_view 202311L +__cpp_lib_freestanding_variant 202311L __cpp_lib_fstream_native_handle 202306L __cpp_lib_function_ref 202306L __cpp_lib_gcd_lcm 201606L @@ -124,6 +134,7 @@ __cpp_lib_is_swappable 201603L __cpp_lib_jthread 201911L __cpp_lib_latch 201907L __cpp_lib_launder 201606L +__cpp_lib_linalg 202311L __cpp_lib_list_remove_return_type 201806L __cpp_lib_logical_traits 201510L __cpp_lib_make_from_tuple 201606L @@ -146,13 +157,15 @@ __cpp_lib_not_fn 201603L __cpp_lib_null_iterators 201304L __cpp_lib_optional 202110L 201606L // C++17 -__cpp_lib_out_ptr 202106L +__cpp_lib_out_ptr 202311L + 202106L // C++23 __cpp_lib_parallel_algorithm 201603L __cpp_lib_polymorphic_allocator 201902L __cpp_lib_print 202207L __cpp_lib_quoted_string_io 201304L __cpp_lib_ranges 202207L +__cpp_lib_ranges_as_const 202207L __cpp_lib_ranges_as_rvalue 202207L __cpp_lib_ranges_chunk 202202L __cpp_lib_ranges_chunk_by 202202L @@ -174,6 +187,7 @@ __cpp_lib_remove_cvref 201711L __cpp_lib_result_of_sfinae 201210L __cpp_lib_robust_nonmodifying_seq_ops 201304L __cpp_lib_sample 201603L +__cpp_lib_saturation_arithmetic 202311L <> __cpp_lib_scoped_lock 201703L __cpp_lib_semaphore 201907L __cpp_lib_shared_mutex 201505L @@ -186,6 +200,7 @@ __cpp_lib_smart_ptr_for_overwrite 202002L __cpp_lib_smart_ptr_owner_equality 202306L __cpp_lib_source_location 201907L __cpp_lib_span 202002L +__cpp_lib_span_initializer_list 202311L __cpp_lib_spanstream 202106L __cpp_lib_ssize 201902L __cpp_lib_sstream_from_string_view 202306L @@ -211,6 +226,9 @@ __cpp_lib_transformation_trait_aliases 201304L __cpp_lib_transparent_operators 201510L 201210L // C++14 __cpp_lib_tuple_element_t 201402L +__cpp_lib_tuple_like 202311L + + 202207L // C++23 __cpp_lib_tuples_by_type 201304L __cpp_lib_type_identity 201806L __cpp_lib_type_trait_variable_templates 201510L @@ -364,6 +382,7 @@ __cpp_lib_within_lifetime 202306L # undef __cpp_lib_execution // # define __cpp_lib_execution 201902L // # define __cpp_lib_format 202106L +// # define __cpp_lib_format_uchar 202311L # define __cpp_lib_generic_unordered_lookup 201811L # define __cpp_lib_int_pow2 202002L # define __cpp_lib_integer_comparison_functions 202002L @@ -435,6 +454,7 @@ __cpp_lib_within_lifetime 202306L # define __cpp_lib_optional 202110L // # define __cpp_lib_out_ptr 202106L // # define __cpp_lib_print 202207L +// # define __cpp_lib_ranges_as_const 202207L # define __cpp_lib_ranges_as_rvalue 202207L // # define __cpp_lib_ranges_chunk 202202L # define __cpp_lib_ranges_chunk_by 202202L @@ -453,6 +473,7 @@ __cpp_lib_within_lifetime 202306L # define __cpp_lib_string_resize_and_overwrite 202110L // # define __cpp_lib_to_string 202306L # define __cpp_lib_to_underlying 202102L +// # define __cpp_lib_tuple_like 202207L # define __cpp_lib_unreachable 202202L #endif @@ -464,17 +485,33 @@ __cpp_lib_within_lifetime 202306L # define __cpp_lib_bind_front 202306L # define __cpp_lib_bitset 202306L // # define __cpp_lib_copyable_function 202306L +// # define __cpp_lib_debugging 202311L +// # define __cpp_lib_freestanding_algorithm 202311L +// # define __cpp_lib_freestanding_array 202311L +// # define __cpp_lib_freestanding_cstring 202306L +// # define __cpp_lib_freestanding_expected 202311L +// # define __cpp_lib_freestanding_mdspan 202311L +// # define __cpp_lib_freestanding_optional 202311L +// # define __cpp_lib_freestanding_string_view 202311L +// # define __cpp_lib_freestanding_variant 202311L // # define __cpp_lib_fstream_native_handle 202306L // # define __cpp_lib_function_ref 202306L // # define __cpp_lib_hazard_pointer 202306L +// # define __cpp_lib_linalg 202311L +# undef __cpp_lib_out_ptr +// # define __cpp_lib_out_ptr 202311L # define __cpp_lib_ratio 202306L // # define __cpp_lib_rcu 202306L +// # define __cpp_lib_saturation_arithmetic 202311L // # define __cpp_lib_smart_ptr_owner_equality 202306L +// # define __cpp_lib_span_initializer_list 202311L // # define __cpp_lib_sstream_from_string_view 202306L // # define __cpp_lib_submdspan 202306L // # define __cpp_lib_text_encoding 202306L # undef __cpp_lib_to_chars // # define __cpp_lib_to_chars 202306L +# undef __cpp_lib_tuple_like +// # define __cpp_lib_tuple_like 202311L // # define __cpp_lib_within_lifetime 202306L #endif diff --git a/libcxx/modules/std.cppm.in b/libcxx/modules/std.cppm.in index 09ea531e172e1..ecb0601260325 100644 --- a/libcxx/modules/std.cppm.in +++ b/libcxx/modules/std.cppm.in @@ -168,6 +168,9 @@ module; #include // *** Headers not yet available *** +#if __has_include() +# error "update the header information for in libcxx/utils/generate_std_cppm_in.py" +#endif // __has_include() #if __has_include() # error "update the header information for in libcxx/utils/generate_std_cppm_in.py" #endif // __has_include() @@ -180,6 +183,9 @@ module; #if __has_include() # error "update the header information for in libcxx/utils/generate_std_cppm_in.py" #endif // __has_include() +#if __has_include() +# error "update the header information for in libcxx/utils/generate_std_cppm_in.py" +#endif // __has_include() #if __has_include() # error "update the header information for in libcxx/utils/generate_std_cppm_in.py" #endif // __has_include() diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/.version.compile.pass.cpp new file mode 100644 index 0000000000000..6aa31c60e8630 --- /dev/null +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/.version.compile.pass.cpp @@ -0,0 +1,123 @@ +//===----------------------------------------------------------------------===// +// +// 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_format_uchar 202311L [C++20] + __cpp_lib_saturation_arithmetic 202311L [C++26] +*/ + +#include <> +#include "test_macros.h" + +#if TEST_STD_VER < 14 + +# ifdef __cpp_lib_format_uchar +# error "__cpp_lib_format_uchar should not be defined before c++20" +# endif + +# ifdef __cpp_lib_saturation_arithmetic +# error "__cpp_lib_saturation_arithmetic should not be defined before c++26" +# endif + +#elif TEST_STD_VER == 14 + +# ifdef __cpp_lib_format_uchar +# error "__cpp_lib_format_uchar should not be defined before c++20" +# endif + +# ifdef __cpp_lib_saturation_arithmetic +# error "__cpp_lib_saturation_arithmetic should not be defined before c++26" +# endif + +#elif TEST_STD_VER == 17 + +# ifdef __cpp_lib_format_uchar +# error "__cpp_lib_format_uchar should not be defined before c++20" +# endif + +# ifdef __cpp_lib_saturation_arithmetic +# error "__cpp_lib_saturation_arithmetic should not be defined before c++26" +# endif + +#elif TEST_STD_VER == 20 + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_format_uchar +# error "__cpp_lib_format_uchar should be defined in c++20" +# endif +# if __cpp_lib_format_uchar != 202311L +# error "__cpp_lib_format_uchar should have the value 202311L in c++20" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_format_uchar +# error "__cpp_lib_format_uchar should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifdef __cpp_lib_saturation_arithmetic +# error "__cpp_lib_saturation_arithmetic should not be defined before c++26" +# endif + +#elif TEST_STD_VER == 23 + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_format_uchar +# error "__cpp_lib_format_uchar should be defined in c++23" +# endif +# if __cpp_lib_format_uchar != 202311L +# error "__cpp_lib_format_uchar should have the value 202311L in c++23" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_format_uchar +# error "__cpp_lib_format_uchar should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# ifdef __cpp_lib_saturation_arithmetic +# error "__cpp_lib_saturation_arithmetic should not be defined before c++26" +# endif + +#elif TEST_STD_VER > 23 + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_format_uchar +# error "__cpp_lib_format_uchar should be defined in c++26" +# endif +# if __cpp_lib_format_uchar != 202311L +# error "__cpp_lib_format_uchar should have the value 202311L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_format_uchar +# error "__cpp_lib_format_uchar should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_saturation_arithmetic +# error "__cpp_lib_saturation_arithmetic should be defined in c++26" +# endif +# if __cpp_lib_saturation_arithmetic != 202311L +# error "__cpp_lib_saturation_arithmetic should have the value 202311L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_saturation_arithmetic +# error "__cpp_lib_saturation_arithmetic should not be defined because it is unimplemented in libc++!" +# endif +# endif + +#endif // TEST_STD_VER > 23 + diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/algorithm.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/algorithm.version.compile.pass.cpp index 1cd58f081952f..ec6503ec23755 100644 --- a/libcxx/test/std/language.support/support.limits/support.limits.general/algorithm.version.compile.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/algorithm.version.compile.pass.cpp @@ -18,6 +18,7 @@ /* Constant Value __cpp_lib_clamp 201603L [C++17] __cpp_lib_constexpr_algorithms 201806L [C++20] + __cpp_lib_freestanding_algorithm 202311L [C++26] __cpp_lib_parallel_algorithm 201603L [C++17] __cpp_lib_ranges 202207L [C++20] __cpp_lib_ranges_starts_ends_with 202106L [C++23] @@ -39,6 +40,10 @@ # error "__cpp_lib_constexpr_algorithms should not be defined before c++20" # endif +# ifdef __cpp_lib_freestanding_algorithm +# error "__cpp_lib_freestanding_algorithm should not be defined before c++26" +# endif + # ifdef __cpp_lib_parallel_algorithm # error "__cpp_lib_parallel_algorithm should not be defined before c++17" # endif @@ -73,6 +78,10 @@ # error "__cpp_lib_constexpr_algorithms should not be defined before c++20" # endif +# ifdef __cpp_lib_freestanding_algorithm +# error "__cpp_lib_freestanding_algorithm should not be defined before c++26" +# endif + # ifdef __cpp_lib_parallel_algorithm # error "__cpp_lib_parallel_algorithm should not be defined before c++17" # endif @@ -113,6 +122,10 @@ # error "__cpp_lib_constexpr_algorithms should not be defined before c++20" # endif +# ifdef __cpp_lib_freestanding_algorithm +# error "__cpp_lib_freestanding_algorithm should not be defined before c++26" +# endif + # if !defined(_LIBCPP_VERSION) # ifndef __cpp_lib_parallel_algorithm # error "__cpp_lib_parallel_algorithm should be defined in c++17" @@ -168,6 +181,10 @@ # error "__cpp_lib_constexpr_algorithms should have the value 201806L in c++20" # endif +# ifdef __cpp_lib_freestanding_algorithm +# error "__cpp_lib_freestanding_algorithm should not be defined before c++26" +# endif + # if !defined(_LIBCPP_VERSION) # ifndef __cpp_lib_parallel_algorithm # error "__cpp_lib_parallel_algorithm should be defined in c++20" @@ -229,6 +246,10 @@ # error "__cpp_lib_constexpr_algorithms should have the value 201806L in c++23" # endif +# ifdef __cpp_lib_freestanding_algorithm +# error "__cpp_lib_freestanding_algorithm should not be defined before c++26" +# endif + # if !defined(_LIBCPP_VERSION) # ifndef __cpp_lib_parallel_algorithm # error "__cpp_lib_parallel_algorithm should be defined in c++23" @@ -299,6 +320,19 @@ # error "__cpp_lib_constexpr_algorithms should have the value 201806L in c++26" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_freestanding_algorithm +# error "__cpp_lib_freestanding_algorithm should be defined in c++26" +# endif +# if __cpp_lib_freestanding_algorithm != 202311L +# error "__cpp_lib_freestanding_algorithm should have the value 202311L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_freestanding_algorithm +# error "__cpp_lib_freestanding_algorithm 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++26" diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/array.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/array.version.compile.pass.cpp index 1a8f78ed73cf2..75b5492394071 100644 --- a/libcxx/test/std/language.support/support.limits/support.limits.general/array.version.compile.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/array.version.compile.pass.cpp @@ -18,6 +18,7 @@ /* Constant Value __cpp_lib_array_constexpr 201603L [C++17] 201811L [C++20] + __cpp_lib_freestanding_array 202311L [C++26] __cpp_lib_nonmember_container_access 201411L [C++17] __cpp_lib_to_array 201907L [C++20] */ @@ -31,6 +32,10 @@ # error "__cpp_lib_array_constexpr should not be defined before c++17" # endif +# ifdef __cpp_lib_freestanding_array +# error "__cpp_lib_freestanding_array should not be defined before c++26" +# endif + # ifdef __cpp_lib_nonmember_container_access # error "__cpp_lib_nonmember_container_access should not be defined before c++17" # endif @@ -45,6 +50,10 @@ # error "__cpp_lib_array_constexpr should not be defined before c++17" # endif +# ifdef __cpp_lib_freestanding_array +# error "__cpp_lib_freestanding_array should not be defined before c++26" +# endif + # ifdef __cpp_lib_nonmember_container_access # error "__cpp_lib_nonmember_container_access should not be defined before c++17" # endif @@ -62,6 +71,10 @@ # error "__cpp_lib_array_constexpr should have the value 201603L in c++17" # endif +# ifdef __cpp_lib_freestanding_array +# error "__cpp_lib_freestanding_array should not be defined before c++26" +# endif + # ifndef __cpp_lib_nonmember_container_access # error "__cpp_lib_nonmember_container_access should be defined in c++17" # endif @@ -82,6 +95,10 @@ # error "__cpp_lib_array_constexpr should have the value 201811L in c++20" # endif +# ifdef __cpp_lib_freestanding_array +# error "__cpp_lib_freestanding_array should not be defined before c++26" +# endif + # ifndef __cpp_lib_nonmember_container_access # error "__cpp_lib_nonmember_container_access should be defined in c++20" # endif @@ -105,6 +122,10 @@ # error "__cpp_lib_array_constexpr should have the value 201811L in c++23" # endif +# ifdef __cpp_lib_freestanding_array +# error "__cpp_lib_freestanding_array should not be defined before c++26" +# endif + # ifndef __cpp_lib_nonmember_container_access # error "__cpp_lib_nonmember_container_access should be defined in c++23" # endif @@ -128,6 +149,19 @@ # error "__cpp_lib_array_constexpr should have the value 201811L in c++26" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_freestanding_array +# error "__cpp_lib_freestanding_array should be defined in c++26" +# endif +# if __cpp_lib_freestanding_array != 202311L +# error "__cpp_lib_freestanding_array should have the value 202311L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_freestanding_array +# error "__cpp_lib_freestanding_array should not be defined because it is unimplemented in libc++!" +# endif +# endif + # ifndef __cpp_lib_nonmember_container_access # error "__cpp_lib_nonmember_container_access should be defined in c++26" # endif diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/cstring.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/cstring.version.compile.pass.cpp new file mode 100644 index 0000000000000..345acf1e599d4 --- /dev/null +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/cstring.version.compile.pass.cpp @@ -0,0 +1,71 @@ +//===----------------------------------------------------------------------===// +// +// 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_freestanding_cstring 202306L [C++26] +*/ + +#include +#include "test_macros.h" + +#if TEST_STD_VER < 14 + +# ifdef __cpp_lib_freestanding_cstring +# error "__cpp_lib_freestanding_cstring should not be defined before c++26" +# endif + +#elif TEST_STD_VER == 14 + +# ifdef __cpp_lib_freestanding_cstring +# error "__cpp_lib_freestanding_cstring should not be defined before c++26" +# endif + +#elif TEST_STD_VER == 17 + +# ifdef __cpp_lib_freestanding_cstring +# error "__cpp_lib_freestanding_cstring should not be defined before c++26" +# endif + +#elif TEST_STD_VER == 20 + +# ifdef __cpp_lib_freestanding_cstring +# error "__cpp_lib_freestanding_cstring should not be defined before c++26" +# endif + +#elif TEST_STD_VER == 23 + +# ifdef __cpp_lib_freestanding_cstring +# error "__cpp_lib_freestanding_cstring should not be defined before c++26" +# endif + +#elif TEST_STD_VER > 23 + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_freestanding_cstring +# error "__cpp_lib_freestanding_cstring should be defined in c++26" +# endif +# if __cpp_lib_freestanding_cstring != 202306L +# error "__cpp_lib_freestanding_cstring should have the value 202306L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_freestanding_cstring +# error "__cpp_lib_freestanding_cstring should not be defined because it is unimplemented in libc++!" +# endif +# endif + +#endif // TEST_STD_VER > 23 + diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/expected.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/expected.version.compile.pass.cpp index 771b144a3ed8b..175e9501eb958 100644 --- a/libcxx/test/std/language.support/support.limits/support.limits.general/expected.version.compile.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/expected.version.compile.pass.cpp @@ -15,8 +15,9 @@ // Test the feature test macros defined by -/* Constant Value - __cpp_lib_expected 202211L [C++23] +/* Constant Value + __cpp_lib_expected 202211L [C++23] + __cpp_lib_freestanding_expected 202311L [C++26] */ #include @@ -28,24 +29,40 @@ # error "__cpp_lib_expected should not be defined before c++23" # endif +# ifdef __cpp_lib_freestanding_expected +# error "__cpp_lib_freestanding_expected should not be defined before c++26" +# endif + #elif TEST_STD_VER == 14 # ifdef __cpp_lib_expected # error "__cpp_lib_expected should not be defined before c++23" # endif +# ifdef __cpp_lib_freestanding_expected +# error "__cpp_lib_freestanding_expected should not be defined before c++26" +# endif + #elif TEST_STD_VER == 17 # ifdef __cpp_lib_expected # error "__cpp_lib_expected should not be defined before c++23" # endif +# ifdef __cpp_lib_freestanding_expected +# error "__cpp_lib_freestanding_expected should not be defined before c++26" +# endif + #elif TEST_STD_VER == 20 # ifdef __cpp_lib_expected # error "__cpp_lib_expected should not be defined before c++23" # endif +# ifdef __cpp_lib_freestanding_expected +# error "__cpp_lib_freestanding_expected should not be defined before c++26" +# endif + #elif TEST_STD_VER == 23 # ifndef __cpp_lib_expected @@ -55,6 +72,10 @@ # error "__cpp_lib_expected should have the value 202211L in c++23" # endif +# ifdef __cpp_lib_freestanding_expected +# error "__cpp_lib_freestanding_expected should not be defined before c++26" +# endif + #elif TEST_STD_VER > 23 # ifndef __cpp_lib_expected @@ -64,5 +85,18 @@ # error "__cpp_lib_expected should have the value 202211L in c++26" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_freestanding_expected +# error "__cpp_lib_freestanding_expected should be defined in c++26" +# endif +# if __cpp_lib_freestanding_expected != 202311L +# error "__cpp_lib_freestanding_expected should have the value 202311L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_freestanding_expected +# error "__cpp_lib_freestanding_expected should not be defined because it is unimplemented in libc++!" +# endif +# endif + #endif // TEST_STD_VER > 23 diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/map.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/map.version.compile.pass.cpp index 2c17d2acf4940..23a2df95dca96 100644 --- a/libcxx/test/std/language.support/support.limits/support.limits.general/map.version.compile.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/map.version.compile.pass.cpp @@ -25,6 +25,8 @@ __cpp_lib_node_extract 201606L [C++17] __cpp_lib_nonmember_container_access 201411L [C++17] __cpp_lib_ranges_to_container 202202L [C++23] + __cpp_lib_tuple_like 202207L [C++23] + 202311L [C++26] */ #include @@ -68,6 +70,10 @@ # error "__cpp_lib_ranges_to_container should not be defined before c++23" # endif +# ifdef __cpp_lib_tuple_like +# error "__cpp_lib_tuple_like should not be defined before c++23" +# endif + #elif TEST_STD_VER == 14 # ifdef __cpp_lib_allocator_traits_is_always_equal @@ -109,6 +115,10 @@ # error "__cpp_lib_ranges_to_container should not be defined before c++23" # endif +# ifdef __cpp_lib_tuple_like +# error "__cpp_lib_tuple_like should not be defined before c++23" +# endif + #elif TEST_STD_VER == 17 # ifndef __cpp_lib_allocator_traits_is_always_equal @@ -162,6 +172,10 @@ # error "__cpp_lib_ranges_to_container should not be defined before c++23" # endif +# ifdef __cpp_lib_tuple_like +# error "__cpp_lib_tuple_like should not be defined before c++23" +# endif + #elif TEST_STD_VER == 20 # ifndef __cpp_lib_allocator_traits_is_always_equal @@ -218,6 +232,10 @@ # error "__cpp_lib_ranges_to_container should not be defined before c++23" # endif +# ifdef __cpp_lib_tuple_like +# error "__cpp_lib_tuple_like should not be defined before c++23" +# endif + #elif TEST_STD_VER == 23 # ifndef __cpp_lib_allocator_traits_is_always_equal @@ -286,6 +304,19 @@ # error "__cpp_lib_ranges_to_container should have the value 202202L in c++23" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_tuple_like +# error "__cpp_lib_tuple_like should be defined in c++23" +# endif +# if __cpp_lib_tuple_like != 202207L +# error "__cpp_lib_tuple_like should have the value 202207L in c++23" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_tuple_like +# error "__cpp_lib_tuple_like should not be defined because it is unimplemented in libc++!" +# endif +# endif + #elif TEST_STD_VER > 23 # ifndef __cpp_lib_allocator_traits_is_always_equal @@ -363,5 +394,18 @@ # error "__cpp_lib_ranges_to_container should have the value 202202L in c++26" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_tuple_like +# error "__cpp_lib_tuple_like should be defined in c++26" +# endif +# if __cpp_lib_tuple_like != 202311L +# error "__cpp_lib_tuple_like should have the value 202311L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_tuple_like +# error "__cpp_lib_tuple_like should not be defined because it is unimplemented in libc++!" +# endif +# endif + #endif // TEST_STD_VER > 23 diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/mdspan.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/mdspan.version.compile.pass.cpp index a44f2b6a91e5c..4ef3382306421 100644 --- a/libcxx/test/std/language.support/support.limits/support.limits.general/mdspan.version.compile.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/mdspan.version.compile.pass.cpp @@ -15,9 +15,10 @@ // Test the feature test macros defined by -/* Constant Value - __cpp_lib_mdspan 202207L [C++23] - __cpp_lib_submdspan 202306L [C++26] +/* Constant Value + __cpp_lib_freestanding_mdspan 202311L [C++26] + __cpp_lib_mdspan 202207L [C++23] + __cpp_lib_submdspan 202306L [C++26] */ #include @@ -25,6 +26,10 @@ #if TEST_STD_VER < 14 +# ifdef __cpp_lib_freestanding_mdspan +# error "__cpp_lib_freestanding_mdspan should not be defined before c++26" +# endif + # ifdef __cpp_lib_mdspan # error "__cpp_lib_mdspan should not be defined before c++23" # endif @@ -35,6 +40,10 @@ #elif TEST_STD_VER == 14 +# ifdef __cpp_lib_freestanding_mdspan +# error "__cpp_lib_freestanding_mdspan should not be defined before c++26" +# endif + # ifdef __cpp_lib_mdspan # error "__cpp_lib_mdspan should not be defined before c++23" # endif @@ -45,6 +54,10 @@ #elif TEST_STD_VER == 17 +# ifdef __cpp_lib_freestanding_mdspan +# error "__cpp_lib_freestanding_mdspan should not be defined before c++26" +# endif + # ifdef __cpp_lib_mdspan # error "__cpp_lib_mdspan should not be defined before c++23" # endif @@ -55,6 +68,10 @@ #elif TEST_STD_VER == 20 +# ifdef __cpp_lib_freestanding_mdspan +# error "__cpp_lib_freestanding_mdspan should not be defined before c++26" +# endif + # ifdef __cpp_lib_mdspan # error "__cpp_lib_mdspan should not be defined before c++23" # endif @@ -65,6 +82,10 @@ #elif TEST_STD_VER == 23 +# ifdef __cpp_lib_freestanding_mdspan +# error "__cpp_lib_freestanding_mdspan should not be defined before c++26" +# endif + # ifndef __cpp_lib_mdspan # error "__cpp_lib_mdspan should be defined in c++23" # endif @@ -78,6 +99,19 @@ #elif TEST_STD_VER > 23 +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_freestanding_mdspan +# error "__cpp_lib_freestanding_mdspan should be defined in c++26" +# endif +# if __cpp_lib_freestanding_mdspan != 202311L +# error "__cpp_lib_freestanding_mdspan should have the value 202311L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_freestanding_mdspan +# error "__cpp_lib_freestanding_mdspan should not be defined because it is unimplemented in libc++!" +# endif +# endif + # ifndef __cpp_lib_mdspan # error "__cpp_lib_mdspan should be defined in c++26" # endif diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/memory.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/memory.version.compile.pass.cpp index 94cb49750b340..b1f6c76d84739 100644 --- a/libcxx/test/std/language.support/support.limits/support.limits.general/memory.version.compile.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/memory.version.compile.pass.cpp @@ -27,6 +27,7 @@ __cpp_lib_enable_shared_from_this 201603L [C++17] __cpp_lib_make_unique 201304L [C++14] __cpp_lib_out_ptr 202106L [C++23] + 202311L [C++26] __cpp_lib_ranges 202207L [C++20] __cpp_lib_raw_memory_algorithms 201606L [C++17] __cpp_lib_shared_ptr_arrays 201611L [C++17] @@ -625,8 +626,8 @@ # ifndef __cpp_lib_out_ptr # error "__cpp_lib_out_ptr should be defined in c++26" # endif -# if __cpp_lib_out_ptr != 202106L -# error "__cpp_lib_out_ptr should have the value 202106L in c++26" +# if __cpp_lib_out_ptr != 202311L +# error "__cpp_lib_out_ptr should have the value 202311L in c++26" # endif # else // _LIBCPP_VERSION # ifdef __cpp_lib_out_ptr diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/optional.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/optional.version.compile.pass.cpp index 9e1fce0de2ab5..99716d8f16ad7 100644 --- a/libcxx/test/std/language.support/support.limits/support.limits.general/optional.version.compile.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/optional.version.compile.pass.cpp @@ -15,9 +15,10 @@ // Test the feature test macros defined by -/* Constant Value - __cpp_lib_optional 201606L [C++17] - 202110L [C++23] +/* Constant Value + __cpp_lib_freestanding_optional 202311L [C++26] + __cpp_lib_optional 201606L [C++17] + 202110L [C++23] */ #include @@ -25,18 +26,30 @@ #if TEST_STD_VER < 14 +# ifdef __cpp_lib_freestanding_optional +# error "__cpp_lib_freestanding_optional should not be defined before c++26" +# endif + # ifdef __cpp_lib_optional # error "__cpp_lib_optional should not be defined before c++17" # endif #elif TEST_STD_VER == 14 +# ifdef __cpp_lib_freestanding_optional +# error "__cpp_lib_freestanding_optional should not be defined before c++26" +# endif + # ifdef __cpp_lib_optional # error "__cpp_lib_optional should not be defined before c++17" # endif #elif TEST_STD_VER == 17 +# ifdef __cpp_lib_freestanding_optional +# error "__cpp_lib_freestanding_optional should not be defined before c++26" +# endif + # ifndef __cpp_lib_optional # error "__cpp_lib_optional should be defined in c++17" # endif @@ -46,6 +59,10 @@ #elif TEST_STD_VER == 20 +# ifdef __cpp_lib_freestanding_optional +# error "__cpp_lib_freestanding_optional should not be defined before c++26" +# endif + # ifndef __cpp_lib_optional # error "__cpp_lib_optional should be defined in c++20" # endif @@ -55,6 +72,10 @@ #elif TEST_STD_VER == 23 +# ifdef __cpp_lib_freestanding_optional +# error "__cpp_lib_freestanding_optional should not be defined before c++26" +# endif + # ifndef __cpp_lib_optional # error "__cpp_lib_optional should be defined in c++23" # endif @@ -64,6 +85,19 @@ #elif TEST_STD_VER > 23 +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_freestanding_optional +# error "__cpp_lib_freestanding_optional should be defined in c++26" +# endif +# if __cpp_lib_freestanding_optional != 202311L +# error "__cpp_lib_freestanding_optional should have the value 202311L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_freestanding_optional +# error "__cpp_lib_freestanding_optional should not be defined because it is unimplemented in libc++!" +# endif +# endif + # ifndef __cpp_lib_optional # error "__cpp_lib_optional should be defined in c++26" # endif diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/ranges.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/ranges.version.compile.pass.cpp index 582e0c7dfe5e6..aa3a4964ad492 100644 --- a/libcxx/test/std/language.support/support.limits/support.limits.general/ranges.version.compile.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/ranges.version.compile.pass.cpp @@ -17,6 +17,7 @@ /* Constant Value __cpp_lib_ranges 202207L [C++20] + __cpp_lib_ranges_as_const 202207L [C++23] __cpp_lib_ranges_as_rvalue 202207L [C++23] __cpp_lib_ranges_chunk 202202L [C++23] __cpp_lib_ranges_chunk_by 202202L [C++23] @@ -36,6 +37,10 @@ # error "__cpp_lib_ranges should not be defined before c++20" # endif +# ifdef __cpp_lib_ranges_as_const +# error "__cpp_lib_ranges_as_const should not be defined before c++23" +# endif + # ifdef __cpp_lib_ranges_as_rvalue # error "__cpp_lib_ranges_as_rvalue should not be defined before c++23" # endif @@ -74,6 +79,10 @@ # error "__cpp_lib_ranges should not be defined before c++20" # endif +# ifdef __cpp_lib_ranges_as_const +# error "__cpp_lib_ranges_as_const should not be defined before c++23" +# endif + # ifdef __cpp_lib_ranges_as_rvalue # error "__cpp_lib_ranges_as_rvalue should not be defined before c++23" # endif @@ -112,6 +121,10 @@ # error "__cpp_lib_ranges should not be defined before c++20" # endif +# ifdef __cpp_lib_ranges_as_const +# error "__cpp_lib_ranges_as_const should not be defined before c++23" +# endif + # ifdef __cpp_lib_ranges_as_rvalue # error "__cpp_lib_ranges_as_rvalue should not be defined before c++23" # endif @@ -153,6 +166,10 @@ # error "__cpp_lib_ranges should have the value 202207L in c++20" # endif +# ifdef __cpp_lib_ranges_as_const +# error "__cpp_lib_ranges_as_const should not be defined before c++23" +# endif + # ifdef __cpp_lib_ranges_as_rvalue # error "__cpp_lib_ranges_as_rvalue should not be defined before c++23" # endif @@ -194,6 +211,19 @@ # error "__cpp_lib_ranges should have the value 202207L in c++23" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_ranges_as_const +# error "__cpp_lib_ranges_as_const should be defined in c++23" +# endif +# if __cpp_lib_ranges_as_const != 202207L +# error "__cpp_lib_ranges_as_const should have the value 202207L in c++23" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_ranges_as_const +# error "__cpp_lib_ranges_as_const should not be defined because it is unimplemented in libc++!" +# endif +# endif + # ifndef __cpp_lib_ranges_as_rvalue # error "__cpp_lib_ranges_as_rvalue should be defined in c++23" # endif @@ -283,6 +313,19 @@ # error "__cpp_lib_ranges should have the value 202207L in c++26" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_ranges_as_const +# error "__cpp_lib_ranges_as_const should be defined in c++26" +# endif +# if __cpp_lib_ranges_as_const != 202207L +# error "__cpp_lib_ranges_as_const should have the value 202207L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_ranges_as_const +# error "__cpp_lib_ranges_as_const should not be defined because it is unimplemented in libc++!" +# endif +# endif + # ifndef __cpp_lib_ranges_as_rvalue # error "__cpp_lib_ranges_as_rvalue should be defined in c++26" # endif diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/span.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/span.version.compile.pass.cpp index 4ede525c496ac..355eb1338d945 100644 --- a/libcxx/test/std/language.support/support.limits/support.limits.general/span.version.compile.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/span.version.compile.pass.cpp @@ -15,8 +15,9 @@ // Test the feature test macros defined by -/* Constant Value - __cpp_lib_span 202002L [C++20] +/* Constant Value + __cpp_lib_span 202002L [C++20] + __cpp_lib_span_initializer_list 202311L [C++26] */ #include @@ -28,18 +29,30 @@ # error "__cpp_lib_span should not be defined before c++20" # endif +# ifdef __cpp_lib_span_initializer_list +# error "__cpp_lib_span_initializer_list should not be defined before c++26" +# endif + #elif TEST_STD_VER == 14 # ifdef __cpp_lib_span # error "__cpp_lib_span should not be defined before c++20" # endif +# ifdef __cpp_lib_span_initializer_list +# error "__cpp_lib_span_initializer_list should not be defined before c++26" +# endif + #elif TEST_STD_VER == 17 # ifdef __cpp_lib_span # error "__cpp_lib_span should not be defined before c++20" # endif +# ifdef __cpp_lib_span_initializer_list +# error "__cpp_lib_span_initializer_list should not be defined before c++26" +# endif + #elif TEST_STD_VER == 20 # ifndef __cpp_lib_span @@ -49,6 +62,10 @@ # error "__cpp_lib_span should have the value 202002L in c++20" # endif +# ifdef __cpp_lib_span_initializer_list +# error "__cpp_lib_span_initializer_list should not be defined before c++26" +# endif + #elif TEST_STD_VER == 23 # ifndef __cpp_lib_span @@ -58,6 +75,10 @@ # error "__cpp_lib_span should have the value 202002L in c++23" # endif +# ifdef __cpp_lib_span_initializer_list +# error "__cpp_lib_span_initializer_list should not be defined before c++26" +# endif + #elif TEST_STD_VER > 23 # ifndef __cpp_lib_span @@ -67,5 +88,18 @@ # error "__cpp_lib_span should have the value 202002L in c++26" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_span_initializer_list +# error "__cpp_lib_span_initializer_list should be defined in c++26" +# endif +# if __cpp_lib_span_initializer_list != 202311L +# error "__cpp_lib_span_initializer_list should have the value 202311L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_span_initializer_list +# error "__cpp_lib_span_initializer_list should not be defined because it is unimplemented in libc++!" +# endif +# endif + #endif // TEST_STD_VER > 23 diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/string_view.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/string_view.version.compile.pass.cpp index 4bb5d93df5f33..a86ab2adff6a9 100644 --- a/libcxx/test/std/language.support/support.limits/support.limits.general/string_view.version.compile.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/string_view.version.compile.pass.cpp @@ -15,13 +15,14 @@ // Test the feature test macros defined by -/* Constant Value - __cpp_lib_char8_t 201907L [C++20] - __cpp_lib_constexpr_string_view 201811L [C++20] - __cpp_lib_starts_ends_with 201711L [C++20] - __cpp_lib_string_contains 202011L [C++23] - __cpp_lib_string_view 201606L [C++17] - 201803L [C++20] +/* Constant Value + __cpp_lib_char8_t 201907L [C++20] + __cpp_lib_constexpr_string_view 201811L [C++20] + __cpp_lib_freestanding_string_view 202311L [C++26] + __cpp_lib_starts_ends_with 201711L [C++20] + __cpp_lib_string_contains 202011L [C++23] + __cpp_lib_string_view 201606L [C++17] + 201803L [C++20] */ #include @@ -37,6 +38,10 @@ # error "__cpp_lib_constexpr_string_view should not be defined before c++20" # endif +# ifdef __cpp_lib_freestanding_string_view +# error "__cpp_lib_freestanding_string_view should not be defined before c++26" +# endif + # ifdef __cpp_lib_starts_ends_with # error "__cpp_lib_starts_ends_with should not be defined before c++20" # endif @@ -59,6 +64,10 @@ # error "__cpp_lib_constexpr_string_view should not be defined before c++20" # endif +# ifdef __cpp_lib_freestanding_string_view +# error "__cpp_lib_freestanding_string_view should not be defined before c++26" +# endif + # ifdef __cpp_lib_starts_ends_with # error "__cpp_lib_starts_ends_with should not be defined before c++20" # endif @@ -81,6 +90,10 @@ # error "__cpp_lib_constexpr_string_view should not be defined before c++20" # endif +# ifdef __cpp_lib_freestanding_string_view +# error "__cpp_lib_freestanding_string_view should not be defined before c++26" +# endif + # ifdef __cpp_lib_starts_ends_with # error "__cpp_lib_starts_ends_with should not be defined before c++20" # endif @@ -118,6 +131,10 @@ # error "__cpp_lib_constexpr_string_view should have the value 201811L in c++20" # endif +# ifdef __cpp_lib_freestanding_string_view +# error "__cpp_lib_freestanding_string_view should not be defined before c++26" +# endif + # ifndef __cpp_lib_starts_ends_with # error "__cpp_lib_starts_ends_with should be defined in c++20" # endif @@ -158,6 +175,10 @@ # error "__cpp_lib_constexpr_string_view should have the value 201811L in c++23" # endif +# ifdef __cpp_lib_freestanding_string_view +# error "__cpp_lib_freestanding_string_view should not be defined before c++26" +# endif + # ifndef __cpp_lib_starts_ends_with # error "__cpp_lib_starts_ends_with should be defined in c++23" # endif @@ -201,6 +222,19 @@ # error "__cpp_lib_constexpr_string_view should have the value 201811L in c++26" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_freestanding_string_view +# error "__cpp_lib_freestanding_string_view should be defined in c++26" +# endif +# if __cpp_lib_freestanding_string_view != 202311L +# error "__cpp_lib_freestanding_string_view should have the value 202311L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_freestanding_string_view +# error "__cpp_lib_freestanding_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++26" # endif diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/tuple.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/tuple.version.compile.pass.cpp index 86aafdf60230a..ce17aef3ecdf6 100644 --- a/libcxx/test/std/language.support/support.limits/support.limits.general/tuple.version.compile.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/tuple.version.compile.pass.cpp @@ -21,6 +21,8 @@ __cpp_lib_make_from_tuple 201606L [C++17] __cpp_lib_ranges_zip 202110L [C++23] __cpp_lib_tuple_element_t 201402L [C++14] + __cpp_lib_tuple_like 202207L [C++23] + 202311L [C++26] __cpp_lib_tuples_by_type 201304L [C++14] */ @@ -49,6 +51,10 @@ # error "__cpp_lib_tuple_element_t should not be defined before c++14" # endif +# ifdef __cpp_lib_tuple_like +# error "__cpp_lib_tuple_like should not be defined before c++23" +# endif + # ifdef __cpp_lib_tuples_by_type # error "__cpp_lib_tuples_by_type should not be defined before c++14" # endif @@ -78,6 +84,10 @@ # error "__cpp_lib_tuple_element_t should have the value 201402L in c++14" # endif +# ifdef __cpp_lib_tuple_like +# error "__cpp_lib_tuple_like should not be defined before c++23" +# endif + # ifndef __cpp_lib_tuples_by_type # error "__cpp_lib_tuples_by_type should be defined in c++14" # endif @@ -116,6 +126,10 @@ # error "__cpp_lib_tuple_element_t should have the value 201402L in c++17" # endif +# ifdef __cpp_lib_tuple_like +# error "__cpp_lib_tuple_like should not be defined before c++23" +# endif + # ifndef __cpp_lib_tuples_by_type # error "__cpp_lib_tuples_by_type should be defined in c++17" # endif @@ -157,6 +171,10 @@ # error "__cpp_lib_tuple_element_t should have the value 201402L in c++20" # endif +# ifdef __cpp_lib_tuple_like +# error "__cpp_lib_tuple_like should not be defined before c++23" +# endif + # ifndef __cpp_lib_tuples_by_type # error "__cpp_lib_tuples_by_type should be defined in c++20" # endif @@ -207,6 +225,19 @@ # error "__cpp_lib_tuple_element_t should have the value 201402L in c++23" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_tuple_like +# error "__cpp_lib_tuple_like should be defined in c++23" +# endif +# if __cpp_lib_tuple_like != 202207L +# error "__cpp_lib_tuple_like should have the value 202207L in c++23" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_tuple_like +# error "__cpp_lib_tuple_like should not be defined because it is unimplemented in libc++!" +# endif +# endif + # ifndef __cpp_lib_tuples_by_type # error "__cpp_lib_tuples_by_type should be defined in c++23" # endif @@ -257,6 +288,19 @@ # error "__cpp_lib_tuple_element_t should have the value 201402L in c++26" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_tuple_like +# error "__cpp_lib_tuple_like should be defined in c++26" +# endif +# if __cpp_lib_tuple_like != 202311L +# error "__cpp_lib_tuple_like should have the value 202311L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_tuple_like +# error "__cpp_lib_tuple_like should not be defined because it is unimplemented in libc++!" +# endif +# endif + # ifndef __cpp_lib_tuples_by_type # error "__cpp_lib_tuples_by_type should be defined in c++26" # endif diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/unordered_map.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/unordered_map.version.compile.pass.cpp index 743f89dddfba0..5f7f1805c509f 100644 --- a/libcxx/test/std/language.support/support.limits/support.limits.general/unordered_map.version.compile.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/unordered_map.version.compile.pass.cpp @@ -24,6 +24,8 @@ __cpp_lib_node_extract 201606L [C++17] __cpp_lib_nonmember_container_access 201411L [C++17] __cpp_lib_ranges_to_container 202202L [C++23] + __cpp_lib_tuple_like 202207L [C++23] + 202311L [C++26] __cpp_lib_unordered_map_try_emplace 201411L [C++17] */ @@ -64,6 +66,10 @@ # error "__cpp_lib_ranges_to_container should not be defined before c++23" # endif +# ifdef __cpp_lib_tuple_like +# error "__cpp_lib_tuple_like should not be defined before c++23" +# endif + # ifdef __cpp_lib_unordered_map_try_emplace # error "__cpp_lib_unordered_map_try_emplace should not be defined before c++17" # endif @@ -102,6 +108,10 @@ # error "__cpp_lib_ranges_to_container should not be defined before c++23" # endif +# ifdef __cpp_lib_tuple_like +# error "__cpp_lib_tuple_like should not be defined before c++23" +# endif + # ifdef __cpp_lib_unordered_map_try_emplace # error "__cpp_lib_unordered_map_try_emplace should not be defined before c++17" # endif @@ -149,6 +159,10 @@ # error "__cpp_lib_ranges_to_container should not be defined before c++23" # endif +# ifdef __cpp_lib_tuple_like +# error "__cpp_lib_tuple_like should not be defined before c++23" +# endif + # ifndef __cpp_lib_unordered_map_try_emplace # error "__cpp_lib_unordered_map_try_emplace should be defined in c++17" # endif @@ -205,6 +219,10 @@ # error "__cpp_lib_ranges_to_container should not be defined before c++23" # endif +# ifdef __cpp_lib_tuple_like +# error "__cpp_lib_tuple_like should not be defined before c++23" +# endif + # ifndef __cpp_lib_unordered_map_try_emplace # error "__cpp_lib_unordered_map_try_emplace should be defined in c++20" # endif @@ -273,6 +291,19 @@ # error "__cpp_lib_ranges_to_container should have the value 202202L in c++23" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_tuple_like +# error "__cpp_lib_tuple_like should be defined in c++23" +# endif +# if __cpp_lib_tuple_like != 202207L +# error "__cpp_lib_tuple_like should have the value 202207L in c++23" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_tuple_like +# error "__cpp_lib_tuple_like should not be defined because it is unimplemented in libc++!" +# endif +# endif + # ifndef __cpp_lib_unordered_map_try_emplace # error "__cpp_lib_unordered_map_try_emplace should be defined in c++23" # endif @@ -350,6 +381,19 @@ # error "__cpp_lib_ranges_to_container should have the value 202202L in c++26" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_tuple_like +# error "__cpp_lib_tuple_like should be defined in c++26" +# endif +# if __cpp_lib_tuple_like != 202311L +# error "__cpp_lib_tuple_like should have the value 202311L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_tuple_like +# error "__cpp_lib_tuple_like should not be defined because it is unimplemented in libc++!" +# endif +# endif + # ifndef __cpp_lib_unordered_map_try_emplace # error "__cpp_lib_unordered_map_try_emplace should be defined in c++26" # endif diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/utility.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/utility.version.compile.pass.cpp index 14fd4db333ebb..dd56f8d5359dd 100644 --- a/libcxx/test/std/language.support/support.limits/support.limits.general/utility.version.compile.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/utility.version.compile.pass.cpp @@ -25,6 +25,8 @@ __cpp_lib_integer_sequence 201304L [C++14] __cpp_lib_ranges_zip 202110L [C++23] __cpp_lib_to_underlying 202102L [C++23] + __cpp_lib_tuple_like 202207L [C++23] + 202311L [C++26] __cpp_lib_tuples_by_type 201304L [C++14] __cpp_lib_unreachable 202202L [C++23] */ @@ -70,6 +72,10 @@ # error "__cpp_lib_to_underlying should not be defined before c++23" # endif +# ifdef __cpp_lib_tuple_like +# error "__cpp_lib_tuple_like should not be defined before c++23" +# endif + # ifdef __cpp_lib_tuples_by_type # error "__cpp_lib_tuples_by_type should not be defined before c++14" # endif @@ -122,6 +128,10 @@ # error "__cpp_lib_to_underlying should not be defined before c++23" # endif +# ifdef __cpp_lib_tuple_like +# error "__cpp_lib_tuple_like should not be defined before c++23" +# endif + # ifndef __cpp_lib_tuples_by_type # error "__cpp_lib_tuples_by_type should be defined in c++14" # endif @@ -180,6 +190,10 @@ # error "__cpp_lib_to_underlying should not be defined before c++23" # endif +# ifdef __cpp_lib_tuple_like +# error "__cpp_lib_tuple_like should not be defined before c++23" +# endif + # ifndef __cpp_lib_tuples_by_type # error "__cpp_lib_tuples_by_type should be defined in c++17" # endif @@ -247,6 +261,10 @@ # error "__cpp_lib_to_underlying should not be defined before c++23" # endif +# ifdef __cpp_lib_tuple_like +# error "__cpp_lib_tuple_like should not be defined before c++23" +# endif + # ifndef __cpp_lib_tuples_by_type # error "__cpp_lib_tuples_by_type should be defined in c++20" # endif @@ -329,6 +347,19 @@ # error "__cpp_lib_to_underlying should have the value 202102L in c++23" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_tuple_like +# error "__cpp_lib_tuple_like should be defined in c++23" +# endif +# if __cpp_lib_tuple_like != 202207L +# error "__cpp_lib_tuple_like should have the value 202207L in c++23" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_tuple_like +# error "__cpp_lib_tuple_like should not be defined because it is unimplemented in libc++!" +# endif +# endif + # ifndef __cpp_lib_tuples_by_type # error "__cpp_lib_tuples_by_type should be defined in c++23" # endif @@ -414,6 +445,19 @@ # error "__cpp_lib_to_underlying should have the value 202102L in c++26" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_tuple_like +# error "__cpp_lib_tuple_like should be defined in c++26" +# endif +# if __cpp_lib_tuple_like != 202311L +# error "__cpp_lib_tuple_like should have the value 202311L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_tuple_like +# error "__cpp_lib_tuple_like should not be defined because it is unimplemented in libc++!" +# endif +# endif + # ifndef __cpp_lib_tuples_by_type # error "__cpp_lib_tuples_by_type should be defined in c++26" # endif diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/variant.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/variant.version.compile.pass.cpp index eed646b9b6649..3e65b1445d0cc 100644 --- a/libcxx/test/std/language.support/support.limits/support.limits.general/variant.version.compile.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/variant.version.compile.pass.cpp @@ -15,8 +15,9 @@ // Test the feature test macros defined by -/* Constant Value - __cpp_lib_variant 202102L [C++17] +/* Constant Value + __cpp_lib_freestanding_variant 202311L [C++26] + __cpp_lib_variant 202102L [C++17] */ #include @@ -24,18 +25,30 @@ #if TEST_STD_VER < 14 +# ifdef __cpp_lib_freestanding_variant +# error "__cpp_lib_freestanding_variant should not be defined before c++26" +# endif + # ifdef __cpp_lib_variant # error "__cpp_lib_variant should not be defined before c++17" # endif #elif TEST_STD_VER == 14 +# ifdef __cpp_lib_freestanding_variant +# error "__cpp_lib_freestanding_variant should not be defined before c++26" +# endif + # ifdef __cpp_lib_variant # error "__cpp_lib_variant should not be defined before c++17" # endif #elif TEST_STD_VER == 17 +# ifdef __cpp_lib_freestanding_variant +# error "__cpp_lib_freestanding_variant should not be defined before c++26" +# endif + # ifndef __cpp_lib_variant # error "__cpp_lib_variant should be defined in c++17" # endif @@ -45,6 +58,10 @@ #elif TEST_STD_VER == 20 +# ifdef __cpp_lib_freestanding_variant +# error "__cpp_lib_freestanding_variant should not be defined before c++26" +# endif + # ifndef __cpp_lib_variant # error "__cpp_lib_variant should be defined in c++20" # endif @@ -54,6 +71,10 @@ #elif TEST_STD_VER == 23 +# ifdef __cpp_lib_freestanding_variant +# error "__cpp_lib_freestanding_variant should not be defined before c++26" +# endif + # ifndef __cpp_lib_variant # error "__cpp_lib_variant should be defined in c++23" # endif @@ -63,6 +84,19 @@ #elif TEST_STD_VER > 23 +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_freestanding_variant +# error "__cpp_lib_freestanding_variant should be defined in c++26" +# endif +# if __cpp_lib_freestanding_variant != 202311L +# error "__cpp_lib_freestanding_variant should have the value 202311L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_freestanding_variant +# error "__cpp_lib_freestanding_variant should not be defined because it is unimplemented in libc++!" +# endif +# endif + # ifndef __cpp_lib_variant # error "__cpp_lib_variant should be defined in c++26" # endif diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/version.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/version.version.compile.pass.cpp index 0c1b8fa997ffd..1e4ff3b7f864a 100644 --- a/libcxx/test/std/language.support/support.limits/support.limits.general/version.version.compile.pass.cpp +++ b/libcxx/test/std/language.support/support.limits/support.limits.general/version.version.compile.pass.cpp @@ -74,6 +74,7 @@ __cpp_lib_constexpr_vector 201907L [C++20] __cpp_lib_copyable_function 202306L [C++26] __cpp_lib_coroutine 201902L [C++20] + __cpp_lib_debugging 202311L [C++26] __cpp_lib_destroying_delete 201806L [C++20] __cpp_lib_enable_shared_from_this 201603L [C++17] __cpp_lib_endian 201907L [C++20] @@ -85,8 +86,17 @@ __cpp_lib_filesystem 201703L [C++17] __cpp_lib_format 202106L [C++20] __cpp_lib_format_ranges 202207L [C++23] + __cpp_lib_format_uchar 202311L [C++20] __cpp_lib_formatters 202302L [C++23] __cpp_lib_forward_like 202207L [C++23] + __cpp_lib_freestanding_algorithm 202311L [C++26] + __cpp_lib_freestanding_array 202311L [C++26] + __cpp_lib_freestanding_cstring 202306L [C++26] + __cpp_lib_freestanding_expected 202311L [C++26] + __cpp_lib_freestanding_mdspan 202311L [C++26] + __cpp_lib_freestanding_optional 202311L [C++26] + __cpp_lib_freestanding_string_view 202311L [C++26] + __cpp_lib_freestanding_variant 202311L [C++26] __cpp_lib_fstream_native_handle 202306L [C++26] __cpp_lib_function_ref 202306L [C++26] __cpp_lib_gcd_lcm 201606L [C++17] @@ -117,6 +127,7 @@ __cpp_lib_jthread 201911L [C++20] __cpp_lib_latch 201907L [C++20] __cpp_lib_launder 201606L [C++17] + __cpp_lib_linalg 202311L [C++26] __cpp_lib_list_remove_return_type 201806L [C++20] __cpp_lib_logical_traits 201510L [C++17] __cpp_lib_make_from_tuple 201606L [C++17] @@ -136,11 +147,13 @@ __cpp_lib_optional 201606L [C++17] 202110L [C++23] __cpp_lib_out_ptr 202106L [C++23] + 202311L [C++26] __cpp_lib_parallel_algorithm 201603L [C++17] __cpp_lib_polymorphic_allocator 201902L [C++20] __cpp_lib_print 202207L [C++23] __cpp_lib_quoted_string_io 201304L [C++14] __cpp_lib_ranges 202207L [C++20] + __cpp_lib_ranges_as_const 202207L [C++23] __cpp_lib_ranges_as_rvalue 202207L [C++23] __cpp_lib_ranges_chunk 202202L [C++23] __cpp_lib_ranges_chunk_by 202202L [C++23] @@ -159,6 +172,7 @@ __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_saturation_arithmetic 202311L [C++26] __cpp_lib_scoped_lock 201703L [C++17] __cpp_lib_semaphore 201907L [C++20] __cpp_lib_shared_mutex 201505L [C++17] @@ -171,6 +185,7 @@ __cpp_lib_smart_ptr_owner_equality 202306L [C++26] __cpp_lib_source_location 201907L [C++20] __cpp_lib_span 202002L [C++20] + __cpp_lib_span_initializer_list 202311L [C++26] __cpp_lib_spanstream 202106L [C++23] __cpp_lib_ssize 201902L [C++20] __cpp_lib_sstream_from_string_view 202306L [C++26] @@ -196,6 +211,8 @@ __cpp_lib_transparent_operators 201210L [C++14] 201510L [C++17] __cpp_lib_tuple_element_t 201402L [C++14] + __cpp_lib_tuple_like 202207L [C++23] + 202311L [C++26] __cpp_lib_tuples_by_type 201304L [C++14] __cpp_lib_type_identity 201806L [C++20] __cpp_lib_type_trait_variable_templates 201510L [C++17] @@ -429,6 +446,10 @@ # error "__cpp_lib_coroutine should not be defined before c++20" # endif +# ifdef __cpp_lib_debugging +# error "__cpp_lib_debugging should not be defined before c++26" +# endif + # ifdef __cpp_lib_destroying_delete # error "__cpp_lib_destroying_delete should not be defined before c++20" # endif @@ -469,6 +490,10 @@ # error "__cpp_lib_format_ranges should not be defined before c++23" # endif +# ifdef __cpp_lib_format_uchar +# error "__cpp_lib_format_uchar should not be defined before c++20" +# endif + # ifdef __cpp_lib_formatters # error "__cpp_lib_formatters should not be defined before c++23" # endif @@ -477,6 +502,38 @@ # error "__cpp_lib_forward_like should not be defined before c++23" # endif +# ifdef __cpp_lib_freestanding_algorithm +# error "__cpp_lib_freestanding_algorithm should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_array +# error "__cpp_lib_freestanding_array should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_cstring +# error "__cpp_lib_freestanding_cstring should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_expected +# error "__cpp_lib_freestanding_expected should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_mdspan +# error "__cpp_lib_freestanding_mdspan should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_optional +# error "__cpp_lib_freestanding_optional should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_string_view +# error "__cpp_lib_freestanding_string_view should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_variant +# error "__cpp_lib_freestanding_variant should not be defined before c++26" +# endif + # ifdef __cpp_lib_fstream_native_handle # error "__cpp_lib_fstream_native_handle should not be defined before c++26" # endif @@ -597,6 +654,10 @@ # error "__cpp_lib_launder should not be defined before c++17" # endif +# ifdef __cpp_lib_linalg +# error "__cpp_lib_linalg should not be defined before c++26" +# endif + # ifdef __cpp_lib_list_remove_return_type # error "__cpp_lib_list_remove_return_type should not be defined before c++20" # endif @@ -689,6 +750,10 @@ # error "__cpp_lib_ranges should not be defined before c++20" # endif +# ifdef __cpp_lib_ranges_as_const +# error "__cpp_lib_ranges_as_const should not be defined before c++23" +# endif + # ifdef __cpp_lib_ranges_as_rvalue # error "__cpp_lib_ranges_as_rvalue should not be defined before c++23" # endif @@ -761,6 +826,10 @@ # error "__cpp_lib_sample should not be defined before c++17" # endif +# ifdef __cpp_lib_saturation_arithmetic +# error "__cpp_lib_saturation_arithmetic should not be defined before c++26" +# endif + # ifdef __cpp_lib_scoped_lock # error "__cpp_lib_scoped_lock should not be defined before c++17" # endif @@ -805,6 +874,10 @@ # error "__cpp_lib_span should not be defined before c++20" # endif +# ifdef __cpp_lib_span_initializer_list +# error "__cpp_lib_span_initializer_list should not be defined before c++26" +# endif + # ifdef __cpp_lib_spanstream # error "__cpp_lib_spanstream should not be defined before c++23" # endif @@ -893,6 +966,10 @@ # error "__cpp_lib_tuple_element_t should not be defined before c++14" # endif +# ifdef __cpp_lib_tuple_like +# error "__cpp_lib_tuple_like should not be defined before c++23" +# endif + # ifdef __cpp_lib_tuples_by_type # error "__cpp_lib_tuples_by_type should not be defined before c++14" # endif @@ -1157,6 +1234,10 @@ # error "__cpp_lib_coroutine should not be defined before c++20" # endif +# ifdef __cpp_lib_debugging +# error "__cpp_lib_debugging should not be defined before c++26" +# endif + # ifdef __cpp_lib_destroying_delete # error "__cpp_lib_destroying_delete should not be defined before c++20" # endif @@ -1200,6 +1281,10 @@ # error "__cpp_lib_format_ranges should not be defined before c++23" # endif +# ifdef __cpp_lib_format_uchar +# error "__cpp_lib_format_uchar should not be defined before c++20" +# endif + # ifdef __cpp_lib_formatters # error "__cpp_lib_formatters should not be defined before c++23" # endif @@ -1208,6 +1293,38 @@ # error "__cpp_lib_forward_like should not be defined before c++23" # endif +# ifdef __cpp_lib_freestanding_algorithm +# error "__cpp_lib_freestanding_algorithm should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_array +# error "__cpp_lib_freestanding_array should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_cstring +# error "__cpp_lib_freestanding_cstring should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_expected +# error "__cpp_lib_freestanding_expected should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_mdspan +# error "__cpp_lib_freestanding_mdspan should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_optional +# error "__cpp_lib_freestanding_optional should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_string_view +# error "__cpp_lib_freestanding_string_view should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_variant +# error "__cpp_lib_freestanding_variant should not be defined before c++26" +# endif + # ifdef __cpp_lib_fstream_native_handle # error "__cpp_lib_fstream_native_handle should not be defined before c++26" # endif @@ -1343,6 +1460,10 @@ # error "__cpp_lib_launder should not be defined before c++17" # endif +# ifdef __cpp_lib_linalg +# error "__cpp_lib_linalg should not be defined before c++26" +# endif + # ifdef __cpp_lib_list_remove_return_type # error "__cpp_lib_list_remove_return_type should not be defined before c++20" # endif @@ -1447,6 +1568,10 @@ # error "__cpp_lib_ranges should not be defined before c++20" # endif +# ifdef __cpp_lib_ranges_as_const +# error "__cpp_lib_ranges_as_const should not be defined before c++23" +# endif + # ifdef __cpp_lib_ranges_as_rvalue # error "__cpp_lib_ranges_as_rvalue should not be defined before c++23" # endif @@ -1525,6 +1650,10 @@ # error "__cpp_lib_sample should not be defined before c++17" # endif +# ifdef __cpp_lib_saturation_arithmetic +# error "__cpp_lib_saturation_arithmetic should not be defined before c++26" +# endif + # ifdef __cpp_lib_scoped_lock # error "__cpp_lib_scoped_lock should not be defined before c++17" # endif @@ -1578,6 +1707,10 @@ # error "__cpp_lib_span should not be defined before c++20" # endif +# ifdef __cpp_lib_span_initializer_list +# error "__cpp_lib_span_initializer_list should not be defined before c++26" +# endif + # ifdef __cpp_lib_spanstream # error "__cpp_lib_spanstream should not be defined before c++23" # endif @@ -1678,6 +1811,10 @@ # error "__cpp_lib_tuple_element_t should have the value 201402L in c++14" # endif +# ifdef __cpp_lib_tuple_like +# error "__cpp_lib_tuple_like should not be defined before c++23" +# endif + # ifndef __cpp_lib_tuples_by_type # error "__cpp_lib_tuples_by_type should be defined in c++14" # endif @@ -1981,6 +2118,10 @@ # error "__cpp_lib_coroutine should not be defined before c++20" # endif +# ifdef __cpp_lib_debugging +# error "__cpp_lib_debugging should not be defined before c++26" +# endif + # ifdef __cpp_lib_destroying_delete # error "__cpp_lib_destroying_delete should not be defined before c++20" # endif @@ -2045,6 +2186,10 @@ # error "__cpp_lib_format_ranges should not be defined before c++23" # endif +# ifdef __cpp_lib_format_uchar +# error "__cpp_lib_format_uchar should not be defined before c++20" +# endif + # ifdef __cpp_lib_formatters # error "__cpp_lib_formatters should not be defined before c++23" # endif @@ -2053,6 +2198,38 @@ # error "__cpp_lib_forward_like should not be defined before c++23" # endif +# ifdef __cpp_lib_freestanding_algorithm +# error "__cpp_lib_freestanding_algorithm should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_array +# error "__cpp_lib_freestanding_array should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_cstring +# error "__cpp_lib_freestanding_cstring should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_expected +# error "__cpp_lib_freestanding_expected should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_mdspan +# error "__cpp_lib_freestanding_mdspan should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_optional +# error "__cpp_lib_freestanding_optional should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_string_view +# error "__cpp_lib_freestanding_string_view should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_variant +# error "__cpp_lib_freestanding_variant should not be defined before c++26" +# endif + # ifdef __cpp_lib_fstream_native_handle # error "__cpp_lib_fstream_native_handle should not be defined before c++26" # endif @@ -2224,6 +2401,10 @@ # error "__cpp_lib_launder should have the value 201606L in c++17" # endif +# ifdef __cpp_lib_linalg +# error "__cpp_lib_linalg should not be defined before c++26" +# endif + # ifdef __cpp_lib_list_remove_return_type # error "__cpp_lib_list_remove_return_type should not be defined before c++20" # endif @@ -2376,6 +2557,10 @@ # error "__cpp_lib_ranges should not be defined before c++20" # endif +# ifdef __cpp_lib_ranges_as_const +# error "__cpp_lib_ranges_as_const should not be defined before c++23" +# endif + # ifdef __cpp_lib_ranges_as_rvalue # error "__cpp_lib_ranges_as_rvalue should not be defined before c++23" # endif @@ -2460,6 +2645,10 @@ # error "__cpp_lib_sample should have the value 201603L in c++17" # endif +# ifdef __cpp_lib_saturation_arithmetic +# error "__cpp_lib_saturation_arithmetic should not be defined before c++26" +# endif + # ifndef __cpp_lib_scoped_lock # error "__cpp_lib_scoped_lock should be defined in c++17" # endif @@ -2531,6 +2720,10 @@ # error "__cpp_lib_span should not be defined before c++20" # endif +# ifdef __cpp_lib_span_initializer_list +# error "__cpp_lib_span_initializer_list should not be defined before c++26" +# endif + # ifdef __cpp_lib_spanstream # error "__cpp_lib_spanstream should not be defined before c++23" # endif @@ -2643,6 +2836,10 @@ # error "__cpp_lib_tuple_element_t should have the value 201402L in c++17" # endif +# ifdef __cpp_lib_tuple_like +# error "__cpp_lib_tuple_like should not be defined before c++23" +# endif + # ifndef __cpp_lib_tuples_by_type # error "__cpp_lib_tuples_by_type should be defined in c++17" # endif @@ -3081,6 +3278,10 @@ # error "__cpp_lib_coroutine should have the value 201902L in c++20" # endif +# ifdef __cpp_lib_debugging +# error "__cpp_lib_debugging should not be defined before c++26" +# 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" @@ -3169,6 +3370,19 @@ # error "__cpp_lib_format_ranges should not be defined before c++23" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_format_uchar +# error "__cpp_lib_format_uchar should be defined in c++20" +# endif +# if __cpp_lib_format_uchar != 202311L +# error "__cpp_lib_format_uchar should have the value 202311L in c++20" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_format_uchar +# error "__cpp_lib_format_uchar should not be defined because it is unimplemented in libc++!" +# endif +# endif + # ifdef __cpp_lib_formatters # error "__cpp_lib_formatters should not be defined before c++23" # endif @@ -3177,6 +3391,38 @@ # error "__cpp_lib_forward_like should not be defined before c++23" # endif +# ifdef __cpp_lib_freestanding_algorithm +# error "__cpp_lib_freestanding_algorithm should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_array +# error "__cpp_lib_freestanding_array should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_cstring +# error "__cpp_lib_freestanding_cstring should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_expected +# error "__cpp_lib_freestanding_expected should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_mdspan +# error "__cpp_lib_freestanding_mdspan should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_optional +# error "__cpp_lib_freestanding_optional should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_string_view +# error "__cpp_lib_freestanding_string_view should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_variant +# error "__cpp_lib_freestanding_variant should not be defined before c++26" +# endif + # ifdef __cpp_lib_fstream_native_handle # error "__cpp_lib_fstream_native_handle should not be defined before c++26" # endif @@ -3402,6 +3648,10 @@ # error "__cpp_lib_launder should have the value 201606L in c++20" # endif +# ifdef __cpp_lib_linalg +# error "__cpp_lib_linalg should not be defined before c++26" +# endif + # ifndef __cpp_lib_list_remove_return_type # error "__cpp_lib_list_remove_return_type should be defined in c++20" # endif @@ -3575,6 +3825,10 @@ # error "__cpp_lib_ranges should have the value 202207L in c++20" # endif +# ifdef __cpp_lib_ranges_as_const +# error "__cpp_lib_ranges_as_const should not be defined before c++23" +# endif + # ifdef __cpp_lib_ranges_as_rvalue # error "__cpp_lib_ranges_as_rvalue should not be defined before c++23" # endif @@ -3662,6 +3916,10 @@ # error "__cpp_lib_sample should have the value 201603L in c++20" # endif +# ifdef __cpp_lib_saturation_arithmetic +# error "__cpp_lib_saturation_arithmetic should not be defined before c++26" +# endif + # ifndef __cpp_lib_scoped_lock # error "__cpp_lib_scoped_lock should be defined in c++20" # endif @@ -3766,6 +4024,10 @@ # error "__cpp_lib_span should have the value 202002L in c++20" # endif +# ifdef __cpp_lib_span_initializer_list +# error "__cpp_lib_span_initializer_list should not be defined before c++26" +# endif + # ifdef __cpp_lib_spanstream # error "__cpp_lib_spanstream should not be defined before c++23" # endif @@ -3908,6 +4170,10 @@ # error "__cpp_lib_tuple_element_t should have the value 201402L in c++20" # endif +# ifdef __cpp_lib_tuple_like +# error "__cpp_lib_tuple_like should not be defined before c++23" +# endif + # ifndef __cpp_lib_tuples_by_type # error "__cpp_lib_tuples_by_type should be defined in c++20" # endif @@ -4397,6 +4663,10 @@ # error "__cpp_lib_coroutine should have the value 201902L in c++23" # endif +# ifdef __cpp_lib_debugging +# error "__cpp_lib_debugging should not be defined before c++26" +# 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++23" @@ -4491,6 +4761,19 @@ # error "__cpp_lib_format_ranges should have the value 202207L in c++23" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_format_uchar +# error "__cpp_lib_format_uchar should be defined in c++23" +# endif +# if __cpp_lib_format_uchar != 202311L +# error "__cpp_lib_format_uchar should have the value 202311L in c++23" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_format_uchar +# error "__cpp_lib_format_uchar should not be defined because it is unimplemented in libc++!" +# endif +# endif + # if !defined(_LIBCPP_VERSION) # ifndef __cpp_lib_formatters # error "__cpp_lib_formatters should be defined in c++23" @@ -4511,6 +4794,38 @@ # error "__cpp_lib_forward_like should have the value 202207L in c++23" # endif +# ifdef __cpp_lib_freestanding_algorithm +# error "__cpp_lib_freestanding_algorithm should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_array +# error "__cpp_lib_freestanding_array should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_cstring +# error "__cpp_lib_freestanding_cstring should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_expected +# error "__cpp_lib_freestanding_expected should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_mdspan +# error "__cpp_lib_freestanding_mdspan should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_optional +# error "__cpp_lib_freestanding_optional should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_string_view +# error "__cpp_lib_freestanding_string_view should not be defined before c++26" +# endif + +# ifdef __cpp_lib_freestanding_variant +# error "__cpp_lib_freestanding_variant should not be defined before c++26" +# endif + # ifdef __cpp_lib_fstream_native_handle # error "__cpp_lib_fstream_native_handle should not be defined before c++26" # endif @@ -4742,6 +5057,10 @@ # error "__cpp_lib_launder should have the value 201606L in c++23" # endif +# ifdef __cpp_lib_linalg +# error "__cpp_lib_linalg should not be defined before c++26" +# endif + # ifndef __cpp_lib_list_remove_return_type # error "__cpp_lib_list_remove_return_type should be defined in c++23" # endif @@ -4945,6 +5264,19 @@ # error "__cpp_lib_ranges should have the value 202207L in c++23" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_ranges_as_const +# error "__cpp_lib_ranges_as_const should be defined in c++23" +# endif +# if __cpp_lib_ranges_as_const != 202207L +# error "__cpp_lib_ranges_as_const should have the value 202207L in c++23" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_ranges_as_const +# error "__cpp_lib_ranges_as_const should not be defined because it is unimplemented in libc++!" +# endif +# endif + # ifndef __cpp_lib_ranges_as_rvalue # error "__cpp_lib_ranges_as_rvalue should be defined in c++23" # endif @@ -5107,6 +5439,10 @@ # error "__cpp_lib_sample should have the value 201603L in c++23" # endif +# ifdef __cpp_lib_saturation_arithmetic +# error "__cpp_lib_saturation_arithmetic should not be defined before c++26" +# endif + # ifndef __cpp_lib_scoped_lock # error "__cpp_lib_scoped_lock should be defined in c++23" # endif @@ -5211,6 +5547,10 @@ # error "__cpp_lib_span should have the value 202002L in c++23" # endif +# ifdef __cpp_lib_span_initializer_list +# error "__cpp_lib_span_initializer_list should not be defined before c++26" +# endif + # if !defined(_LIBCPP_VERSION) # ifndef __cpp_lib_spanstream # error "__cpp_lib_spanstream should be defined in c++23" @@ -5392,6 +5732,19 @@ # error "__cpp_lib_tuple_element_t should have the value 201402L in c++23" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_tuple_like +# error "__cpp_lib_tuple_like should be defined in c++23" +# endif +# if __cpp_lib_tuple_like != 202207L +# error "__cpp_lib_tuple_like should have the value 202207L in c++23" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_tuple_like +# error "__cpp_lib_tuple_like should not be defined because it is unimplemented in libc++!" +# endif +# endif + # ifndef __cpp_lib_tuples_by_type # error "__cpp_lib_tuples_by_type should be defined in c++23" # endif @@ -5905,6 +6258,19 @@ # error "__cpp_lib_coroutine should have the value 201902L in c++26" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_debugging +# error "__cpp_lib_debugging should be defined in c++26" +# endif +# if __cpp_lib_debugging != 202311L +# error "__cpp_lib_debugging should have the value 202311L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_debugging +# error "__cpp_lib_debugging 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++26" @@ -5999,6 +6365,19 @@ # error "__cpp_lib_format_ranges should have the value 202207L in c++26" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_format_uchar +# error "__cpp_lib_format_uchar should be defined in c++26" +# endif +# if __cpp_lib_format_uchar != 202311L +# error "__cpp_lib_format_uchar should have the value 202311L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_format_uchar +# error "__cpp_lib_format_uchar should not be defined because it is unimplemented in libc++!" +# endif +# endif + # if !defined(_LIBCPP_VERSION) # ifndef __cpp_lib_formatters # error "__cpp_lib_formatters should be defined in c++26" @@ -6019,6 +6398,110 @@ # error "__cpp_lib_forward_like should have the value 202207L in c++26" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_freestanding_algorithm +# error "__cpp_lib_freestanding_algorithm should be defined in c++26" +# endif +# if __cpp_lib_freestanding_algorithm != 202311L +# error "__cpp_lib_freestanding_algorithm should have the value 202311L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_freestanding_algorithm +# error "__cpp_lib_freestanding_algorithm should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_freestanding_array +# error "__cpp_lib_freestanding_array should be defined in c++26" +# endif +# if __cpp_lib_freestanding_array != 202311L +# error "__cpp_lib_freestanding_array should have the value 202311L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_freestanding_array +# error "__cpp_lib_freestanding_array should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_freestanding_cstring +# error "__cpp_lib_freestanding_cstring should be defined in c++26" +# endif +# if __cpp_lib_freestanding_cstring != 202306L +# error "__cpp_lib_freestanding_cstring should have the value 202306L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_freestanding_cstring +# error "__cpp_lib_freestanding_cstring should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_freestanding_expected +# error "__cpp_lib_freestanding_expected should be defined in c++26" +# endif +# if __cpp_lib_freestanding_expected != 202311L +# error "__cpp_lib_freestanding_expected should have the value 202311L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_freestanding_expected +# error "__cpp_lib_freestanding_expected should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_freestanding_mdspan +# error "__cpp_lib_freestanding_mdspan should be defined in c++26" +# endif +# if __cpp_lib_freestanding_mdspan != 202311L +# error "__cpp_lib_freestanding_mdspan should have the value 202311L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_freestanding_mdspan +# error "__cpp_lib_freestanding_mdspan should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_freestanding_optional +# error "__cpp_lib_freestanding_optional should be defined in c++26" +# endif +# if __cpp_lib_freestanding_optional != 202311L +# error "__cpp_lib_freestanding_optional should have the value 202311L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_freestanding_optional +# error "__cpp_lib_freestanding_optional should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_freestanding_string_view +# error "__cpp_lib_freestanding_string_view should be defined in c++26" +# endif +# if __cpp_lib_freestanding_string_view != 202311L +# error "__cpp_lib_freestanding_string_view should have the value 202311L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_freestanding_string_view +# error "__cpp_lib_freestanding_string_view should not be defined because it is unimplemented in libc++!" +# endif +# endif + +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_freestanding_variant +# error "__cpp_lib_freestanding_variant should be defined in c++26" +# endif +# if __cpp_lib_freestanding_variant != 202311L +# error "__cpp_lib_freestanding_variant should have the value 202311L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_freestanding_variant +# error "__cpp_lib_freestanding_variant should not be defined because it is unimplemented in libc++!" +# endif +# endif + # if !defined(_LIBCPP_VERSION) # ifndef __cpp_lib_fstream_native_handle # error "__cpp_lib_fstream_native_handle should be defined in c++26" @@ -6277,6 +6760,19 @@ # error "__cpp_lib_launder should have the value 201606L in c++26" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_linalg +# error "__cpp_lib_linalg should be defined in c++26" +# endif +# if __cpp_lib_linalg != 202311L +# error "__cpp_lib_linalg should have the value 202311L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_linalg +# error "__cpp_lib_linalg should not be defined because it is unimplemented in libc++!" +# endif +# endif + # ifndef __cpp_lib_list_remove_return_type # error "__cpp_lib_list_remove_return_type should be defined in c++26" # endif @@ -6418,8 +6914,8 @@ # ifndef __cpp_lib_out_ptr # error "__cpp_lib_out_ptr should be defined in c++26" # endif -# if __cpp_lib_out_ptr != 202106L -# error "__cpp_lib_out_ptr should have the value 202106L in c++26" +# if __cpp_lib_out_ptr != 202311L +# error "__cpp_lib_out_ptr should have the value 202311L in c++26" # endif # else // _LIBCPP_VERSION # ifdef __cpp_lib_out_ptr @@ -6480,6 +6976,19 @@ # error "__cpp_lib_ranges should have the value 202207L in c++26" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_ranges_as_const +# error "__cpp_lib_ranges_as_const should be defined in c++26" +# endif +# if __cpp_lib_ranges_as_const != 202207L +# error "__cpp_lib_ranges_as_const should have the value 202207L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_ranges_as_const +# error "__cpp_lib_ranges_as_const should not be defined because it is unimplemented in libc++!" +# endif +# endif + # ifndef __cpp_lib_ranges_as_rvalue # error "__cpp_lib_ranges_as_rvalue should be defined in c++26" # endif @@ -6654,6 +7163,19 @@ # error "__cpp_lib_sample should have the value 201603L in c++26" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_saturation_arithmetic +# error "__cpp_lib_saturation_arithmetic should be defined in c++26" +# endif +# if __cpp_lib_saturation_arithmetic != 202311L +# error "__cpp_lib_saturation_arithmetic should have the value 202311L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_saturation_arithmetic +# error "__cpp_lib_saturation_arithmetic should not be defined because it is unimplemented in libc++!" +# endif +# endif + # ifndef __cpp_lib_scoped_lock # error "__cpp_lib_scoped_lock should be defined in c++26" # endif @@ -6767,6 +7289,19 @@ # error "__cpp_lib_span should have the value 202002L in c++26" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_span_initializer_list +# error "__cpp_lib_span_initializer_list should be defined in c++26" +# endif +# if __cpp_lib_span_initializer_list != 202311L +# error "__cpp_lib_span_initializer_list should have the value 202311L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_span_initializer_list +# error "__cpp_lib_span_initializer_list should not be defined because it is unimplemented in libc++!" +# endif +# endif + # if !defined(_LIBCPP_VERSION) # ifndef __cpp_lib_spanstream # error "__cpp_lib_spanstream should be defined in c++26" @@ -6975,6 +7510,19 @@ # error "__cpp_lib_tuple_element_t should have the value 201402L in c++26" # endif +# if !defined(_LIBCPP_VERSION) +# ifndef __cpp_lib_tuple_like +# error "__cpp_lib_tuple_like should be defined in c++26" +# endif +# if __cpp_lib_tuple_like != 202311L +# error "__cpp_lib_tuple_like should have the value 202311L in c++26" +# endif +# else // _LIBCPP_VERSION +# ifdef __cpp_lib_tuple_like +# error "__cpp_lib_tuple_like should not be defined because it is unimplemented in libc++!" +# endif +# endif + # ifndef __cpp_lib_tuples_by_type # error "__cpp_lib_tuples_by_type should be defined in c++26" # endif diff --git a/libcxx/utils/generate_feature_test_macro_components.py b/libcxx/utils/generate_feature_test_macro_components.py index 98cf995ec2236..0c07ac432d7c7 100755 --- a/libcxx/utils/generate_feature_test_macro_components.py +++ b/libcxx/utils/generate_feature_test_macro_components.py @@ -88,10 +88,10 @@ def add_version_header(tc): { "name": "__cpp_lib_allocate_at_least", "values": { - "c++23": 202106, - # Note LWG3887 Version macro for allocate_at_least - #"c++26": 202302, # P2652R2 Disallow User Specialization of allocator_traits - }, + "c++23": 202106, + # Note LWG3887 Version macro for allocate_at_least + # "c++26": 202302, # P2652R2 Disallow User Specialization of allocator_traits + }, "headers": ["memory"], }, { @@ -139,7 +139,9 @@ def add_version_header(tc): }, { "name": "__cpp_lib_associative_heterogeneous_insertion", - "values": {"c++26": 202306}, # P2363R5 Extending associative containers with the remaining heterogeneous overloads + "values": { + "c++26": 202306 # P2363R5 Extending associative containers with the remaining heterogeneous overloads + }, "headers": ["map", "set", "unordered_map", "unordered_set"], "unimplemented": True, }, @@ -203,18 +205,18 @@ def add_version_header(tc): { "name": "__cpp_lib_bind_back", "values": { - "c++23": 202202, - "c++26": 202306, # P2714R1 Bind front and back to NTTP callables - }, + "c++23": 202202, + "c++26": 202306, # P2714R1 Bind front and back to NTTP callables + }, "headers": ["functional"], "unimplemented": True, }, { "name": "__cpp_lib_bind_front", "values": { - "c++20": 201907, - "c++26": 202306, # P2714R1 Bind front and back to NTTP callables - }, + "c++20": 201907, + "c++26": 202306, # P2714R1 Bind front and back to NTTP callables + }, "headers": ["functional"], }, { @@ -229,7 +231,7 @@ def add_version_header(tc): }, { "name": "__cpp_lib_bitset", - "values": {"c++26": 202306}, # P2697R1 Interfacing bitset with string_view + "values": {"c++26": 202306}, # P2697R1 Interfacing bitset with string_view "headers": ["bitset"], }, { @@ -276,9 +278,9 @@ def add_version_header(tc): { "name": "__cpp_lib_chrono", "values": { - "c++17": 201611, - #"c++26": 202306, # P2592R3 Hashing support for std::chrono value classes - }, + "c++17": 201611, + # "c++26": 202306, # P2592R3 Hashing support for std::chrono value classes + }, "headers": ["chrono"], }, { @@ -304,9 +306,9 @@ def add_version_header(tc): { "name": "__cpp_lib_constexpr_algorithms", "values": { - "c++20": 201806, - #"c++26": 202306, # P2562R1 constexpr Stable Sorting - }, + "c++20": 201806, + # "c++26": 202306, # P2562R1 constexpr Stable Sorting + }, "headers": ["algorithm", "utility"], }, { @@ -387,7 +389,7 @@ def add_version_header(tc): }, { "name": "__cpp_lib_copyable_function", - "values": {"c++26": 202306}, # P2548R6 copyable_function + "values": {"c++26": 202306}, # P2548R6 copyable_function "headers": ["functional"], "unimplemented": True, }, @@ -396,6 +398,12 @@ def add_version_header(tc): "values": {"c++20": 201902}, "headers": ["coroutine"], }, + { + "name": "__cpp_lib_debugging", + "values": {"c++26": 202311}, # P2546R5 Debugging Support + "headers": ["debugging"], + "unimplemented": True, + }, { "name": "__cpp_lib_destroying_delete", "values": {"c++20": 201806}, @@ -459,6 +467,7 @@ def add_version_header(tc): # "c++20": 202110 Not implemented P2372R3 Fixing locale handling in chrono formatters "c++20": 202106, # "c++23": 202207, Not implemented P2419R2 Clarify handling of encodings in localized formatting of chrono types + # "c++26": 202311, Not implemented P2918R2 Runtime format strings II }, # Note these three papers are adopted at the June 2023 meeting and have sequential numbering # 202304 P2510R3 Formatting pointers (Implemented) @@ -472,6 +481,14 @@ def add_version_header(tc): "values": {"c++23": 202207}, "headers": ["format"], }, + { + "name": "__cpp_lib_format_uchar", + "values": { + "c++20": 202311 # DR P2909R4 Fix formatting of code units as integers + }, + "headers": [""], # Note not in format + "unimplemented": True, + }, { "name": "__cpp_lib_formatters", "values": {"c++23": 202302}, @@ -483,15 +500,82 @@ def add_version_header(tc): "values": {"c++23": 202207}, "headers": ["utility"], }, + { + "name": "__cpp_lib_freestanding_algorithm", + "values": { + "c++26": 202311 # P2407R5 Freestanding Library: Partial Classes + }, + "headers": ["algorithm"], + "unimplemented": True, + }, + { + "name": "__cpp_lib_freestanding_array", + "values": { + "c++26": 202311 # P2407R5 Freestanding Library: Partial Classes + }, + "headers": ["array"], + "unimplemented": True, + }, + { + "name": "__cpp_lib_freestanding_cstring", + "values": { + "c++26": 202306 # P2338R4 Freestanding Library: Character primitives and the C library + # 202311 # P2407R5 Freestanding Library: Partial Classes + }, + "headers": ["cstring"], + "unimplemented": True, + }, + { + "name": "__cpp_lib_freestanding_expected", + "values": { + "c++26": 202311 # P2833R2 Freestanding Library: inout expected span + }, + "headers": ["expected"], + "unimplemented": True, + }, + { + "name": "__cpp_lib_freestanding_mdspan", + "values": { + "c++26": 202311 # P2833R2 Freestanding Library: inout expected span + }, + "headers": ["mdspan"], + "unimplemented": True, + }, + { + "name": "__cpp_lib_freestanding_optional", + "values": { + "c++26": 202311 # P2407R5 Freestanding Library: Partial Classes + }, + "headers": ["optional"], + "unimplemented": True, + }, + { + "name": "__cpp_lib_freestanding_string_view", + "values": { + "c++26": 202311 # P2407R5 Freestanding Library: Partial Classes + }, + "headers": ["string_view"], + "unimplemented": True, + }, + { + "name": "__cpp_lib_freestanding_variant", + "values": { + "c++26": 202311 # P2407R5 Freestanding Library: Partial Classes + }, + "headers": ["variant"], + "unimplemented": True, + }, { "name": "__cpp_lib_fstream_native_handle", - "values": {"c++26": 202306}, # P1759R6 Native handles and file streams + "values": {"c++26": 202306}, # P1759R6 Native handles and file streams "headers": ["fstream"], "unimplemented": True, }, { "name": "__cpp_lib_function_ref", - "values": {"c++26": 202306}, # P0792R14 function_ref: a type-erased callable reference + "values": { + "c++26": 202306 # P0792R14 function_ref: a type-erased callable reference + }, "headers": ["functional"], "unimplemented": True, }, @@ -525,7 +609,9 @@ def add_version_header(tc): { "name": "__cpp_lib_hazard_pointer", "values": {"c++26": 202306}, # P2530R3 Hazard Pointers for C++26 - "headers": ["hazard_pointer"],# TODO verify this entry since the paper was underspecified. + "headers": [ + "hazard_pointer" # TODO verify this entry since the paper was underspecified. + ], "unimplemented": True, }, { @@ -644,6 +730,14 @@ def add_version_header(tc): "values": {"c++17": 201606}, "headers": ["new"], }, + { + "name": "__cpp_lib_linalg", + "values": { + "c++26": 202311 # P1673 A free function linear algebra interface based on the BLAS + }, + "headers": ["linalg"], + "unimplemented": True, + }, { "name": "__cpp_lib_list_remove_return_type", "values": {"c++20": 201806}, @@ -734,9 +828,9 @@ def add_version_header(tc): { "name": "__cpp_lib_not_fn", "values": { - "c++17": 201603, - #"c++26": 202306, # P2714R1 Bind front and back to NTTP callables - }, + "c++17": 201603, + # "c++26": 202306, # P2714R1 Bind front and back to NTTP callables + }, "headers": ["functional"], }, { @@ -751,7 +845,10 @@ def add_version_header(tc): }, { "name": "__cpp_lib_out_ptr", - "values": {"c++23": 202106}, + "values": { + "c++23": 202106, + "c++26": 202311, # P2833R2 Freestanding Library: inout expected span + }, "headers": ["memory"], "unimplemented": True, }, @@ -784,6 +881,15 @@ def add_version_header(tc): "values": {"c++20": 202207}, "headers": ["algorithm", "functional", "iterator", "memory", "ranges"], }, + { + "name": "__cpp_lib_ranges_as_const", + "values": { + "c++23": 202207 # P2278R4 cbegin should always return a constant iterator + # 202311 # DR P2836R1 std::basic_const_iterator should follow its underlying type’s convertibility + }, + "headers": ["ranges"], + "unimplemented": True, + }, { "name": "__cpp_lib_ranges_as_rvalue", "values": {"c++23": 202207}, @@ -814,7 +920,7 @@ def add_version_header(tc): }, { "name": "__cpp_lib_ranges_repeat", - "values": { "c++23": 202207}, + "values": {"c++23": 202207}, "headers": ["ranges"], }, { @@ -855,7 +961,7 @@ def add_version_header(tc): }, { "name": "__cpp_lib_ratio", - "values": {"c++26": 202306}, # P2734R0 Adding the new SI prefixes + "values": {"c++26": 202306}, # P2734R0 Adding the new SI prefixes "headers": ["ratio"], }, { @@ -865,8 +971,10 @@ def add_version_header(tc): }, { "name": "__cpp_lib_rcu", - "values": {"c++26": 202306}, # P2545R4 Read-Copy Update (RCU) - "headers": ["rcu"], # TODO verify this entry since the paper was underspecified. + "values": {"c++26": 202306}, # P2545R4 Read-Copy Update (RCU) + "headers": [ + "rcu" # TODO verify this entry since the paper was underspecified. + ], "unimplemented": True, }, { @@ -895,6 +1003,12 @@ def add_version_header(tc): "values": {"c++17": 201603}, "headers": ["algorithm"], }, + { + "name": "__cpp_lib_saturation_arithmetic", + "values": {"c++26": 202311}, # P0543R3 Saturation arithmetic + "headers": [""], # Note not in + "unimplemented": True, + }, { "name": "__cpp_lib_scoped_lock", "values": {"c++17": 201703}, @@ -944,7 +1058,9 @@ def add_version_header(tc): }, { "name": "__cpp_lib_smart_ptr_owner_equality", - "values": {"c++26": 202306}, # P1901R2 Enabling the Use of weak_ptr as Keys in Unordered Associative Containers + "values": { + "c++26": 202306 # P1901R2 Enabling the Use of weak_ptr as Keys in Unordered Associative Containers + }, "headers": ["memory"], "unimplemented": True, }, @@ -957,9 +1073,19 @@ def add_version_header(tc): }, { "name": "__cpp_lib_span", - "values": {"c++20": 202002}, + "values": { + "c++20": 202002, + # "c++26": 202311, # P2821R5 span.at() + # 202311 # P2833R2 Freestanding Library: inout expected span + }, "headers": ["span"], }, + { + "name": "__cpp_lib_span_initializer_list", + "values": {"c++26": 202311}, # P2447R6 std::span over an initializer list + "headers": ["span"], + "unimplemented": True, + }, { "name": "__cpp_lib_spanstream", "values": {"c++23": 202106}, @@ -973,7 +1099,9 @@ def add_version_header(tc): }, { "name": "__cpp_lib_sstream_from_string_view", - "values": {"c++26": 202306}, # P2495R3 Interfacing stringstreams with string_view + "values": { + "c++26": 202306 # P2495R3 Interfacing stringstreams with string_view + }, "headers": ["sstream"], "unimplemented": True, }, @@ -1015,7 +1143,7 @@ def add_version_header(tc): }, { "name": "__cpp_lib_submdspan", - "values": {"c++26": 202306}, # P2630R4 submdspan + "values": {"c++26": 202306}, # P2630R4 submdspan "headers": ["mdspan"], "unimplemented": True, }, @@ -1028,7 +1156,9 @@ def add_version_header(tc): }, { "name": "__cpp_lib_text_encoding", - "values": {"c++26": 202306}, # P1885R12 Naming Text Encodings to Demystify Them + "values": { + "c++26": 202306 # P1885R12 Naming Text Encodings to Demystify Them + }, "headers": ["text_encoding"], "unimplemented": True, }, @@ -1051,15 +1181,15 @@ def add_version_header(tc): { "name": "__cpp_lib_to_chars", "values": { - "c++17": 201611, - "c++26": 202306, # P2497R0 Testing for success or failure of functions - }, + "c++17": 201611, + "c++26": 202306, # P2497R0 Testing for success or failure of functions + }, "headers": ["charconv"], "unimplemented": True, }, { "name": "__cpp_lib_to_string", - "values": {"c++23": 202306}, # P2587R3 to_string or not to_string + "values": {"c++23": 202306}, # P2587R3 to_string or not to_string "headers": ["string"], "unimplemented": True, }, @@ -1083,6 +1213,15 @@ def add_version_header(tc): "values": {"c++14": 201402}, "headers": ["tuple"], }, + { + "name": "__cpp_lib_tuple_like", + "values": { + "c++23": 202207, # P2165R4 Compatibility between tuple, pair and tuple-like objects + "c++26": 202311, # P2819R2 Add tuple protocol to complex + }, + "headers": ["map", "tuple", "unordered_map", "utility"], + "unimplemented": True, + }, { "name": "__cpp_lib_tuples_by_type", "values": {"c++14": 201304}, @@ -1130,7 +1269,9 @@ def add_version_header(tc): }, { "name": "__cpp_lib_within_lifetime", - "values": {"c++26": 202306}, # P2641R4 Checking if a union alternative is active + "values": { + "c++26": 202306 # P2641R4 Checking if a union alternative is active + }, "headers": ["type_traits"], "unimplemented": True, }, diff --git a/libcxx/utils/libcxx/header_information.py b/libcxx/utils/libcxx/header_information.py index 5fdb027e22b11..de25fe3c7f97c 100644 --- a/libcxx/utils/libcxx/header_information.py +++ b/libcxx/utils/libcxx/header_information.py @@ -150,10 +150,12 @@ # implemented yet. They are used in the generated module input. The C++23 standard # modules will fail to build if a header is added but this list is not updated. headers_not_available = [ + "debugging", "flat_map", "flat_set", "generator", "hazard_pointer", + "linalg", "rcu", "spanstream", "stacktrace",