[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