[libcxx-commits] [libcxx] 3ede2f0 - [libc++][FTM] Updated FTMs from C++29 (#218241)

via libcxx-commits libcxx-commits at lists.llvm.org
Thu Aug 27 17:49:14 PDT 2026


Author: Hristo Hristov
Date: 2026-08-28T03:49:08+03:00
New Revision: 3ede2f0565120a4799b6cfa159fdd6b2caa9f31f

URL: https://github.com/llvm/llvm-project/commit/3ede2f0565120a4799b6cfa159fdd6b2caa9f31f
DIFF: https://github.com/llvm/llvm-project/commit/3ede2f0565120a4799b6cfa159fdd6b2caa9f31f.diff

LOG: [libc++][FTM] Updated FTMs from C++29 (#218241)

... and a few missing ones from previous standard versions.

---------

Co-authored-by: Hristo Hristov <zingam at outlook.com>
Co-authored-by: A. Jiang <de34 at live.cn>

Added: 
    

Modified: 
    libcxx/docs/FeatureTestMacroTable.rst
    libcxx/include/version
    libcxx/test/std/language.support/support.limits/support.limits.general/flat_map.version.compile.pass.cpp
    libcxx/test/std/language.support/support.limits/support.limits.general/map.version.compile.pass.cpp
    libcxx/test/std/language.support/support.limits/support.limits.general/mdspan.version.compile.pass.cpp
    libcxx/test/std/language.support/support.limits/support.limits.general/memory.version.compile.pass.cpp
    libcxx/test/std/language.support/support.limits/support.limits.general/thread.version.compile.pass.cpp
    libcxx/test/std/language.support/support.limits/support.limits.general/unordered_map.version.compile.pass.cpp
    libcxx/test/std/language.support/support.limits/support.limits.general/version.version.compile.pass.cpp
    libcxx/utils/generate_feature_test_macro_components.py

Removed: 
    


################################################################################
diff  --git a/libcxx/docs/FeatureTestMacroTable.rst b/libcxx/docs/FeatureTestMacroTable.rst
index caf67d012db98..cabd30847b2af 100644
--- a/libcxx/docs/FeatureTestMacroTable.rst
+++ b/libcxx/docs/FeatureTestMacroTable.rst
@@ -530,6 +530,10 @@ Status
     ---------------------------------------------------------- -----------------
     ``__cpp_lib_senders``                                      *unimplemented*
     ---------------------------------------------------------- -----------------
+    ``__cpp_lib_simd``                                         *unimplemented*
+    ---------------------------------------------------------- -----------------
+    ``__cpp_lib_simd_permutations``                            *unimplemented*
+    ---------------------------------------------------------- -----------------
     ``__cpp_lib_smart_ptr_owner_equality``                     ``202306L``
     ---------------------------------------------------------- -----------------
     ``__cpp_lib_span_at``                                      ``202311L``
@@ -554,6 +558,18 @@ Status
     ---------------------------------------------------------- -----------------
     **C++29**
     ----------------------------------------------------------------------------
+    ``__cpp_lib_map_lookup``                                   *unimplemented*
+    ---------------------------------------------------------- -----------------
+    ``__cpp_lib_mdspan_copy``                                  *unimplemented*
+    ---------------------------------------------------------- -----------------
+    ``__cpp_lib_pointer_tag_pair``                             *unimplemented*
+    ---------------------------------------------------------- -----------------
+    ``__cpp_lib_simd_bitops``                                  *unimplemented*
+    ---------------------------------------------------------- -----------------
+    ``__cpp_lib_simd_complex``                                 *unimplemented*
+    ---------------------------------------------------------- -----------------
+    ``__cpp_lib_thread_attributes``                            *unimplemented*
+    ---------------------------------------------------------- -----------------
     ``__cpp_lib_view_interface``                               *unimplemented*
     ========================================================== =================
 

diff  --git a/libcxx/include/version b/libcxx/include/version
index a477e9c2802f6..589ce789ffa7c 100644
--- a/libcxx/include/version
+++ b/libcxx/include/version
@@ -175,11 +175,13 @@ __cpp_lib_logical_traits                                201510L <type_traits>
 __cpp_lib_make_from_tuple                               201606L <tuple>
 __cpp_lib_make_reverse_iterator                         201402L <iterator>
 __cpp_lib_make_unique                                   201304L <memory>
+__cpp_lib_map_lookup                                    202606L <flat_map> <map> <unordered_map>
 __cpp_lib_map_try_emplace                               201411L <map>
 __cpp_lib_math_constants                                201907L <numbers>
 __cpp_lib_math_special_functions                        201603L <cmath>
 __cpp_lib_mdspan                                        202406L <mdspan>
                                                         202207L // C++23
+__cpp_lib_mdspan_copy                                   202606L <mdspan>
 __cpp_lib_memory_resource                               201603L <memory_resource>
 __cpp_lib_move_iterator_concept                         202207L <iterator>
 __cpp_lib_move_only_function                            202110L <functional>
@@ -201,6 +203,7 @@ __cpp_lib_out_ptr                                       202311L <memory>
                                                         202106L // C++23
 __cpp_lib_parallel_algorithm                            201603L <algorithm> <numeric>
 __cpp_lib_philox_engine                                 202406L <random>
+__cpp_lib_pointer_tag_pair                              202606L <memory>
 __cpp_lib_polymorphic_allocator                         201902L <memory_resource>
 __cpp_lib_print                                         202207L <ostream> <print>
 __cpp_lib_quoted_string_io                              201304L <iomanip>
@@ -246,6 +249,10 @@ __cpp_lib_shared_ptr_weak_type                          201606L <memory>
 __cpp_lib_shared_timed_mutex                            201402L <shared_mutex>
 __cpp_lib_shift                                         202202L <algorithm>
                                                         201806L // C++20
+__cpp_lib_simd                                          202606L <simd>
+__cpp_lib_simd_bitops                                   202607L <simd>
+__cpp_lib_simd_complex                                  202502L <simd>
+__cpp_lib_simd_permutations                             202606L <simd>
 __cpp_lib_smart_ptr_for_overwrite                       202002L <memory>
 __cpp_lib_smart_ptr_owner_equality                      202306L <memory>
 __cpp_lib_source_location                               201907L <source_location>
@@ -267,6 +274,7 @@ __cpp_lib_string_view                                   202403L <string> <string
 __cpp_lib_submdspan                                     202306L <mdspan>
 __cpp_lib_syncbuf                                       201803L <syncstream>
 __cpp_lib_text_encoding                                 202306L <text_encoding>
+__cpp_lib_thread_attributes                             202606L <thread>
 __cpp_lib_three_way_comparison                          201907L <compare>
 __cpp_lib_to_address                                    201711L <memory>
 __cpp_lib_to_array                                      201907L <array>
@@ -633,6 +641,8 @@ __cpp_lib_void_t                                        201411L <type_traits>
 # define __cpp_lib_reference_wrapper                    202403L
 # define __cpp_lib_saturation_arithmetic                202603L
 // # define __cpp_lib_senders                              202406L
+// # define __cpp_lib_simd                                 202606L
+// # define __cpp_lib_simd_permutations                    202606L
 # define __cpp_lib_smart_ptr_owner_equality             202306L
 # define __cpp_lib_span_at                              202311L
 # define __cpp_lib_sstream_from_string_view             202306L
@@ -651,6 +661,12 @@ __cpp_lib_void_t                                        201411L <type_traits>
 #endif
 
 #if _LIBCPP_STD_VER >= 29
+// # define __cpp_lib_map_lookup                           202606L
+// # define __cpp_lib_mdspan_copy                          202606L
+// # define __cpp_lib_pointer_tag_pair                     202606L
+// # define __cpp_lib_simd_bitops                          202607L
+// # define __cpp_lib_simd_complex                         202502L
+// # define __cpp_lib_thread_attributes                    202606L
 // # define __cpp_lib_view_interface                       202606L
 #endif
 

diff  --git a/libcxx/test/std/language.support/support.limits/support.limits.general/flat_map.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/flat_map.version.compile.pass.cpp
index d0489eadb2578..ff61066dc0c30 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/flat_map.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/flat_map.version.compile.pass.cpp
@@ -28,6 +28,10 @@
 #    error "__cpp_lib_flat_map should not be defined before c++23"
 #  endif
 
+#  ifdef __cpp_lib_map_lookup
+#    error "__cpp_lib_map_lookup should not be defined before c++29"
+#  endif
+
 #elif TEST_STD_VER == 14
 
 #  ifdef __cpp_lib_constexpr_flat_map
@@ -38,6 +42,10 @@
 #    error "__cpp_lib_flat_map should not be defined before c++23"
 #  endif
 
+#  ifdef __cpp_lib_map_lookup
+#    error "__cpp_lib_map_lookup should not be defined before c++29"
+#  endif
+
 #elif TEST_STD_VER == 17
 
 #  ifdef __cpp_lib_constexpr_flat_map
@@ -48,6 +56,10 @@
 #    error "__cpp_lib_flat_map should not be defined before c++23"
 #  endif
 
+#  ifdef __cpp_lib_map_lookup
+#    error "__cpp_lib_map_lookup should not be defined before c++29"
+#  endif
+
 #elif TEST_STD_VER == 20
 
 #  ifdef __cpp_lib_constexpr_flat_map
@@ -58,6 +70,10 @@
 #    error "__cpp_lib_flat_map should not be defined before c++23"
 #  endif
 
+#  ifdef __cpp_lib_map_lookup
+#    error "__cpp_lib_map_lookup should not be defined before c++29"
+#  endif
+
 #elif TEST_STD_VER == 23
 
 #  ifdef __cpp_lib_constexpr_flat_map
@@ -71,6 +87,10 @@
 #    error "__cpp_lib_flat_map should have the value 202511L in c++23"
 #  endif
 
+#  ifdef __cpp_lib_map_lookup
+#    error "__cpp_lib_map_lookup should not be defined before c++29"
+#  endif
+
 #elif TEST_STD_VER == 26
 
 #  ifndef __cpp_lib_constexpr_flat_map
@@ -87,6 +107,10 @@
 #    error "__cpp_lib_flat_map should have the value 202511L in c++26"
 #  endif
 
+#  ifdef __cpp_lib_map_lookup
+#    error "__cpp_lib_map_lookup should not be defined before c++29"
+#  endif
+
 #elif TEST_STD_VER > 26
 
 #  ifndef __cpp_lib_constexpr_flat_map
@@ -103,6 +127,19 @@
 #    error "__cpp_lib_flat_map should have the value 202511L in c++29"
 #  endif
 
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_map_lookup
+#      error "__cpp_lib_map_lookup should be defined in c++29"
+#    endif
+#    if __cpp_lib_map_lookup != 202606L
+#      error "__cpp_lib_map_lookup should have the value 202606L in c++29"
+#    endif
+#  else
+#    ifdef __cpp_lib_map_lookup
+#      error "__cpp_lib_map_lookup should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
 #endif // TEST_STD_VER > 26
 
 // clang-format on

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 09eb6471c120b..cb52053b6c723 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
@@ -48,6 +48,10 @@
 #    error "__cpp_lib_generic_associative_lookup should not be defined before c++14"
 #  endif
 
+#  ifdef __cpp_lib_map_lookup
+#    error "__cpp_lib_map_lookup should not be defined before c++29"
+#  endif
+
 #  ifdef __cpp_lib_map_try_emplace
 #    error "__cpp_lib_map_try_emplace should not be defined before c++17"
 #  endif
@@ -97,6 +101,10 @@
 #    error "__cpp_lib_generic_associative_lookup should have the value 201304L in c++14"
 #  endif
 
+#  ifdef __cpp_lib_map_lookup
+#    error "__cpp_lib_map_lookup should not be defined before c++29"
+#  endif
+
 #  ifdef __cpp_lib_map_try_emplace
 #    error "__cpp_lib_map_try_emplace should not be defined before c++17"
 #  endif
@@ -149,6 +157,10 @@
 #    error "__cpp_lib_generic_associative_lookup should have the value 201304L in c++17"
 #  endif
 
+#  ifdef __cpp_lib_map_lookup
+#    error "__cpp_lib_map_lookup should not be defined before c++29"
+#  endif
+
 #  ifndef __cpp_lib_map_try_emplace
 #    error "__cpp_lib_map_try_emplace should be defined in c++17"
 #  endif
@@ -213,6 +225,10 @@
 #    error "__cpp_lib_generic_associative_lookup should have the value 201304L in c++20"
 #  endif
 
+#  ifdef __cpp_lib_map_lookup
+#    error "__cpp_lib_map_lookup should not be defined before c++29"
+#  endif
+
 #  ifndef __cpp_lib_map_try_emplace
 #    error "__cpp_lib_map_try_emplace should be defined in c++20"
 #  endif
@@ -289,6 +305,10 @@
 #    error "__cpp_lib_generic_associative_lookup should have the value 201304L in c++23"
 #  endif
 
+#  ifdef __cpp_lib_map_lookup
+#    error "__cpp_lib_map_lookup should not be defined before c++29"
+#  endif
+
 #  ifndef __cpp_lib_map_try_emplace
 #    error "__cpp_lib_map_try_emplace should be defined in c++23"
 #  endif
@@ -386,6 +406,10 @@
 #    error "__cpp_lib_generic_associative_lookup should have the value 201304L in c++26"
 #  endif
 
+#  ifdef __cpp_lib_map_lookup
+#    error "__cpp_lib_map_lookup should not be defined before c++29"
+#  endif
+
 #  ifndef __cpp_lib_map_try_emplace
 #    error "__cpp_lib_map_try_emplace should be defined in c++26"
 #  endif
@@ -483,6 +507,19 @@
 #    error "__cpp_lib_generic_associative_lookup should have the value 201304L in c++29"
 #  endif
 
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_map_lookup
+#      error "__cpp_lib_map_lookup should be defined in c++29"
+#    endif
+#    if __cpp_lib_map_lookup != 202606L
+#      error "__cpp_lib_map_lookup should have the value 202606L in c++29"
+#    endif
+#  else
+#    ifdef __cpp_lib_map_lookup
+#      error "__cpp_lib_map_lookup should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
 #  ifndef __cpp_lib_map_try_emplace
 #    error "__cpp_lib_map_try_emplace should be defined in c++29"
 #  endif

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 051a307d31890..7e8ba062e50c2 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
@@ -32,6 +32,10 @@
 #    error "__cpp_lib_mdspan should not be defined before c++23"
 #  endif
 
+#  ifdef __cpp_lib_mdspan_copy
+#    error "__cpp_lib_mdspan_copy should not be defined before c++29"
+#  endif
+
 #  ifdef __cpp_lib_submdspan
 #    error "__cpp_lib_submdspan should not be defined before c++26"
 #  endif
@@ -50,6 +54,10 @@
 #    error "__cpp_lib_mdspan should not be defined before c++23"
 #  endif
 
+#  ifdef __cpp_lib_mdspan_copy
+#    error "__cpp_lib_mdspan_copy should not be defined before c++29"
+#  endif
+
 #  ifdef __cpp_lib_submdspan
 #    error "__cpp_lib_submdspan should not be defined before c++26"
 #  endif
@@ -68,6 +76,10 @@
 #    error "__cpp_lib_mdspan should not be defined before c++23"
 #  endif
 
+#  ifdef __cpp_lib_mdspan_copy
+#    error "__cpp_lib_mdspan_copy should not be defined before c++29"
+#  endif
+
 #  ifdef __cpp_lib_submdspan
 #    error "__cpp_lib_submdspan should not be defined before c++26"
 #  endif
@@ -86,6 +98,10 @@
 #    error "__cpp_lib_mdspan should not be defined before c++23"
 #  endif
 
+#  ifdef __cpp_lib_mdspan_copy
+#    error "__cpp_lib_mdspan_copy should not be defined before c++29"
+#  endif
+
 #  ifdef __cpp_lib_submdspan
 #    error "__cpp_lib_submdspan should not be defined before c++26"
 #  endif
@@ -107,6 +123,10 @@
 #    error "__cpp_lib_mdspan should have the value 202207L in c++23"
 #  endif
 
+#  ifdef __cpp_lib_mdspan_copy
+#    error "__cpp_lib_mdspan_copy should not be defined before c++29"
+#  endif
+
 #  ifdef __cpp_lib_submdspan
 #    error "__cpp_lib_submdspan should not be defined before c++26"
 #  endif
@@ -140,6 +160,10 @@
 #    error "__cpp_lib_mdspan should have the value 202406L in c++26"
 #  endif
 
+#  ifdef __cpp_lib_mdspan_copy
+#    error "__cpp_lib_mdspan_copy should not be defined before c++29"
+#  endif
+
 #  if !defined(_LIBCPP_VERSION)
 #    ifndef __cpp_lib_submdspan
 #      error "__cpp_lib_submdspan should be defined in c++26"
@@ -182,6 +206,19 @@
 #    error "__cpp_lib_mdspan should have the value 202406L in c++29"
 #  endif
 
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_mdspan_copy
+#      error "__cpp_lib_mdspan_copy should be defined in c++29"
+#    endif
+#    if __cpp_lib_mdspan_copy != 202606L
+#      error "__cpp_lib_mdspan_copy should have the value 202606L in c++29"
+#    endif
+#  else
+#    ifdef __cpp_lib_mdspan_copy
+#      error "__cpp_lib_mdspan_copy should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
 #  if !defined(_LIBCPP_VERSION)
 #    ifndef __cpp_lib_submdspan
 #      error "__cpp_lib_submdspan should be defined in c++29"

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 1b8e892ffbf67..45eac0ce16014 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
@@ -64,6 +64,10 @@
 #    error "__cpp_lib_out_ptr should not be defined before c++23"
 #  endif
 
+#  ifdef __cpp_lib_pointer_tag_pair
+#    error "__cpp_lib_pointer_tag_pair should not be defined before c++29"
+#  endif
+
 #  ifdef __cpp_lib_ranges
 #    error "__cpp_lib_ranges should not be defined before c++20"
 #  endif
@@ -145,6 +149,10 @@
 #    error "__cpp_lib_out_ptr should not be defined before c++23"
 #  endif
 
+#  ifdef __cpp_lib_pointer_tag_pair
+#    error "__cpp_lib_pointer_tag_pair should not be defined before c++29"
+#  endif
+
 #  ifdef __cpp_lib_ranges
 #    error "__cpp_lib_ranges should not be defined before c++20"
 #  endif
@@ -238,6 +246,10 @@
 #    error "__cpp_lib_out_ptr should not be defined before c++23"
 #  endif
 
+#  ifdef __cpp_lib_pointer_tag_pair
+#    error "__cpp_lib_pointer_tag_pair should not be defined before c++29"
+#  endif
+
 #  ifdef __cpp_lib_ranges
 #    error "__cpp_lib_ranges should not be defined before c++20"
 #  endif
@@ -352,6 +364,10 @@
 #    error "__cpp_lib_out_ptr should not be defined before c++23"
 #  endif
 
+#  ifdef __cpp_lib_pointer_tag_pair
+#    error "__cpp_lib_pointer_tag_pair should not be defined before c++29"
+#  endif
+
 #  ifndef __cpp_lib_ranges
 #    error "__cpp_lib_ranges should be defined in c++20"
 #  endif
@@ -481,6 +497,10 @@
 #    error "__cpp_lib_out_ptr should have the value 202106L in c++23"
 #  endif
 
+#  ifdef __cpp_lib_pointer_tag_pair
+#    error "__cpp_lib_pointer_tag_pair should not be defined before c++29"
+#  endif
+
 #  ifndef __cpp_lib_ranges
 #    error "__cpp_lib_ranges should be defined in c++23"
 #  endif
@@ -613,6 +633,10 @@
 #    error "__cpp_lib_out_ptr should have the value 202311L in c++26"
 #  endif
 
+#  ifdef __cpp_lib_pointer_tag_pair
+#    error "__cpp_lib_pointer_tag_pair should not be defined before c++29"
+#  endif
+
 #  ifndef __cpp_lib_ranges
 #    error "__cpp_lib_ranges should be defined in c++26"
 #  endif
@@ -748,6 +772,19 @@
 #    error "__cpp_lib_out_ptr should have the value 202311L in c++29"
 #  endif
 
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_pointer_tag_pair
+#      error "__cpp_lib_pointer_tag_pair should be defined in c++29"
+#    endif
+#    if __cpp_lib_pointer_tag_pair != 202606L
+#      error "__cpp_lib_pointer_tag_pair should have the value 202606L in c++29"
+#    endif
+#  else
+#    ifdef __cpp_lib_pointer_tag_pair
+#      error "__cpp_lib_pointer_tag_pair should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
 #  ifndef __cpp_lib_ranges
 #    error "__cpp_lib_ranges should be defined in c++29"
 #  endif

diff  --git a/libcxx/test/std/language.support/support.limits/support.limits.general/thread.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/thread.version.compile.pass.cpp
index a34afd4f5c65b..4bd09f2b900fc 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/thread.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/thread.version.compile.pass.cpp
@@ -30,6 +30,10 @@
 #    error "__cpp_lib_jthread should not be defined before c++20"
 #  endif
 
+#  ifdef __cpp_lib_thread_attributes
+#    error "__cpp_lib_thread_attributes should not be defined before c++29"
+#  endif
+
 #elif TEST_STD_VER == 14
 
 #  ifdef __cpp_lib_formatters
@@ -40,6 +44,10 @@
 #    error "__cpp_lib_jthread should not be defined before c++20"
 #  endif
 
+#  ifdef __cpp_lib_thread_attributes
+#    error "__cpp_lib_thread_attributes should not be defined before c++29"
+#  endif
+
 #elif TEST_STD_VER == 17
 
 #  ifdef __cpp_lib_formatters
@@ -50,6 +58,10 @@
 #    error "__cpp_lib_jthread should not be defined before c++20"
 #  endif
 
+#  ifdef __cpp_lib_thread_attributes
+#    error "__cpp_lib_thread_attributes should not be defined before c++29"
+#  endif
+
 #elif TEST_STD_VER == 20
 
 #  ifdef __cpp_lib_formatters
@@ -69,6 +81,10 @@
 #    endif
 #  endif
 
+#  ifdef __cpp_lib_thread_attributes
+#    error "__cpp_lib_thread_attributes should not be defined before c++29"
+#  endif
+
 #elif TEST_STD_VER == 23
 
 #  if !defined(_LIBCPP_VERSION)
@@ -97,6 +113,10 @@
 #    endif
 #  endif
 
+#  ifdef __cpp_lib_thread_attributes
+#    error "__cpp_lib_thread_attributes should not be defined before c++29"
+#  endif
+
 #elif TEST_STD_VER == 26
 
 #  if !defined(_LIBCPP_VERSION)
@@ -125,6 +145,10 @@
 #    endif
 #  endif
 
+#  ifdef __cpp_lib_thread_attributes
+#    error "__cpp_lib_thread_attributes should not be defined before c++29"
+#  endif
+
 #elif TEST_STD_VER > 26
 
 #  if !defined(_LIBCPP_VERSION)
@@ -153,6 +177,19 @@
 #    endif
 #  endif
 
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_thread_attributes
+#      error "__cpp_lib_thread_attributes should be defined in c++29"
+#    endif
+#    if __cpp_lib_thread_attributes != 202606L
+#      error "__cpp_lib_thread_attributes should have the value 202606L in c++29"
+#    endif
+#  else
+#    ifdef __cpp_lib_thread_attributes
+#      error "__cpp_lib_thread_attributes should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
 #endif // TEST_STD_VER > 26
 
 // clang-format on

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 8d438527f1b8b..5997d155b574f 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
@@ -44,6 +44,10 @@
 #    error "__cpp_lib_generic_unordered_lookup should not be defined before c++20"
 #  endif
 
+#  ifdef __cpp_lib_map_lookup
+#    error "__cpp_lib_map_lookup should not be defined before c++29"
+#  endif
+
 #  ifdef __cpp_lib_node_extract
 #    error "__cpp_lib_node_extract should not be defined before c++17"
 #  endif
@@ -86,6 +90,10 @@
 #    error "__cpp_lib_generic_unordered_lookup should not be defined before c++20"
 #  endif
 
+#  ifdef __cpp_lib_map_lookup
+#    error "__cpp_lib_map_lookup should not be defined before c++29"
+#  endif
+
 #  ifdef __cpp_lib_node_extract
 #    error "__cpp_lib_node_extract should not be defined before c++17"
 #  endif
@@ -131,6 +139,10 @@
 #    error "__cpp_lib_generic_unordered_lookup should not be defined before c++20"
 #  endif
 
+#  ifdef __cpp_lib_map_lookup
+#    error "__cpp_lib_map_lookup should not be defined before c++29"
+#  endif
+
 #  ifndef __cpp_lib_node_extract
 #    error "__cpp_lib_node_extract should be defined in c++17"
 #  endif
@@ -191,6 +203,10 @@
 #    error "__cpp_lib_generic_unordered_lookup should have the value 201811L in c++20"
 #  endif
 
+#  ifdef __cpp_lib_map_lookup
+#    error "__cpp_lib_map_lookup should not be defined before c++29"
+#  endif
+
 #  ifndef __cpp_lib_node_extract
 #    error "__cpp_lib_node_extract should be defined in c++20"
 #  endif
@@ -263,6 +279,10 @@
 #    error "__cpp_lib_generic_unordered_lookup should have the value 201811L in c++23"
 #  endif
 
+#  ifdef __cpp_lib_map_lookup
+#    error "__cpp_lib_map_lookup should not be defined before c++29"
+#  endif
+
 #  ifndef __cpp_lib_node_extract
 #    error "__cpp_lib_node_extract should be defined in c++23"
 #  endif
@@ -353,6 +373,10 @@
 #    error "__cpp_lib_generic_unordered_lookup should have the value 201811L in c++26"
 #  endif
 
+#  ifdef __cpp_lib_map_lookup
+#    error "__cpp_lib_map_lookup should not be defined before c++29"
+#  endif
+
 #  ifndef __cpp_lib_node_extract
 #    error "__cpp_lib_node_extract should be defined in c++26"
 #  endif
@@ -443,6 +467,19 @@
 #    error "__cpp_lib_generic_unordered_lookup should have the value 201811L in c++29"
 #  endif
 
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_map_lookup
+#      error "__cpp_lib_map_lookup should be defined in c++29"
+#    endif
+#    if __cpp_lib_map_lookup != 202606L
+#      error "__cpp_lib_map_lookup should have the value 202606L in c++29"
+#    endif
+#  else
+#    ifdef __cpp_lib_map_lookup
+#      error "__cpp_lib_map_lookup should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
 #  ifndef __cpp_lib_node_extract
 #    error "__cpp_lib_node_extract should be defined in c++29"
 #  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 b7ac29dec3a22..769b79c7924d2 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
@@ -576,6 +576,10 @@
 #    error "__cpp_lib_make_unique should not be defined before c++14"
 #  endif
 
+#  ifdef __cpp_lib_map_lookup
+#    error "__cpp_lib_map_lookup should not be defined before c++29"
+#  endif
+
 #  ifdef __cpp_lib_map_try_emplace
 #    error "__cpp_lib_map_try_emplace should not be defined before c++17"
 #  endif
@@ -592,6 +596,10 @@
 #    error "__cpp_lib_mdspan should not be defined before c++23"
 #  endif
 
+#  ifdef __cpp_lib_mdspan_copy
+#    error "__cpp_lib_mdspan_copy should not be defined before c++29"
+#  endif
+
 #  ifdef __cpp_lib_memory_resource
 #    error "__cpp_lib_memory_resource should not be defined before c++17"
 #  endif
@@ -644,6 +652,10 @@
 #    error "__cpp_lib_philox_engine should not be defined before c++26"
 #  endif
 
+#  ifdef __cpp_lib_pointer_tag_pair
+#    error "__cpp_lib_pointer_tag_pair should not be defined before c++29"
+#  endif
+
 #  ifdef __cpp_lib_polymorphic_allocator
 #    error "__cpp_lib_polymorphic_allocator should not be defined before c++20"
 #  endif
@@ -804,6 +816,22 @@
 #    error "__cpp_lib_shift should not be defined before c++20"
 #  endif
 
+#  ifdef __cpp_lib_simd
+#    error "__cpp_lib_simd should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_simd_bitops
+#    error "__cpp_lib_simd_bitops should not be defined before c++29"
+#  endif
+
+#  ifdef __cpp_lib_simd_complex
+#    error "__cpp_lib_simd_complex should not be defined before c++29"
+#  endif
+
+#  ifdef __cpp_lib_simd_permutations
+#    error "__cpp_lib_simd_permutations should not be defined before c++26"
+#  endif
+
 #  ifdef __cpp_lib_smart_ptr_for_overwrite
 #    error "__cpp_lib_smart_ptr_for_overwrite should not be defined before c++20"
 #  endif
@@ -880,6 +908,10 @@
 #    error "__cpp_lib_text_encoding should not be defined before c++26"
 #  endif
 
+#  ifdef __cpp_lib_thread_attributes
+#    error "__cpp_lib_thread_attributes should not be defined before c++29"
+#  endif
+
 #  ifdef __cpp_lib_three_way_comparison
 #    error "__cpp_lib_three_way_comparison should not be defined before c++20"
 #  endif
@@ -1555,6 +1587,10 @@
 #    error "__cpp_lib_make_unique should have the value 201304L in c++14"
 #  endif
 
+#  ifdef __cpp_lib_map_lookup
+#    error "__cpp_lib_map_lookup should not be defined before c++29"
+#  endif
+
 #  ifdef __cpp_lib_map_try_emplace
 #    error "__cpp_lib_map_try_emplace should not be defined before c++17"
 #  endif
@@ -1571,6 +1607,10 @@
 #    error "__cpp_lib_mdspan should not be defined before c++23"
 #  endif
 
+#  ifdef __cpp_lib_mdspan_copy
+#    error "__cpp_lib_mdspan_copy should not be defined before c++29"
+#  endif
+
 #  ifdef __cpp_lib_memory_resource
 #    error "__cpp_lib_memory_resource should not be defined before c++17"
 #  endif
@@ -1626,6 +1666,10 @@
 #    error "__cpp_lib_philox_engine should not be defined before c++26"
 #  endif
 
+#  ifdef __cpp_lib_pointer_tag_pair
+#    error "__cpp_lib_pointer_tag_pair should not be defined before c++29"
+#  endif
+
 #  ifdef __cpp_lib_polymorphic_allocator
 #    error "__cpp_lib_polymorphic_allocator should not be defined before c++20"
 #  endif
@@ -1810,6 +1854,22 @@
 #    error "__cpp_lib_shift should not be defined before c++20"
 #  endif
 
+#  ifdef __cpp_lib_simd
+#    error "__cpp_lib_simd should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_simd_bitops
+#    error "__cpp_lib_simd_bitops should not be defined before c++29"
+#  endif
+
+#  ifdef __cpp_lib_simd_complex
+#    error "__cpp_lib_simd_complex should not be defined before c++29"
+#  endif
+
+#  ifdef __cpp_lib_simd_permutations
+#    error "__cpp_lib_simd_permutations should not be defined before c++26"
+#  endif
+
 #  ifdef __cpp_lib_smart_ptr_for_overwrite
 #    error "__cpp_lib_smart_ptr_for_overwrite should not be defined before c++20"
 #  endif
@@ -1889,6 +1949,10 @@
 #    error "__cpp_lib_text_encoding should not be defined before c++26"
 #  endif
 
+#  ifdef __cpp_lib_thread_attributes
+#    error "__cpp_lib_thread_attributes should not be defined before c++29"
+#  endif
+
 #  ifdef __cpp_lib_three_way_comparison
 #    error "__cpp_lib_three_way_comparison should not be defined before c++20"
 #  endif
@@ -2672,6 +2736,10 @@
 #    error "__cpp_lib_make_unique should have the value 201304L in c++17"
 #  endif
 
+#  ifdef __cpp_lib_map_lookup
+#    error "__cpp_lib_map_lookup should not be defined before c++29"
+#  endif
+
 #  ifndef __cpp_lib_map_try_emplace
 #    error "__cpp_lib_map_try_emplace should be defined in c++17"
 #  endif
@@ -2700,6 +2768,10 @@
 #    error "__cpp_lib_mdspan should not be defined before c++23"
 #  endif
 
+#  ifdef __cpp_lib_mdspan_copy
+#    error "__cpp_lib_mdspan_copy should not be defined before c++29"
+#  endif
+
 #  if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_PMR
 #    ifndef __cpp_lib_memory_resource
 #      error "__cpp_lib_memory_resource should be defined in c++17"
@@ -2785,6 +2857,10 @@
 #    error "__cpp_lib_philox_engine should not be defined before c++26"
 #  endif
 
+#  ifdef __cpp_lib_pointer_tag_pair
+#    error "__cpp_lib_pointer_tag_pair should not be defined before c++29"
+#  endif
+
 #  ifdef __cpp_lib_polymorphic_allocator
 #    error "__cpp_lib_polymorphic_allocator should not be defined before c++20"
 #  endif
@@ -2999,6 +3075,22 @@
 #    error "__cpp_lib_shift should not be defined before c++20"
 #  endif
 
+#  ifdef __cpp_lib_simd
+#    error "__cpp_lib_simd should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_simd_bitops
+#    error "__cpp_lib_simd_bitops should not be defined before c++29"
+#  endif
+
+#  ifdef __cpp_lib_simd_complex
+#    error "__cpp_lib_simd_complex should not be defined before c++29"
+#  endif
+
+#  ifdef __cpp_lib_simd_permutations
+#    error "__cpp_lib_simd_permutations should not be defined before c++26"
+#  endif
+
 #  ifdef __cpp_lib_smart_ptr_for_overwrite
 #    error "__cpp_lib_smart_ptr_for_overwrite should not be defined before c++20"
 #  endif
@@ -3081,6 +3173,10 @@
 #    error "__cpp_lib_text_encoding should not be defined before c++26"
 #  endif
 
+#  ifdef __cpp_lib_thread_attributes
+#    error "__cpp_lib_thread_attributes should not be defined before c++29"
+#  endif
+
 #  ifdef __cpp_lib_three_way_comparison
 #    error "__cpp_lib_three_way_comparison should not be defined before c++20"
 #  endif
@@ -4080,6 +4176,10 @@
 #    error "__cpp_lib_make_unique should have the value 201304L in c++20"
 #  endif
 
+#  ifdef __cpp_lib_map_lookup
+#    error "__cpp_lib_map_lookup should not be defined before c++29"
+#  endif
+
 #  ifndef __cpp_lib_map_try_emplace
 #    error "__cpp_lib_map_try_emplace should be defined in c++20"
 #  endif
@@ -4111,6 +4211,10 @@
 #    error "__cpp_lib_mdspan should not be defined before c++23"
 #  endif
 
+#  ifdef __cpp_lib_mdspan_copy
+#    error "__cpp_lib_mdspan_copy should not be defined before c++29"
+#  endif
+
 #  if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_PMR
 #    ifndef __cpp_lib_memory_resource
 #      error "__cpp_lib_memory_resource should be defined in c++20"
@@ -4199,6 +4303,10 @@
 #    error "__cpp_lib_philox_engine should not be defined before c++26"
 #  endif
 
+#  ifdef __cpp_lib_pointer_tag_pair
+#    error "__cpp_lib_pointer_tag_pair should not be defined before c++29"
+#  endif
+
 #  if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_PMR
 #    ifndef __cpp_lib_polymorphic_allocator
 #      error "__cpp_lib_polymorphic_allocator should be defined in c++20"
@@ -4440,6 +4548,22 @@
 #    error "__cpp_lib_shift should have the value 201806L in c++20"
 #  endif
 
+#  ifdef __cpp_lib_simd
+#    error "__cpp_lib_simd should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_simd_bitops
+#    error "__cpp_lib_simd_bitops should not be defined before c++29"
+#  endif
+
+#  ifdef __cpp_lib_simd_complex
+#    error "__cpp_lib_simd_complex should not be defined before c++29"
+#  endif
+
+#  ifdef __cpp_lib_simd_permutations
+#    error "__cpp_lib_simd_permutations should not be defined before c++26"
+#  endif
+
 #  ifndef __cpp_lib_smart_ptr_for_overwrite
 #    error "__cpp_lib_smart_ptr_for_overwrite should be defined in c++20"
 #  endif
@@ -4546,6 +4670,10 @@
 #    error "__cpp_lib_text_encoding should not be defined before c++26"
 #  endif
 
+#  ifdef __cpp_lib_thread_attributes
+#    error "__cpp_lib_thread_attributes should not be defined before c++29"
+#  endif
+
 #  ifndef __cpp_lib_three_way_comparison
 #    error "__cpp_lib_three_way_comparison should be defined in c++20"
 #  endif
@@ -5644,6 +5772,10 @@
 #    error "__cpp_lib_make_unique should have the value 201304L in c++23"
 #  endif
 
+#  ifdef __cpp_lib_map_lookup
+#    error "__cpp_lib_map_lookup should not be defined before c++29"
+#  endif
+
 #  ifndef __cpp_lib_map_try_emplace
 #    error "__cpp_lib_map_try_emplace should be defined in c++23"
 #  endif
@@ -5678,6 +5810,10 @@
 #    error "__cpp_lib_mdspan should have the value 202207L in c++23"
 #  endif
 
+#  ifdef __cpp_lib_mdspan_copy
+#    error "__cpp_lib_mdspan_copy should not be defined before c++29"
+#  endif
+
 #  if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_PMR
 #    ifndef __cpp_lib_memory_resource
 #      error "__cpp_lib_memory_resource should be defined in c++23"
@@ -5781,6 +5917,10 @@
 #    error "__cpp_lib_philox_engine should not be defined before c++26"
 #  endif
 
+#  ifdef __cpp_lib_pointer_tag_pair
+#    error "__cpp_lib_pointer_tag_pair should not be defined before c++29"
+#  endif
+
 #  if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_PMR
 #    ifndef __cpp_lib_polymorphic_allocator
 #      error "__cpp_lib_polymorphic_allocator should be defined in c++23"
@@ -6106,6 +6246,22 @@
 #    error "__cpp_lib_shift should have the value 202202L in c++23"
 #  endif
 
+#  ifdef __cpp_lib_simd
+#    error "__cpp_lib_simd should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_simd_bitops
+#    error "__cpp_lib_simd_bitops should not be defined before c++29"
+#  endif
+
+#  ifdef __cpp_lib_simd_complex
+#    error "__cpp_lib_simd_complex should not be defined before c++29"
+#  endif
+
+#  ifdef __cpp_lib_simd_permutations
+#    error "__cpp_lib_simd_permutations should not be defined before c++26"
+#  endif
+
 #  ifndef __cpp_lib_smart_ptr_for_overwrite
 #    error "__cpp_lib_smart_ptr_for_overwrite should be defined in c++23"
 #  endif
@@ -6239,6 +6395,10 @@
 #    error "__cpp_lib_text_encoding should not be defined before c++26"
 #  endif
 
+#  ifdef __cpp_lib_thread_attributes
+#    error "__cpp_lib_thread_attributes should not be defined before c++29"
+#  endif
+
 #  ifndef __cpp_lib_three_way_comparison
 #    error "__cpp_lib_three_way_comparison should be defined in c++23"
 #  endif
@@ -7583,6 +7743,10 @@
 #    error "__cpp_lib_make_unique should have the value 201304L in c++26"
 #  endif
 
+#  ifdef __cpp_lib_map_lookup
+#    error "__cpp_lib_map_lookup should not be defined before c++29"
+#  endif
+
 #  ifndef __cpp_lib_map_try_emplace
 #    error "__cpp_lib_map_try_emplace should be defined in c++26"
 #  endif
@@ -7617,6 +7781,10 @@
 #    error "__cpp_lib_mdspan should have the value 202406L in c++26"
 #  endif
 
+#  ifdef __cpp_lib_mdspan_copy
+#    error "__cpp_lib_mdspan_copy should not be defined before c++29"
+#  endif
+
 #  if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_PMR
 #    ifndef __cpp_lib_memory_resource
 #      error "__cpp_lib_memory_resource should be defined in c++26"
@@ -7738,6 +7906,10 @@
 #    endif
 #  endif
 
+#  ifdef __cpp_lib_pointer_tag_pair
+#    error "__cpp_lib_pointer_tag_pair should not be defined before c++29"
+#  endif
+
 #  if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_PMR
 #    ifndef __cpp_lib_polymorphic_allocator
 #      error "__cpp_lib_polymorphic_allocator should be defined in c++26"
@@ -8096,6 +8268,40 @@
 #    error "__cpp_lib_shift should have the value 202202L in c++26"
 #  endif
 
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_simd
+#      error "__cpp_lib_simd should be defined in c++26"
+#    endif
+#    if __cpp_lib_simd != 202606L
+#      error "__cpp_lib_simd should have the value 202606L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_simd
+#      error "__cpp_lib_simd should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifdef __cpp_lib_simd_bitops
+#    error "__cpp_lib_simd_bitops should not be defined before c++29"
+#  endif
+
+#  ifdef __cpp_lib_simd_complex
+#    error "__cpp_lib_simd_complex should not be defined before c++29"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_simd_permutations
+#      error "__cpp_lib_simd_permutations should be defined in c++26"
+#    endif
+#    if __cpp_lib_simd_permutations != 202606L
+#      error "__cpp_lib_simd_permutations should have the value 202606L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_simd_permutations
+#      error "__cpp_lib_simd_permutations should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
 #  ifndef __cpp_lib_smart_ptr_for_overwrite
 #    error "__cpp_lib_smart_ptr_for_overwrite should be defined in c++26"
 #  endif
@@ -8253,6 +8459,10 @@
 #    error "__cpp_lib_text_encoding should have the value 202306L in c++26"
 #  endif
 
+#  ifdef __cpp_lib_thread_attributes
+#    error "__cpp_lib_thread_attributes should not be defined before c++29"
+#  endif
+
 #  ifndef __cpp_lib_three_way_comparison
 #    error "__cpp_lib_three_way_comparison should be defined in c++26"
 #  endif
@@ -9606,6 +9816,19 @@
 #    error "__cpp_lib_make_unique should have the value 201304L in c++29"
 #  endif
 
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_map_lookup
+#      error "__cpp_lib_map_lookup should be defined in c++29"
+#    endif
+#    if __cpp_lib_map_lookup != 202606L
+#      error "__cpp_lib_map_lookup should have the value 202606L in c++29"
+#    endif
+#  else
+#    ifdef __cpp_lib_map_lookup
+#      error "__cpp_lib_map_lookup should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
 #  ifndef __cpp_lib_map_try_emplace
 #    error "__cpp_lib_map_try_emplace should be defined in c++29"
 #  endif
@@ -9640,6 +9863,19 @@
 #    error "__cpp_lib_mdspan should have the value 202406L in c++29"
 #  endif
 
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_mdspan_copy
+#      error "__cpp_lib_mdspan_copy should be defined in c++29"
+#    endif
+#    if __cpp_lib_mdspan_copy != 202606L
+#      error "__cpp_lib_mdspan_copy should have the value 202606L in c++29"
+#    endif
+#  else
+#    ifdef __cpp_lib_mdspan_copy
+#      error "__cpp_lib_mdspan_copy should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
 #  if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_PMR
 #    ifndef __cpp_lib_memory_resource
 #      error "__cpp_lib_memory_resource should be defined in c++29"
@@ -9761,6 +9997,19 @@
 #    endif
 #  endif
 
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_pointer_tag_pair
+#      error "__cpp_lib_pointer_tag_pair should be defined in c++29"
+#    endif
+#    if __cpp_lib_pointer_tag_pair != 202606L
+#      error "__cpp_lib_pointer_tag_pair should have the value 202606L in c++29"
+#    endif
+#  else
+#    ifdef __cpp_lib_pointer_tag_pair
+#      error "__cpp_lib_pointer_tag_pair should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
 #  if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_PMR
 #    ifndef __cpp_lib_polymorphic_allocator
 #      error "__cpp_lib_polymorphic_allocator should be defined in c++29"
@@ -10119,6 +10368,58 @@
 #    error "__cpp_lib_shift should have the value 202202L in c++29"
 #  endif
 
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_simd
+#      error "__cpp_lib_simd should be defined in c++29"
+#    endif
+#    if __cpp_lib_simd != 202606L
+#      error "__cpp_lib_simd should have the value 202606L in c++29"
+#    endif
+#  else
+#    ifdef __cpp_lib_simd
+#      error "__cpp_lib_simd should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_simd_bitops
+#      error "__cpp_lib_simd_bitops should be defined in c++29"
+#    endif
+#    if __cpp_lib_simd_bitops != 202607L
+#      error "__cpp_lib_simd_bitops should have the value 202607L in c++29"
+#    endif
+#  else
+#    ifdef __cpp_lib_simd_bitops
+#      error "__cpp_lib_simd_bitops should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_simd_complex
+#      error "__cpp_lib_simd_complex should be defined in c++29"
+#    endif
+#    if __cpp_lib_simd_complex != 202502L
+#      error "__cpp_lib_simd_complex should have the value 202502L in c++29"
+#    endif
+#  else
+#    ifdef __cpp_lib_simd_complex
+#      error "__cpp_lib_simd_complex should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_simd_permutations
+#      error "__cpp_lib_simd_permutations should be defined in c++29"
+#    endif
+#    if __cpp_lib_simd_permutations != 202606L
+#      error "__cpp_lib_simd_permutations should have the value 202606L in c++29"
+#    endif
+#  else
+#    ifdef __cpp_lib_simd_permutations
+#      error "__cpp_lib_simd_permutations should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
 #  ifndef __cpp_lib_smart_ptr_for_overwrite
 #    error "__cpp_lib_smart_ptr_for_overwrite should be defined in c++29"
 #  endif
@@ -10276,6 +10577,19 @@
 #    error "__cpp_lib_text_encoding should have the value 202306L in c++29"
 #  endif
 
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_thread_attributes
+#      error "__cpp_lib_thread_attributes should be defined in c++29"
+#    endif
+#    if __cpp_lib_thread_attributes != 202606L
+#      error "__cpp_lib_thread_attributes should have the value 202606L in c++29"
+#    endif
+#  else
+#    ifdef __cpp_lib_thread_attributes
+#      error "__cpp_lib_thread_attributes should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
 #  ifndef __cpp_lib_three_way_comparison
 #    error "__cpp_lib_three_way_comparison should be defined in c++29"
 #  endif

diff  --git a/libcxx/utils/generate_feature_test_macro_components.py b/libcxx/utils/generate_feature_test_macro_components.py
index 4f56fd83fa202..6b4acf671a0c9 100644
--- a/libcxx/utils/generate_feature_test_macro_components.py
+++ b/libcxx/utils/generate_feature_test_macro_components.py
@@ -246,7 +246,11 @@ def add_version_header(tc):
         },
         {
             "name": "__cpp_lib_bitops",
-            "values": {"c++20": 201907},
+            "values": {
+                "c++20": 201907,
+                # "c++29": 202606,  # P3793R2 Better shifting
+                # "c++29": 202607,  # P3104R6 Bit permutations
+            },
             "headers": ["bit"],
         },
         {
@@ -561,7 +565,10 @@ def add_version_header(tc):
         },
         {
             "name": "__cpp_lib_expected",
-            "values": {"c++23": 202211},
+            "values": {
+                "c++23": 202211,
+                # "c++29": 202606 # P3798R1 The unexpected in std::expected
+            },
             "headers": ["expected"],
         },
         {
@@ -744,10 +751,11 @@ 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.
-            ],
+            "values": {
+                "c++26": 202306,  # P2530R3 Hazard Pointers for C++26
+                # "c++29": 202606,  # P3428R4 Hazard Pointer Batches
+            },
+            "headers": ["hazard_pointer"],
             "unimplemented": True,
         },
         {
@@ -950,6 +958,14 @@ def add_version_header(tc):
             "values": {"c++14": 201304},
             "headers": ["memory"],
         },
