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

Hristo Hristov via libcxx-commits libcxx-commits at lists.llvm.org
Sun Aug 23 06:24:57 PDT 2026


https://github.com/H-G-Hristov created https://github.com/llvm/llvm-project/pull/218241

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

>From ed1f1ca9b903c23a3e729ea60919ddb6a971f344 Mon Sep 17 00:00:00 2001
From: Hristo Hristov <hghristov.rmm at gmail.com>
Date: Sun, 23 Aug 2026 16:24:35 +0300
Subject: [PATCH] [libc++][FTM] Updated FTMs from C++29 ... and a few missing
 ones from previous standard versions.

---
 .../generate_feature_test_macro_components.py | 96 +++++++++++++++++--
 1 file changed, 89 insertions(+), 7 deletions(-)

diff --git a/libcxx/utils/generate_feature_test_macro_components.py b/libcxx/utils/generate_feature_test_macro_components.py
index 07de473bbc038..7da0d73b60f99 100644
--- a/libcxx/utils/generate_feature_test_macro_components.py
+++ b/libcxx/utils/generate_feature_test_macro_components.py
@@ -246,7 +246,10 @@ def add_version_header(tc):
         },
         {
             "name": "__cpp_lib_bitops",
-            "values": {"c++20": 201907},
+            "values": {
+                "c++20": 201907,
+                # "c++29": 202607,  # P3104R6 Bit permutations
+            },
             "headers": ["bit"],
         },
         {
@@ -336,7 +339,8 @@ def add_version_header(tc):
         {
             "name": "__cpp_lib_constant_wrapper",
             "values": {
-                "c++26": 202606,
+                "c++26": 202603,
+                # "c++29": 202606, # P4206R0 Revert string support in std::constant_wrapper
             },
             "headers": ["utility"],
         },
@@ -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": ["map"],
+            "unimplemented": True,
+        },
         {
             "name": "__cpp_lib_map_try_emplace",
             "values": {"c++17": 201411},
@@ -974,6 +990,14 @@ 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 +1097,14 @@ 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},
@@ -1313,6 +1345,47 @@ def add_version_header(tc):
             "values": {"c++20": 202002},
             "headers": ["memory"],
         },
+        {
+            "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": 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  # P1020R1 Smart pointer creation with default initialization
+                                 # P1973R1 Rename “_default_init” Functions
+            },
+            "headers": ["memory"],
+            "unimplemented": True,
+        },
         {
             "name": "__cpp_lib_smart_ptr_owner_equality",
             "values": {
@@ -1425,6 +1498,14 @@ def add_version_header(tc):
             },
             "headers": ["text_encoding"],
         },
+        {
+            "name": "__cpp_lib_thread_attributes",
+            "values": {
+                "c++29": 202606  # P2019R9 Thread attributes
+            },
+            "headers": ["compare"],
+            "unimplemented": True,
+        },
         {
             "name": "__cpp_lib_three_way_comparison",
             "values": {"c++20": 201907},
@@ -1445,6 +1526,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