+        {
+            "name": "__cpp_lib_map_lookup",
+            "values": {
+                "c++29": 202606
+            },  # P3091R6 Better Lookups for map, unordered_map, and flat_map
+            "headers": ["flat_map", "map", "unordered_map"],
+            "unimplemented": True,
+        },
         {
             "name": "__cpp_lib_map_try_emplace",
             "values": {"c++17": 201411},
@@ -974,6 +990,12 @@ def add_version_header(tc):
             },
             "headers": ["mdspan"],
         },
+        {
+            "name": "__cpp_lib_mdspan_copy",
+            "values": {"c++29": 202606},  # P3242R4 Copy and fill for mdspan
+            "headers": ["mdspan"],
+            "unimplemented": True,
+        },
         {
             "name": "__cpp_lib_memory_resource",
             "values": {"c++17": 201603},
@@ -1073,6 +1095,12 @@ def add_version_header(tc):
             "headers": ["random"],
             "unimplemented": True,
         },
+        {
+            "name": "__cpp_lib_pointer_tag_pair",
+            "values": {"c++29": 202606},  # P3125R6 constexpr pointer tagging
+            "headers": ["memory"],
+            "unimplemented": True,
+        },
         {
             "name": "__cpp_lib_polymorphic_allocator",
             "values": {"c++20": 201902},
@@ -1308,6 +1336,37 @@ def add_version_header(tc):
             "values": {"c++20": 201806, "c++23": 202202},
             "headers": ["algorithm"],
         },
+        {
+            "name": "__cpp_lib_simd",
+            "values": {
+                "c++26": 202606
+            },  # P3319R6 Add an iota object for simd (and more)
+            "headers": ["simd"],
+            "unimplemented": True,
+        },
+        {
+            "name": "__cpp_lib_simd_bitops",
+            "values": {
+                # "c++29": 202606 # P3793R2 Better shifting
+                "c++29": 202607  # P3772R2 std::simd overloads for bit permutations
+            },
+            "headers": ["simd"],
+            "unimplemented": True,
+        },
+        {
+            "name": "__cpp_lib_simd_complex",
+            "values": {"c++29": 202502},  # P3793R2 Better shifting
+            "headers": ["simd"],
+            "unimplemented": True,
+        },
+        {
+            "name": "__cpp_lib_simd_permutations",
+            "values": {
+                "c++26": 202606
+            },  # P3319R6 Add an iota object for simd (and more)
+            "headers": ["simd"],
+            "unimplemented": True,
+        },
         {
             "name": "__cpp_lib_smart_ptr_for_overwrite",
             "values": {"c++20": 202002},
@@ -1425,6 +1484,12 @@ def add_version_header(tc):
             },
             "headers": ["text_encoding"],
         },
+        {
+            "name": "__cpp_lib_thread_attributes",
+            "values": {"c++29": 202606},  # P2019R9 Thread attributes
+            "headers": ["thread"],
+            "unimplemented": True,
+        },
         {
             "name": "__cpp_lib_three_way_comparison",
             "values": {"c++20": 201907},
@@ -1445,6 +1510,7 @@ def add_version_header(tc):
             "values": {
                 "c++17": 201611,
                 "c++26": 202306,  # P2497R0 Testing for success or failure of <charconv> functions
+                # "c++29": 202606   # P3505R4 Fix the default floating-point representation in std::format
             },
             "headers": ["charconv"],
             "unimplemented": True,


        


More information about the libcxx-commits mailing list