[llvm-branch-commits] [libcxx] [libc++] Adds a FTM v2 data file generator. (PR #134555)

Mark de Wever via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Sun Apr 6 10:56:42 PDT 2025


https://github.com/mordante created https://github.com/llvm/llvm-project/pull/134555

This generator converts the existing data structure to the new JSON format. Next to adding the generator add the output of the tests in a new directory beneath the existing directory. This allows validating the output for the old and new tests. (These should be almost identical.)

This infrastructure allows using the new code and developing additional features without changing the existing work-flow. Then at some point we can switch from the old to the new version without a lot of additional manual work or merge conflicts.

The new files are generated by the normal libcxx-generate-files cmake target that is used to update the existing FTM macros.

Note the new code have no tests; the validation of the output and testing in the CI shows it works. This code will be removed in the future.

>From 4ef5a855816655466e0db714516060a7176ae5a7 Mon Sep 17 00:00:00 2001
From: Mark de Wever <koraq at xs4all.nl>
Date: Sun, 6 Apr 2025 19:54:24 +0200
Subject: [PATCH] [libc++] Adds a FTM v2 data file generator.

This generator converts the existing data structure to the new JSON
format. Next to adding the generator add the output of the tests in a
new directory beneath the existing directory. This allows validating the
output for the old and new tests. (These should be almost identical.)

This infrastructure allows using the new code and developing additional
features without changing the existing work-flow. Then at some point we
can switch from the old to the new version without a lot of additional
manual work or merge conflicts.

The new files are generated by the normal libcxx-generate-files cmake
target that is used to update the existing FTM macros.

Note the new code have no tests; the validation of the output and
testing in the CI shows it works. This code will be removed in the
future.
---
 .../v2/algorithm.version.compile.pass.cpp     |  463 +++
 .../v2/any.version.compile.pass.cpp           |   73 +
 .../v2/array.version.compile.pass.cpp         |  175 +
 .../v2/atomic.version.compile.pass.cpp        |  424 +++
 .../v2/barrier.version.compile.pass.cpp       |   90 +
 .../v2/bit.version.compile.pass.cpp           |  199 ++
 .../v2/bitset.version.compile.pass.cpp        |   94 +
 .../v2/charconv.version.compile.pass.cpp      |  127 +
 .../v2/chrono.version.compile.pass.cpp        |  112 +
 .../v2/cmath.version.compile.pass.cpp         |  208 ++
 .../v2/compare.version.compile.pass.cpp       |   70 +
 .../v2/complex.version.compile.pass.cpp       |  109 +
 .../v2/concepts.version.compile.pass.cpp      |   70 +
 .../v2/coroutine.version.compile.pass.cpp     |   70 +
 .../v2/cstddef.version.compile.pass.cpp       |   73 +
 .../v2/cstdlib.version.compile.pass.cpp       |   81 +
 .../v2/cstring.version.compile.pass.cpp       |   72 +
 .../v2/debugging.version.compile.pass.cpp     |   72 +
 .../v2/deque.version.compile.pass.cpp         |  205 ++
 .../v2/exception.version.compile.pass.cpp     |   73 +
 .../v2/execution.version.compile.pass.cpp     |  132 +
 .../v2/expected.version.compile.pass.cpp      |  100 +
 .../v2/filesystem.version.compile.pass.cpp    |  183 +
 .../v2/flat_map.version.compile.pass.cpp      |   67 +
 .../v2/flat_set.version.compile.pass.cpp      |   81 +
 .../v2/format.version.compile.pass.cpp        |  151 +
 .../v2/forward_list.version.compile.pass.cpp  |  274 ++
 .../v2/fstream.version.compile.pass.cpp       |   72 +
 .../v2/functional.version.compile.pass.cpp    |  550 +++
 .../hazard_pointer.version.compile.pass.cpp   |   72 +
 .../inplace_vector.version.compile.pass.cpp   |   72 +
 .../v2/iomanip.version.compile.pass.cpp       |  108 +
 .../v2/ios.version.compile.pass.cpp           |   69 +
 .../v2/istream.version.compile.pass.cpp       |   90 +
 .../v2/iterator.version.compile.pass.cpp      |  319 ++
 .../v2/latch.version.compile.pass.cpp         |   90 +
 .../v2/limits.version.compile.pass.cpp        |   88 +
 .../v2/linalg.version.compile.pass.cpp        |   72 +
 .../v2/list.version.compile.pass.cpp          |  274 ++
 .../v2/locale.version.compile.pass.cpp        |   90 +
 .../v2/map.version.compile.pass.cpp           |  400 +++
 .../v2/mdspan.version.compile.pass.cpp        |  133 +
 .../v2/memory.version.compile.pass.cpp        |  655 ++++
 .../memory_resource.version.compile.pass.cpp  |  148 +
 .../v2/mutex.version.compile.pass.cpp         |   99 +
 .../v2/new.version.compile.pass.cpp           |  217 ++
 .../v2/numbers.version.compile.pass.cpp       |   70 +
 .../v2/numeric.version.compile.pass.cpp       |  268 ++
 .../v2/optional.version.compile.pass.cpp      |  172 +
 .../v2/ostream.version.compile.pass.cpp       |  132 +
 .../v2/print.version.compile.pass.cpp         |   81 +
 .../v2/queue.version.compile.pass.cpp         |   97 +
 .../v2/random.version.compile.pass.cpp        |  105 +
 .../v2/ranges.version.compile.pass.cpp        |  466 +++
 .../v2/ratio.version.compile.pass.cpp         |   64 +
 .../v2/rcu.version.compile.pass.cpp           |   72 +
 .../v2/regex.version.compile.pass.cpp         |   75 +
 .../scoped_allocator.version.compile.pass.cpp |   73 +
 .../v2/semaphore.version.compile.pass.cpp     |   90 +
 .../v2/set.version.compile.pass.cpp           |  322 ++
 .../v2/shared_mutex.version.compile.pass.cpp  |  168 +
 .../source_location.version.compile.pass.cpp  |   70 +
 .../v2/span.version.compile.pass.cpp          |  124 +
 .../v2/spanstream.version.compile.pass.cpp    |   81 +
 .../v2/sstream.version.compile.pass.cpp       |   66 +
 .../v2/stack.version.compile.pass.cpp         |   97 +
 .../v2/stacktrace.version.compile.pass.cpp    |  123 +
 .../v2/stdatomic.h.version.compile.pass.cpp   |   69 +
 .../v2/stop_token.version.compile.pass.cpp    |   90 +
 .../v2/string.version.compile.pass.cpp        |  490 +++
 .../v2/string_view.version.compile.pass.cpp   |  253 ++
 .../v2/syncstream.version.compile.pass.cpp    |   90 +
 .../v2/text_encoding.version.compile.pass.cpp |   72 +
 .../v2/thread.version.compile.pass.cpp        |  132 +
 .../v2/tuple.version.compile.pass.cpp         |  337 ++
 .../v2/type_traits.version.compile.pass.cpp   |  967 ++++++
 .../v2/typeinfo.version.compile.pass.cpp      |   67 +
 .../v2/unordered_map.version.compile.pass.cpp |  394 +++
 .../v2/unordered_set.version.compile.pass.cpp |  316 ++
 .../v2/utility.version.compile.pass.cpp       |  496 +++
 .../v2/variant.version.compile.pass.cpp       |  139 +
 .../v2/vector.version.compile.pass.cpp        |  274 ++
 .../utils/data/feature_test_macro/data.json   | 3000 +++++++++++++++++
 .../generate_feature_test_macro_components.py |   83 +-
 84 files changed, 17550 insertions(+), 1 deletion(-)
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/algorithm.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/any.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/array.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/atomic.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/barrier.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/bit.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/bitset.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/charconv.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/chrono.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/cmath.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/compare.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/complex.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/concepts.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/coroutine.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/cstddef.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/cstdlib.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/cstring.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/debugging.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/deque.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/exception.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/execution.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/expected.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/filesystem.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/flat_map.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/flat_set.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/format.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/forward_list.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/fstream.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/functional.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/hazard_pointer.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/inplace_vector.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/iomanip.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/ios.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/istream.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/iterator.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/latch.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/limits.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/linalg.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/list.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/locale.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/map.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/mdspan.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/memory.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/memory_resource.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/mutex.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/new.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/numbers.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/numeric.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/optional.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/ostream.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/print.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/queue.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/random.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/ranges.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/ratio.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/rcu.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/regex.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/scoped_allocator.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/semaphore.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/set.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/shared_mutex.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/source_location.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/span.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/spanstream.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/sstream.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/stack.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/stacktrace.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/stdatomic.h.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/stop_token.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/string.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/string_view.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/syncstream.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/text_encoding.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/thread.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/tuple.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/type_traits.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/typeinfo.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/unordered_map.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/unordered_set.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/utility.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/variant.version.compile.pass.cpp
 create mode 100644 libcxx/test/std/language.support/support.limits/support.limits.general/v2/vector.version.compile.pass.cpp
 create mode 100644 libcxx/utils/data/feature_test_macro/data.json

diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/algorithm.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/algorithm.version.compile.pass.cpp
new file mode 100644
index 0000000000000..2aa0ad30abfe7
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/algorithm.version.compile.pass.cpp
@@ -0,0 +1,463 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <algorithm>
+
+// Test the feature test macros defined by <algorithm>
+
+// clang-format off
+
+#include <algorithm>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_clamp
+#    error "__cpp_lib_clamp should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_constexpr_algorithms
+#    error "__cpp_lib_constexpr_algorithms should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_default_template_type_for_algorithm_values
+#    error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_freestanding_algorithm
+#    error "__cpp_lib_freestanding_algorithm should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_parallel_algorithm
+#    error "__cpp_lib_parallel_algorithm should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_ranges
+#    error "__cpp_lib_ranges should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_ranges_contains
+#    error "__cpp_lib_ranges_contains should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_ranges_find_last
+#    error "__cpp_lib_ranges_find_last should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_ranges_starts_ends_with
+#    error "__cpp_lib_ranges_starts_ends_with should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_robust_nonmodifying_seq_ops
+#    error "__cpp_lib_robust_nonmodifying_seq_ops should not be defined before c++14"
+#  endif
+
+#  ifdef __cpp_lib_sample
+#    error "__cpp_lib_sample should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_shift
+#    error "__cpp_lib_shift should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_clamp
+#    error "__cpp_lib_clamp should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_constexpr_algorithms
+#    error "__cpp_lib_constexpr_algorithms should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_default_template_type_for_algorithm_values
+#    error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_freestanding_algorithm
+#    error "__cpp_lib_freestanding_algorithm should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_parallel_algorithm
+#    error "__cpp_lib_parallel_algorithm should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_ranges
+#    error "__cpp_lib_ranges should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_ranges_contains
+#    error "__cpp_lib_ranges_contains should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_ranges_find_last
+#    error "__cpp_lib_ranges_find_last should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_ranges_starts_ends_with
+#    error "__cpp_lib_ranges_starts_ends_with should not be defined before c++23"
+#  endif
+
+#  ifndef __cpp_lib_robust_nonmodifying_seq_ops
+#    error "__cpp_lib_robust_nonmodifying_seq_ops should be defined in c++14"
+#  endif
+#  if __cpp_lib_robust_nonmodifying_seq_ops != 201304L
+#    error "__cpp_lib_robust_nonmodifying_seq_ops should have the value 201304L in c++14"
+#  endif
+
+#  ifdef __cpp_lib_sample
+#    error "__cpp_lib_sample should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_shift
+#    error "__cpp_lib_shift should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifndef __cpp_lib_clamp
+#    error "__cpp_lib_clamp should be defined in c++17"
+#  endif
+#  if __cpp_lib_clamp != 201603L
+#    error "__cpp_lib_clamp should have the value 201603L in c++17"
+#  endif
+
+#  ifdef __cpp_lib_constexpr_algorithms
+#    error "__cpp_lib_constexpr_algorithms should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_default_template_type_for_algorithm_values
+#    error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_freestanding_algorithm
+#    error "__cpp_lib_freestanding_algorithm should not be defined before c++26"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_parallel_algorithm
+#      error "__cpp_lib_parallel_algorithm should be defined in c++17"
+#    endif
+#    if __cpp_lib_parallel_algorithm != 201603L
+#      error "__cpp_lib_parallel_algorithm should have the value 201603L in c++17"
+#    endif
+#  else
+#    ifdef __cpp_lib_parallel_algorithm
+#      error "__cpp_lib_parallel_algorithm should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifdef __cpp_lib_ranges
+#    error "__cpp_lib_ranges should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_ranges_contains
+#    error "__cpp_lib_ranges_contains should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_ranges_find_last
+#    error "__cpp_lib_ranges_find_last should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_ranges_starts_ends_with
+#    error "__cpp_lib_ranges_starts_ends_with should not be defined before c++23"
+#  endif
+
+#  ifndef __cpp_lib_robust_nonmodifying_seq_ops
+#    error "__cpp_lib_robust_nonmodifying_seq_ops should be defined in c++17"
+#  endif
+#  if __cpp_lib_robust_nonmodifying_seq_ops != 201304L
+#    error "__cpp_lib_robust_nonmodifying_seq_ops should have the value 201304L in c++17"
+#  endif
+
+#  ifndef __cpp_lib_sample
+#    error "__cpp_lib_sample should be defined in c++17"
+#  endif
+#  if __cpp_lib_sample != 201603L
+#    error "__cpp_lib_sample should have the value 201603L in c++17"
+#  endif
+
+#  ifdef __cpp_lib_shift
+#    error "__cpp_lib_shift should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifndef __cpp_lib_clamp
+#    error "__cpp_lib_clamp should be defined in c++20"
+#  endif
+#  if __cpp_lib_clamp != 201603L
+#    error "__cpp_lib_clamp should have the value 201603L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_constexpr_algorithms
+#    error "__cpp_lib_constexpr_algorithms should be defined in c++20"
+#  endif
+#  if __cpp_lib_constexpr_algorithms != 201806L
+#    error "__cpp_lib_constexpr_algorithms should have the value 201806L in c++20"
+#  endif
+
+#  ifdef __cpp_lib_default_template_type_for_algorithm_values
+#    error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_freestanding_algorithm
+#    error "__cpp_lib_freestanding_algorithm should not be defined before c++26"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_parallel_algorithm
+#      error "__cpp_lib_parallel_algorithm should be defined in c++20"
+#    endif
+#    if __cpp_lib_parallel_algorithm != 201603L
+#      error "__cpp_lib_parallel_algorithm should have the value 201603L in c++20"
+#    endif
+#  else
+#    ifdef __cpp_lib_parallel_algorithm
+#      error "__cpp_lib_parallel_algorithm 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++20"
+#  endif
+#  if __cpp_lib_ranges != 202110L
+#    error "__cpp_lib_ranges should have the value 202110L in c++20"
+#  endif
+
+#  ifdef __cpp_lib_ranges_contains
+#    error "__cpp_lib_ranges_contains should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_ranges_find_last
+#    error "__cpp_lib_ranges_find_last should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_ranges_starts_ends_with
+#    error "__cpp_lib_ranges_starts_ends_with should not be defined before c++23"
+#  endif
+
+#  ifndef __cpp_lib_robust_nonmodifying_seq_ops
+#    error "__cpp_lib_robust_nonmodifying_seq_ops should be defined in c++20"
+#  endif
+#  if __cpp_lib_robust_nonmodifying_seq_ops != 201304L
+#    error "__cpp_lib_robust_nonmodifying_seq_ops should have the value 201304L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_sample
+#    error "__cpp_lib_sample should be defined in c++20"
+#  endif
+#  if __cpp_lib_sample != 201603L
+#    error "__cpp_lib_sample should have the value 201603L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_shift
+#    error "__cpp_lib_shift should be defined in c++20"
+#  endif
+#  if __cpp_lib_shift != 201806L
+#    error "__cpp_lib_shift should have the value 201806L in c++20"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifndef __cpp_lib_clamp
+#    error "__cpp_lib_clamp should be defined in c++23"
+#  endif
+#  if __cpp_lib_clamp != 201603L
+#    error "__cpp_lib_clamp should have the value 201603L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_constexpr_algorithms
+#    error "__cpp_lib_constexpr_algorithms should be defined in c++23"
+#  endif
+#  if __cpp_lib_constexpr_algorithms != 201806L
+#    error "__cpp_lib_constexpr_algorithms should have the value 201806L in c++23"
+#  endif
+
+#  ifdef __cpp_lib_default_template_type_for_algorithm_values
+#    error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_freestanding_algorithm
+#    error "__cpp_lib_freestanding_algorithm should not be defined before c++26"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_parallel_algorithm
+#      error "__cpp_lib_parallel_algorithm should be defined in c++23"
+#    endif
+#    if __cpp_lib_parallel_algorithm != 201603L
+#      error "__cpp_lib_parallel_algorithm should have the value 201603L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_parallel_algorithm
+#      error "__cpp_lib_parallel_algorithm 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++23"
+#  endif
+#  if __cpp_lib_ranges != 202406L
+#    error "__cpp_lib_ranges should have the value 202406L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_ranges_contains
+#    error "__cpp_lib_ranges_contains should be defined in c++23"
+#  endif
+#  if __cpp_lib_ranges_contains != 202207L
+#    error "__cpp_lib_ranges_contains should have the value 202207L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_ranges_find_last
+#    error "__cpp_lib_ranges_find_last should be defined in c++23"
+#  endif
+#  if __cpp_lib_ranges_find_last != 202207L
+#    error "__cpp_lib_ranges_find_last should have the value 202207L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_ranges_starts_ends_with
+#    error "__cpp_lib_ranges_starts_ends_with should be defined in c++23"
+#  endif
+#  if __cpp_lib_ranges_starts_ends_with != 202106L
+#    error "__cpp_lib_ranges_starts_ends_with should have the value 202106L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_robust_nonmodifying_seq_ops
+#    error "__cpp_lib_robust_nonmodifying_seq_ops should be defined in c++23"
+#  endif
+#  if __cpp_lib_robust_nonmodifying_seq_ops != 201304L
+#    error "__cpp_lib_robust_nonmodifying_seq_ops should have the value 201304L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_sample
+#    error "__cpp_lib_sample should be defined in c++23"
+#  endif
+#  if __cpp_lib_sample != 201603L
+#    error "__cpp_lib_sample should have the value 201603L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_shift
+#    error "__cpp_lib_shift should be defined in c++23"
+#  endif
+#  if __cpp_lib_shift != 201806L
+#    error "__cpp_lib_shift should have the value 201806L in c++23"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  ifndef __cpp_lib_clamp
+#    error "__cpp_lib_clamp should be defined in c++26"
+#  endif
+#  if __cpp_lib_clamp != 201603L
+#    error "__cpp_lib_clamp should have the value 201603L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_constexpr_algorithms
+#    error "__cpp_lib_constexpr_algorithms should be defined in c++26"
+#  endif
+#  if __cpp_lib_constexpr_algorithms != 202306L
+#    error "__cpp_lib_constexpr_algorithms should have the value 202306L in c++26"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_default_template_type_for_algorithm_values
+#      error "__cpp_lib_default_template_type_for_algorithm_values should be defined in c++26"
+#    endif
+#    if __cpp_lib_default_template_type_for_algorithm_values != 202403L
+#      error "__cpp_lib_default_template_type_for_algorithm_values should have the value 202403L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_default_template_type_for_algorithm_values
+#      error "__cpp_lib_default_template_type_for_algorithm_values should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_freestanding_algorithm
+#      error "__cpp_lib_freestanding_algorithm should be defined in c++26"
+#    endif
+#    if __cpp_lib_freestanding_algorithm != 202311L
+#      error "__cpp_lib_freestanding_algorithm should have the value 202311L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_freestanding_algorithm
+#      error "__cpp_lib_freestanding_algorithm should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_parallel_algorithm
+#      error "__cpp_lib_parallel_algorithm should be defined in c++26"
+#    endif
+#    if __cpp_lib_parallel_algorithm != 201603L
+#      error "__cpp_lib_parallel_algorithm should have the value 201603L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_parallel_algorithm
+#      error "__cpp_lib_parallel_algorithm 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++26"
+#  endif
+#  if __cpp_lib_ranges != 202406L
+#    error "__cpp_lib_ranges should have the value 202406L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_ranges_contains
+#    error "__cpp_lib_ranges_contains should be defined in c++26"
+#  endif
+#  if __cpp_lib_ranges_contains != 202207L
+#    error "__cpp_lib_ranges_contains should have the value 202207L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_ranges_find_last
+#    error "__cpp_lib_ranges_find_last should be defined in c++26"
+#  endif
+#  if __cpp_lib_ranges_find_last != 202207L
+#    error "__cpp_lib_ranges_find_last should have the value 202207L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_ranges_starts_ends_with
+#    error "__cpp_lib_ranges_starts_ends_with should be defined in c++26"
+#  endif
+#  if __cpp_lib_ranges_starts_ends_with != 202106L
+#    error "__cpp_lib_ranges_starts_ends_with should have the value 202106L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_robust_nonmodifying_seq_ops
+#    error "__cpp_lib_robust_nonmodifying_seq_ops should be defined in c++26"
+#  endif
+#  if __cpp_lib_robust_nonmodifying_seq_ops != 201304L
+#    error "__cpp_lib_robust_nonmodifying_seq_ops should have the value 201304L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_sample
+#    error "__cpp_lib_sample should be defined in c++26"
+#  endif
+#  if __cpp_lib_sample != 201603L
+#    error "__cpp_lib_sample should have the value 201603L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_shift
+#    error "__cpp_lib_shift should be defined in c++26"
+#  endif
+#  if __cpp_lib_shift != 201806L
+#    error "__cpp_lib_shift should have the value 201806L in c++26"
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/any.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/any.version.compile.pass.cpp
new file mode 100644
index 0000000000000..46b66f19cda39
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/any.version.compile.pass.cpp
@@ -0,0 +1,73 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <any>
+
+// Test the feature test macros defined by <any>
+
+// clang-format off
+
+#include <any>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_any
+#    error "__cpp_lib_any should not be defined before c++17"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_any
+#    error "__cpp_lib_any should not be defined before c++17"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifndef __cpp_lib_any
+#    error "__cpp_lib_any should be defined in c++17"
+#  endif
+#  if __cpp_lib_any != 201606L
+#    error "__cpp_lib_any should have the value 201606L in c++17"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifndef __cpp_lib_any
+#    error "__cpp_lib_any should be defined in c++20"
+#  endif
+#  if __cpp_lib_any != 201606L
+#    error "__cpp_lib_any should have the value 201606L in c++20"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifndef __cpp_lib_any
+#    error "__cpp_lib_any should be defined in c++23"
+#  endif
+#  if __cpp_lib_any != 201606L
+#    error "__cpp_lib_any should have the value 201606L in c++23"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  ifndef __cpp_lib_any
+#    error "__cpp_lib_any should be defined in c++26"
+#  endif
+#  if __cpp_lib_any != 201606L
+#    error "__cpp_lib_any should have the value 201606L in c++26"
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/array.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/array.version.compile.pass.cpp
new file mode 100644
index 0000000000000..6992c42530c81
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/array.version.compile.pass.cpp
@@ -0,0 +1,175 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <array>
+
+// Test the feature test macros defined by <array>
+
+// clang-format off
+
+#include <array>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_array_constexpr
+#    error "__cpp_lib_array_constexpr should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_freestanding_array
+#    error "__cpp_lib_freestanding_array should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_to_array
+#    error "__cpp_lib_to_array should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_array_constexpr
+#    error "__cpp_lib_array_constexpr should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_freestanding_array
+#    error "__cpp_lib_freestanding_array should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_to_array
+#    error "__cpp_lib_to_array should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifndef __cpp_lib_array_constexpr
+#    error "__cpp_lib_array_constexpr should be defined in c++17"
+#  endif
+#  if __cpp_lib_array_constexpr != 201603L
+#    error "__cpp_lib_array_constexpr should have the value 201603L in c++17"
+#  endif
+
+#  ifdef __cpp_lib_freestanding_array
+#    error "__cpp_lib_freestanding_array should not be defined before c++26"
+#  endif
+
+#  ifndef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should be defined in c++17"
+#  endif
+#  if __cpp_lib_nonmember_container_access != 201411L
+#    error "__cpp_lib_nonmember_container_access should have the value 201411L in c++17"
+#  endif
+
+#  ifdef __cpp_lib_to_array
+#    error "__cpp_lib_to_array should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifndef __cpp_lib_array_constexpr
+#    error "__cpp_lib_array_constexpr should be defined in c++20"
+#  endif
+#  if __cpp_lib_array_constexpr != 201811L
+#    error "__cpp_lib_array_constexpr should have the value 201811L in c++20"
+#  endif
+
+#  ifdef __cpp_lib_freestanding_array
+#    error "__cpp_lib_freestanding_array should not be defined before c++26"
+#  endif
+
+#  ifndef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should be defined in c++20"
+#  endif
+#  if __cpp_lib_nonmember_container_access != 201411L
+#    error "__cpp_lib_nonmember_container_access should have the value 201411L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_to_array
+#    error "__cpp_lib_to_array should be defined in c++20"
+#  endif
+#  if __cpp_lib_to_array != 201907L
+#    error "__cpp_lib_to_array should have the value 201907L in c++20"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifndef __cpp_lib_array_constexpr
+#    error "__cpp_lib_array_constexpr should be defined in c++23"
+#  endif
+#  if __cpp_lib_array_constexpr != 201811L
+#    error "__cpp_lib_array_constexpr should have the value 201811L in c++23"
+#  endif
+
+#  ifdef __cpp_lib_freestanding_array
+#    error "__cpp_lib_freestanding_array should not be defined before c++26"
+#  endif
+
+#  ifndef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should be defined in c++23"
+#  endif
+#  if __cpp_lib_nonmember_container_access != 201411L
+#    error "__cpp_lib_nonmember_container_access should have the value 201411L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_to_array
+#    error "__cpp_lib_to_array should be defined in c++23"
+#  endif
+#  if __cpp_lib_to_array != 201907L
+#    error "__cpp_lib_to_array should have the value 201907L in c++23"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  ifndef __cpp_lib_array_constexpr
+#    error "__cpp_lib_array_constexpr should be defined in c++26"
+#  endif
+#  if __cpp_lib_array_constexpr != 201811L
+#    error "__cpp_lib_array_constexpr should have the value 201811L in c++26"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_freestanding_array
+#      error "__cpp_lib_freestanding_array should be defined in c++26"
+#    endif
+#    if __cpp_lib_freestanding_array != 202311L
+#      error "__cpp_lib_freestanding_array should have the value 202311L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_freestanding_array
+#      error "__cpp_lib_freestanding_array should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should be defined in c++26"
+#  endif
+#  if __cpp_lib_nonmember_container_access != 201411L
+#    error "__cpp_lib_nonmember_container_access should have the value 201411L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_to_array
+#    error "__cpp_lib_to_array should be defined in c++26"
+#  endif
+#  if __cpp_lib_to_array != 201907L
+#    error "__cpp_lib_to_array should have the value 201907L in c++26"
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/atomic.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/atomic.version.compile.pass.cpp
new file mode 100644
index 0000000000000..3dfe36c0ce3db
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/atomic.version.compile.pass.cpp
@@ -0,0 +1,424 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <atomic>
+
+// Test the feature test macros defined by <atomic>
+
+// clang-format off
+
+#include <atomic>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_atomic_flag_test
+#    error "__cpp_lib_atomic_flag_test should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_atomic_float
+#    error "__cpp_lib_atomic_float should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_atomic_is_always_lock_free
+#    error "__cpp_lib_atomic_is_always_lock_free should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_atomic_lock_free_type_aliases
+#    error "__cpp_lib_atomic_lock_free_type_aliases should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_atomic_min_max
+#    error "__cpp_lib_atomic_min_max should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_atomic_ref
+#    error "__cpp_lib_atomic_ref should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_atomic_shared_ptr
+#    error "__cpp_lib_atomic_shared_ptr should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_atomic_value_initialization
+#    error "__cpp_lib_atomic_value_initialization should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_atomic_wait
+#    error "__cpp_lib_atomic_wait should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_char8_t
+#    error "__cpp_lib_char8_t should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_atomic_flag_test
+#    error "__cpp_lib_atomic_flag_test should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_atomic_float
+#    error "__cpp_lib_atomic_float should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_atomic_is_always_lock_free
+#    error "__cpp_lib_atomic_is_always_lock_free should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_atomic_lock_free_type_aliases
+#    error "__cpp_lib_atomic_lock_free_type_aliases should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_atomic_min_max
+#    error "__cpp_lib_atomic_min_max should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_atomic_ref
+#    error "__cpp_lib_atomic_ref should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_atomic_shared_ptr
+#    error "__cpp_lib_atomic_shared_ptr should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_atomic_value_initialization
+#    error "__cpp_lib_atomic_value_initialization should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_atomic_wait
+#    error "__cpp_lib_atomic_wait should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_char8_t
+#    error "__cpp_lib_char8_t should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_atomic_flag_test
+#    error "__cpp_lib_atomic_flag_test should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_atomic_float
+#    error "__cpp_lib_atomic_float should not be defined before c++20"
+#  endif
+
+#  ifndef __cpp_lib_atomic_is_always_lock_free
+#    error "__cpp_lib_atomic_is_always_lock_free should be defined in c++17"
+#  endif
+#  if __cpp_lib_atomic_is_always_lock_free != 201603L
+#    error "__cpp_lib_atomic_is_always_lock_free should have the value 201603L in c++17"
+#  endif
+
+#  ifdef __cpp_lib_atomic_lock_free_type_aliases
+#    error "__cpp_lib_atomic_lock_free_type_aliases should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_atomic_min_max
+#    error "__cpp_lib_atomic_min_max should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_atomic_ref
+#    error "__cpp_lib_atomic_ref should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_atomic_shared_ptr
+#    error "__cpp_lib_atomic_shared_ptr should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_atomic_value_initialization
+#    error "__cpp_lib_atomic_value_initialization should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_atomic_wait
+#    error "__cpp_lib_atomic_wait should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_char8_t
+#    error "__cpp_lib_char8_t should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifndef __cpp_lib_atomic_flag_test
+#    error "__cpp_lib_atomic_flag_test should be defined in c++20"
+#  endif
+#  if __cpp_lib_atomic_flag_test != 201907L
+#    error "__cpp_lib_atomic_flag_test should have the value 201907L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_atomic_float
+#    error "__cpp_lib_atomic_float should be defined in c++20"
+#  endif
+#  if __cpp_lib_atomic_float != 201711L
+#    error "__cpp_lib_atomic_float should have the value 201711L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_atomic_is_always_lock_free
+#    error "__cpp_lib_atomic_is_always_lock_free should be defined in c++20"
+#  endif
+#  if __cpp_lib_atomic_is_always_lock_free != 201603L
+#    error "__cpp_lib_atomic_is_always_lock_free should have the value 201603L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_atomic_lock_free_type_aliases
+#    error "__cpp_lib_atomic_lock_free_type_aliases should be defined in c++20"
+#  endif
+#  if __cpp_lib_atomic_lock_free_type_aliases != 201907L
+#    error "__cpp_lib_atomic_lock_free_type_aliases should have the value 201907L in c++20"
+#  endif
+
+#  ifdef __cpp_lib_atomic_min_max
+#    error "__cpp_lib_atomic_min_max should not be defined before c++26"
+#  endif
+
+#  ifndef __cpp_lib_atomic_ref
+#    error "__cpp_lib_atomic_ref should be defined in c++20"
+#  endif
+#  if __cpp_lib_atomic_ref != 201806L
+#    error "__cpp_lib_atomic_ref should have the value 201806L in c++20"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_atomic_shared_ptr
+#      error "__cpp_lib_atomic_shared_ptr should be defined in c++20"
+#    endif
+#    if __cpp_lib_atomic_shared_ptr != 201711L
+#      error "__cpp_lib_atomic_shared_ptr should have the value 201711L in c++20"
+#    endif
+#  else
+#    ifdef __cpp_lib_atomic_shared_ptr
+#      error "__cpp_lib_atomic_shared_ptr should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_atomic_value_initialization
+#    error "__cpp_lib_atomic_value_initialization should be defined in c++20"
+#  endif
+#  if __cpp_lib_atomic_value_initialization != 201911L
+#    error "__cpp_lib_atomic_value_initialization should have the value 201911L in c++20"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_SYNC
+#    ifndef __cpp_lib_atomic_wait
+#      error "__cpp_lib_atomic_wait should be defined in c++20"
+#    endif
+#    if __cpp_lib_atomic_wait != 201907L
+#      error "__cpp_lib_atomic_wait should have the value 201907L in c++20"
+#    endif
+#  else
+#    ifdef __cpp_lib_atomic_wait
+#      error "__cpp_lib_atomic_wait should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_SYNC' is not met!"
+#    endif
+#  endif
+
+#  if defined(__cpp_char8_t)
+#    ifndef __cpp_lib_char8_t
+#      error "__cpp_lib_char8_t should be defined in c++20"
+#    endif
+#    if __cpp_lib_char8_t != 201907L
+#      error "__cpp_lib_char8_t should have the value 201907L in c++20"
+#    endif
+#  else
+#    ifdef __cpp_lib_char8_t
+#      error "__cpp_lib_char8_t should not be defined when the requirement 'defined(__cpp_char8_t)' is not met!"
+#    endif
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifndef __cpp_lib_atomic_flag_test
+#    error "__cpp_lib_atomic_flag_test should be defined in c++23"
+#  endif
+#  if __cpp_lib_atomic_flag_test != 201907L
+#    error "__cpp_lib_atomic_flag_test should have the value 201907L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_atomic_float
+#    error "__cpp_lib_atomic_float should be defined in c++23"
+#  endif
+#  if __cpp_lib_atomic_float != 201711L
+#    error "__cpp_lib_atomic_float should have the value 201711L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_atomic_is_always_lock_free
+#    error "__cpp_lib_atomic_is_always_lock_free should be defined in c++23"
+#  endif
+#  if __cpp_lib_atomic_is_always_lock_free != 201603L
+#    error "__cpp_lib_atomic_is_always_lock_free should have the value 201603L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_atomic_lock_free_type_aliases
+#    error "__cpp_lib_atomic_lock_free_type_aliases should be defined in c++23"
+#  endif
+#  if __cpp_lib_atomic_lock_free_type_aliases != 201907L
+#    error "__cpp_lib_atomic_lock_free_type_aliases should have the value 201907L in c++23"
+#  endif
+
+#  ifdef __cpp_lib_atomic_min_max
+#    error "__cpp_lib_atomic_min_max should not be defined before c++26"
+#  endif
+
+#  ifndef __cpp_lib_atomic_ref
+#    error "__cpp_lib_atomic_ref should be defined in c++23"
+#  endif
+#  if __cpp_lib_atomic_ref != 201806L
+#    error "__cpp_lib_atomic_ref should have the value 201806L in c++23"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_atomic_shared_ptr
+#      error "__cpp_lib_atomic_shared_ptr should be defined in c++23"
+#    endif
+#    if __cpp_lib_atomic_shared_ptr != 201711L
+#      error "__cpp_lib_atomic_shared_ptr should have the value 201711L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_atomic_shared_ptr
+#      error "__cpp_lib_atomic_shared_ptr should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_atomic_value_initialization
+#    error "__cpp_lib_atomic_value_initialization should be defined in c++23"
+#  endif
+#  if __cpp_lib_atomic_value_initialization != 201911L
+#    error "__cpp_lib_atomic_value_initialization should have the value 201911L in c++23"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_SYNC
+#    ifndef __cpp_lib_atomic_wait
+#      error "__cpp_lib_atomic_wait should be defined in c++23"
+#    endif
+#    if __cpp_lib_atomic_wait != 201907L
+#      error "__cpp_lib_atomic_wait should have the value 201907L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_atomic_wait
+#      error "__cpp_lib_atomic_wait should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_SYNC' is not met!"
+#    endif
+#  endif
+
+#  if defined(__cpp_char8_t)
+#    ifndef __cpp_lib_char8_t
+#      error "__cpp_lib_char8_t should be defined in c++23"
+#    endif
+#    if __cpp_lib_char8_t != 201907L
+#      error "__cpp_lib_char8_t should have the value 201907L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_char8_t
+#      error "__cpp_lib_char8_t should not be defined when the requirement 'defined(__cpp_char8_t)' is not met!"
+#    endif
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  ifndef __cpp_lib_atomic_flag_test
+#    error "__cpp_lib_atomic_flag_test should be defined in c++26"
+#  endif
+#  if __cpp_lib_atomic_flag_test != 201907L
+#    error "__cpp_lib_atomic_flag_test should have the value 201907L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_atomic_float
+#    error "__cpp_lib_atomic_float should be defined in c++26"
+#  endif
+#  if __cpp_lib_atomic_float != 201711L
+#    error "__cpp_lib_atomic_float should have the value 201711L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_atomic_is_always_lock_free
+#    error "__cpp_lib_atomic_is_always_lock_free should be defined in c++26"
+#  endif
+#  if __cpp_lib_atomic_is_always_lock_free != 201603L
+#    error "__cpp_lib_atomic_is_always_lock_free should have the value 201603L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_atomic_lock_free_type_aliases
+#    error "__cpp_lib_atomic_lock_free_type_aliases should be defined in c++26"
+#  endif
+#  if __cpp_lib_atomic_lock_free_type_aliases != 201907L
+#    error "__cpp_lib_atomic_lock_free_type_aliases should have the value 201907L in c++26"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_atomic_min_max
+#      error "__cpp_lib_atomic_min_max should be defined in c++26"
+#    endif
+#    if __cpp_lib_atomic_min_max != 202403L
+#      error "__cpp_lib_atomic_min_max should have the value 202403L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_atomic_min_max
+#      error "__cpp_lib_atomic_min_max should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_atomic_ref
+#    error "__cpp_lib_atomic_ref should be defined in c++26"
+#  endif
+#  if __cpp_lib_atomic_ref != 201806L
+#    error "__cpp_lib_atomic_ref should have the value 201806L in c++26"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_atomic_shared_ptr
+#      error "__cpp_lib_atomic_shared_ptr should be defined in c++26"
+#    endif
+#    if __cpp_lib_atomic_shared_ptr != 201711L
+#      error "__cpp_lib_atomic_shared_ptr should have the value 201711L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_atomic_shared_ptr
+#      error "__cpp_lib_atomic_shared_ptr should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_atomic_value_initialization
+#    error "__cpp_lib_atomic_value_initialization should be defined in c++26"
+#  endif
+#  if __cpp_lib_atomic_value_initialization != 201911L
+#    error "__cpp_lib_atomic_value_initialization should have the value 201911L in c++26"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_SYNC
+#    ifndef __cpp_lib_atomic_wait
+#      error "__cpp_lib_atomic_wait should be defined in c++26"
+#    endif
+#    if __cpp_lib_atomic_wait != 201907L
+#      error "__cpp_lib_atomic_wait should have the value 201907L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_atomic_wait
+#      error "__cpp_lib_atomic_wait should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_SYNC' is not met!"
+#    endif
+#  endif
+
+#  if defined(__cpp_char8_t)
+#    ifndef __cpp_lib_char8_t
+#      error "__cpp_lib_char8_t should be defined in c++26"
+#    endif
+#    if __cpp_lib_char8_t != 201907L
+#      error "__cpp_lib_char8_t should have the value 201907L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_char8_t
+#      error "__cpp_lib_char8_t should not be defined when the requirement 'defined(__cpp_char8_t)' is not met!"
+#    endif
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/barrier.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/barrier.version.compile.pass.cpp
new file mode 100644
index 0000000000000..878033a3da777
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/barrier.version.compile.pass.cpp
@@ -0,0 +1,90 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// UNSUPPORTED: no-threads
+
+// <barrier>
+
+// Test the feature test macros defined by <barrier>
+
+// clang-format off
+
+#include <barrier>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_barrier
+#    error "__cpp_lib_barrier should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_barrier
+#    error "__cpp_lib_barrier should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_barrier
+#    error "__cpp_lib_barrier should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)
+#    ifndef __cpp_lib_barrier
+#      error "__cpp_lib_barrier should be defined in c++20"
+#    endif
+#    if __cpp_lib_barrier != 201907L
+#      error "__cpp_lib_barrier should have the value 201907L in c++20"
+#    endif
+#  else
+#    ifdef __cpp_lib_barrier
+#      error "__cpp_lib_barrier should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)' is not met!"
+#    endif
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)
+#    ifndef __cpp_lib_barrier
+#      error "__cpp_lib_barrier should be defined in c++23"
+#    endif
+#    if __cpp_lib_barrier != 201907L
+#      error "__cpp_lib_barrier should have the value 201907L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_barrier
+#      error "__cpp_lib_barrier should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)' is not met!"
+#    endif
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)
+#    ifndef __cpp_lib_barrier
+#      error "__cpp_lib_barrier should be defined in c++26"
+#    endif
+#    if __cpp_lib_barrier != 201907L
+#      error "__cpp_lib_barrier should have the value 201907L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_barrier
+#      error "__cpp_lib_barrier should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)' is not met!"
+#    endif
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/bit.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/bit.version.compile.pass.cpp
new file mode 100644
index 0000000000000..f1cdf89d16344
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/bit.version.compile.pass.cpp
@@ -0,0 +1,199 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <bit>
+
+// Test the feature test macros defined by <bit>
+
+// clang-format off
+
+#include <bit>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_bit_cast
+#    error "__cpp_lib_bit_cast should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_bitops
+#    error "__cpp_lib_bitops should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_byteswap
+#    error "__cpp_lib_byteswap should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_endian
+#    error "__cpp_lib_endian should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_int_pow2
+#    error "__cpp_lib_int_pow2 should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_bit_cast
+#    error "__cpp_lib_bit_cast should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_bitops
+#    error "__cpp_lib_bitops should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_byteswap
+#    error "__cpp_lib_byteswap should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_endian
+#    error "__cpp_lib_endian should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_int_pow2
+#    error "__cpp_lib_int_pow2 should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_bit_cast
+#    error "__cpp_lib_bit_cast should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_bitops
+#    error "__cpp_lib_bitops should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_byteswap
+#    error "__cpp_lib_byteswap should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_endian
+#    error "__cpp_lib_endian should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_int_pow2
+#    error "__cpp_lib_int_pow2 should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifndef __cpp_lib_bit_cast
+#    error "__cpp_lib_bit_cast should be defined in c++20"
+#  endif
+#  if __cpp_lib_bit_cast != 201806L
+#    error "__cpp_lib_bit_cast should have the value 201806L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_bitops
+#    error "__cpp_lib_bitops should be defined in c++20"
+#  endif
+#  if __cpp_lib_bitops != 201907L
+#    error "__cpp_lib_bitops should have the value 201907L in c++20"
+#  endif
+
+#  ifdef __cpp_lib_byteswap
+#    error "__cpp_lib_byteswap should not be defined before c++23"
+#  endif
+
+#  ifndef __cpp_lib_endian
+#    error "__cpp_lib_endian should be defined in c++20"
+#  endif
+#  if __cpp_lib_endian != 201907L
+#    error "__cpp_lib_endian should have the value 201907L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_int_pow2
+#    error "__cpp_lib_int_pow2 should be defined in c++20"
+#  endif
+#  if __cpp_lib_int_pow2 != 202002L
+#    error "__cpp_lib_int_pow2 should have the value 202002L in c++20"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifndef __cpp_lib_bit_cast
+#    error "__cpp_lib_bit_cast should be defined in c++23"
+#  endif
+#  if __cpp_lib_bit_cast != 201806L
+#    error "__cpp_lib_bit_cast should have the value 201806L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_bitops
+#    error "__cpp_lib_bitops should be defined in c++23"
+#  endif
+#  if __cpp_lib_bitops != 201907L
+#    error "__cpp_lib_bitops should have the value 201907L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_byteswap
+#    error "__cpp_lib_byteswap should be defined in c++23"
+#  endif
+#  if __cpp_lib_byteswap != 202110L
+#    error "__cpp_lib_byteswap should have the value 202110L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_endian
+#    error "__cpp_lib_endian should be defined in c++23"
+#  endif
+#  if __cpp_lib_endian != 201907L
+#    error "__cpp_lib_endian should have the value 201907L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_int_pow2
+#    error "__cpp_lib_int_pow2 should be defined in c++23"
+#  endif
+#  if __cpp_lib_int_pow2 != 202002L
+#    error "__cpp_lib_int_pow2 should have the value 202002L in c++23"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  ifndef __cpp_lib_bit_cast
+#    error "__cpp_lib_bit_cast should be defined in c++26"
+#  endif
+#  if __cpp_lib_bit_cast != 201806L
+#    error "__cpp_lib_bit_cast should have the value 201806L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_bitops
+#    error "__cpp_lib_bitops should be defined in c++26"
+#  endif
+#  if __cpp_lib_bitops != 201907L
+#    error "__cpp_lib_bitops should have the value 201907L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_byteswap
+#    error "__cpp_lib_byteswap should be defined in c++26"
+#  endif
+#  if __cpp_lib_byteswap != 202110L
+#    error "__cpp_lib_byteswap should have the value 202110L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_endian
+#    error "__cpp_lib_endian should be defined in c++26"
+#  endif
+#  if __cpp_lib_endian != 201907L
+#    error "__cpp_lib_endian should have the value 201907L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_int_pow2
+#    error "__cpp_lib_int_pow2 should be defined in c++26"
+#  endif
+#  if __cpp_lib_int_pow2 != 202002L
+#    error "__cpp_lib_int_pow2 should have the value 202002L in c++26"
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/bitset.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/bitset.version.compile.pass.cpp
new file mode 100644
index 0000000000000..fd20f543c13c1
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/bitset.version.compile.pass.cpp
@@ -0,0 +1,94 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <bitset>
+
+// Test the feature test macros defined by <bitset>
+
+// clang-format off
+
+#include <bitset>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_bitset
+#    error "__cpp_lib_bitset should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_constexpr_bitset
+#    error "__cpp_lib_constexpr_bitset should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_bitset
+#    error "__cpp_lib_bitset should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_constexpr_bitset
+#    error "__cpp_lib_constexpr_bitset should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_bitset
+#    error "__cpp_lib_bitset should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_constexpr_bitset
+#    error "__cpp_lib_constexpr_bitset should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifdef __cpp_lib_bitset
+#    error "__cpp_lib_bitset should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_constexpr_bitset
+#    error "__cpp_lib_constexpr_bitset should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifdef __cpp_lib_bitset
+#    error "__cpp_lib_bitset should not be defined before c++26"
+#  endif
+
+#  ifndef __cpp_lib_constexpr_bitset
+#    error "__cpp_lib_constexpr_bitset should be defined in c++23"
+#  endif
+#  if __cpp_lib_constexpr_bitset != 202207L
+#    error "__cpp_lib_constexpr_bitset should have the value 202207L in c++23"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  ifndef __cpp_lib_bitset
+#    error "__cpp_lib_bitset should be defined in c++26"
+#  endif
+#  if __cpp_lib_bitset != 202306L
+#    error "__cpp_lib_bitset should have the value 202306L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_constexpr_bitset
+#    error "__cpp_lib_constexpr_bitset should be defined in c++26"
+#  endif
+#  if __cpp_lib_constexpr_bitset != 202207L
+#    error "__cpp_lib_constexpr_bitset should have the value 202207L in c++26"
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/charconv.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/charconv.version.compile.pass.cpp
new file mode 100644
index 0000000000000..0cc9b7073e5e4
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/charconv.version.compile.pass.cpp
@@ -0,0 +1,127 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <charconv>
+
+// Test the feature test macros defined by <charconv>
+
+// clang-format off
+
+#include <charconv>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_constexpr_charconv
+#    error "__cpp_lib_constexpr_charconv should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_to_chars
+#    error "__cpp_lib_to_chars should not be defined before c++17"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_constexpr_charconv
+#    error "__cpp_lib_constexpr_charconv should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_to_chars
+#    error "__cpp_lib_to_chars should not be defined before c++17"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_constexpr_charconv
+#    error "__cpp_lib_constexpr_charconv should not be defined before c++23"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_to_chars
+#      error "__cpp_lib_to_chars should be defined in c++17"
+#    endif
+#    if __cpp_lib_to_chars != 201611L
+#      error "__cpp_lib_to_chars should have the value 201611L in c++17"
+#    endif
+#  else
+#    ifdef __cpp_lib_to_chars
+#      error "__cpp_lib_to_chars should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifdef __cpp_lib_constexpr_charconv
+#    error "__cpp_lib_constexpr_charconv should not be defined before c++23"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_to_chars
+#      error "__cpp_lib_to_chars should be defined in c++20"
+#    endif
+#    if __cpp_lib_to_chars != 201611L
+#      error "__cpp_lib_to_chars should have the value 201611L in c++20"
+#    endif
+#  else
+#    ifdef __cpp_lib_to_chars
+#      error "__cpp_lib_to_chars should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifndef __cpp_lib_constexpr_charconv
+#    error "__cpp_lib_constexpr_charconv should be defined in c++23"
+#  endif
+#  if __cpp_lib_constexpr_charconv != 202207L
+#    error "__cpp_lib_constexpr_charconv should have the value 202207L in c++23"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_to_chars
+#      error "__cpp_lib_to_chars should be defined in c++23"
+#    endif
+#    if __cpp_lib_to_chars != 201611L
+#      error "__cpp_lib_to_chars should have the value 201611L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_to_chars
+#      error "__cpp_lib_to_chars should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  ifndef __cpp_lib_constexpr_charconv
+#    error "__cpp_lib_constexpr_charconv should be defined in c++26"
+#  endif
+#  if __cpp_lib_constexpr_charconv != 202207L
+#    error "__cpp_lib_constexpr_charconv should have the value 202207L in c++26"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_to_chars
+#      error "__cpp_lib_to_chars should be defined in c++26"
+#    endif
+#    if __cpp_lib_to_chars != 202306L
+#      error "__cpp_lib_to_chars should have the value 202306L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_to_chars
+#      error "__cpp_lib_to_chars should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/chrono.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/chrono.version.compile.pass.cpp
new file mode 100644
index 0000000000000..a4d24ec2a385d
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/chrono.version.compile.pass.cpp
@@ -0,0 +1,112 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <chrono>
+
+// Test the feature test macros defined by <chrono>
+
+// clang-format off
+
+#include <chrono>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_chrono
+#    error "__cpp_lib_chrono should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_chrono_udls
+#    error "__cpp_lib_chrono_udls should not be defined before c++14"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_chrono
+#    error "__cpp_lib_chrono should not be defined before c++17"
+#  endif
+
+#  ifndef __cpp_lib_chrono_udls
+#    error "__cpp_lib_chrono_udls should be defined in c++14"
+#  endif
+#  if __cpp_lib_chrono_udls != 201304L
+#    error "__cpp_lib_chrono_udls should have the value 201304L in c++14"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifndef __cpp_lib_chrono
+#    error "__cpp_lib_chrono should be defined in c++17"
+#  endif
+#  if __cpp_lib_chrono != 201611L
+#    error "__cpp_lib_chrono should have the value 201611L in c++17"
+#  endif
+
+#  ifndef __cpp_lib_chrono_udls
+#    error "__cpp_lib_chrono_udls should be defined in c++17"
+#  endif
+#  if __cpp_lib_chrono_udls != 201304L
+#    error "__cpp_lib_chrono_udls should have the value 201304L in c++17"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifndef __cpp_lib_chrono
+#    error "__cpp_lib_chrono should be defined in c++20"
+#  endif
+#  if __cpp_lib_chrono != 201611L
+#    error "__cpp_lib_chrono should have the value 201611L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_chrono_udls
+#    error "__cpp_lib_chrono_udls should be defined in c++20"
+#  endif
+#  if __cpp_lib_chrono_udls != 201304L
+#    error "__cpp_lib_chrono_udls should have the value 201304L in c++20"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifndef __cpp_lib_chrono
+#    error "__cpp_lib_chrono should be defined in c++23"
+#  endif
+#  if __cpp_lib_chrono != 201611L
+#    error "__cpp_lib_chrono should have the value 201611L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_chrono_udls
+#    error "__cpp_lib_chrono_udls should be defined in c++23"
+#  endif
+#  if __cpp_lib_chrono_udls != 201304L
+#    error "__cpp_lib_chrono_udls should have the value 201304L in c++23"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  ifndef __cpp_lib_chrono
+#    error "__cpp_lib_chrono should be defined in c++26"
+#  endif
+#  if __cpp_lib_chrono != 201611L
+#    error "__cpp_lib_chrono should have the value 201611L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_chrono_udls
+#    error "__cpp_lib_chrono_udls should be defined in c++26"
+#  endif
+#  if __cpp_lib_chrono_udls != 201304L
+#    error "__cpp_lib_chrono_udls should have the value 201304L in c++26"
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/cmath.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/cmath.version.compile.pass.cpp
new file mode 100644
index 0000000000000..a015ec9dfcc48
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/cmath.version.compile.pass.cpp
@@ -0,0 +1,208 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <cmath>
+
+// Test the feature test macros defined by <cmath>
+
+// clang-format off
+
+#include <cmath>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_constexpr_cmath
+#    error "__cpp_lib_constexpr_cmath should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_hypot
+#    error "__cpp_lib_hypot should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_interpolate
+#    error "__cpp_lib_interpolate should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_math_special_functions
+#    error "__cpp_lib_math_special_functions should not be defined before c++17"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_constexpr_cmath
+#    error "__cpp_lib_constexpr_cmath should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_hypot
+#    error "__cpp_lib_hypot should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_interpolate
+#    error "__cpp_lib_interpolate should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_math_special_functions
+#    error "__cpp_lib_math_special_functions should not be defined before c++17"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_constexpr_cmath
+#    error "__cpp_lib_constexpr_cmath should not be defined before c++23"
+#  endif
+
+#  ifndef __cpp_lib_hypot
+#    error "__cpp_lib_hypot should be defined in c++17"
+#  endif
+#  if __cpp_lib_hypot != 201603L
+#    error "__cpp_lib_hypot should have the value 201603L in c++17"
+#  endif
+
+#  ifdef __cpp_lib_interpolate
+#    error "__cpp_lib_interpolate should not be defined before c++20"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_math_special_functions
+#      error "__cpp_lib_math_special_functions should be defined in c++17"
+#    endif
+#    if __cpp_lib_math_special_functions != 201603L
+#      error "__cpp_lib_math_special_functions should have the value 201603L in c++17"
+#    endif
+#  else
+#    ifdef __cpp_lib_math_special_functions
+#      error "__cpp_lib_math_special_functions should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifdef __cpp_lib_constexpr_cmath
+#    error "__cpp_lib_constexpr_cmath should not be defined before c++23"
+#  endif
+
+#  ifndef __cpp_lib_hypot
+#    error "__cpp_lib_hypot should be defined in c++20"
+#  endif
+#  if __cpp_lib_hypot != 201603L
+#    error "__cpp_lib_hypot should have the value 201603L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_interpolate
+#    error "__cpp_lib_interpolate should be defined in c++20"
+#  endif
+#  if __cpp_lib_interpolate != 201902L
+#    error "__cpp_lib_interpolate should have the value 201902L in c++20"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_math_special_functions
+#      error "__cpp_lib_math_special_functions should be defined in c++20"
+#    endif
+#    if __cpp_lib_math_special_functions != 201603L
+#      error "__cpp_lib_math_special_functions should have the value 201603L in c++20"
+#    endif
+#  else
+#    ifdef __cpp_lib_math_special_functions
+#      error "__cpp_lib_math_special_functions should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_constexpr_cmath
+#      error "__cpp_lib_constexpr_cmath should be defined in c++23"
+#    endif
+#    if __cpp_lib_constexpr_cmath != 202202L
+#      error "__cpp_lib_constexpr_cmath should have the value 202202L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_constexpr_cmath
+#      error "__cpp_lib_constexpr_cmath should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_hypot
+#    error "__cpp_lib_hypot should be defined in c++23"
+#  endif
+#  if __cpp_lib_hypot != 201603L
+#    error "__cpp_lib_hypot should have the value 201603L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_interpolate
+#    error "__cpp_lib_interpolate should be defined in c++23"
+#  endif
+#  if __cpp_lib_interpolate != 201902L
+#    error "__cpp_lib_interpolate should have the value 201902L in c++23"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_math_special_functions
+#      error "__cpp_lib_math_special_functions should be defined in c++23"
+#    endif
+#    if __cpp_lib_math_special_functions != 201603L
+#      error "__cpp_lib_math_special_functions should have the value 201603L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_math_special_functions
+#      error "__cpp_lib_math_special_functions should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_constexpr_cmath
+#      error "__cpp_lib_constexpr_cmath should be defined in c++26"
+#    endif
+#    if __cpp_lib_constexpr_cmath != 202202L
+#      error "__cpp_lib_constexpr_cmath should have the value 202202L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_constexpr_cmath
+#      error "__cpp_lib_constexpr_cmath should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_hypot
+#    error "__cpp_lib_hypot should be defined in c++26"
+#  endif
+#  if __cpp_lib_hypot != 201603L
+#    error "__cpp_lib_hypot should have the value 201603L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_interpolate
+#    error "__cpp_lib_interpolate should be defined in c++26"
+#  endif
+#  if __cpp_lib_interpolate != 201902L
+#    error "__cpp_lib_interpolate should have the value 201902L in c++26"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_math_special_functions
+#      error "__cpp_lib_math_special_functions should be defined in c++26"
+#    endif
+#    if __cpp_lib_math_special_functions != 201603L
+#      error "__cpp_lib_math_special_functions should have the value 201603L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_math_special_functions
+#      error "__cpp_lib_math_special_functions should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/compare.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/compare.version.compile.pass.cpp
new file mode 100644
index 0000000000000..83811a3b9fbb1
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/compare.version.compile.pass.cpp
@@ -0,0 +1,70 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <compare>
+
+// Test the feature test macros defined by <compare>
+
+// clang-format off
+
+#include <compare>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_three_way_comparison
+#    error "__cpp_lib_three_way_comparison should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_three_way_comparison
+#    error "__cpp_lib_three_way_comparison should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_three_way_comparison
+#    error "__cpp_lib_three_way_comparison should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifndef __cpp_lib_three_way_comparison
+#    error "__cpp_lib_three_way_comparison should be defined in c++20"
+#  endif
+#  if __cpp_lib_three_way_comparison != 201907L
+#    error "__cpp_lib_three_way_comparison should have the value 201907L in c++20"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifndef __cpp_lib_three_way_comparison
+#    error "__cpp_lib_three_way_comparison should be defined in c++23"
+#  endif
+#  if __cpp_lib_three_way_comparison != 201907L
+#    error "__cpp_lib_three_way_comparison should have the value 201907L in c++23"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  ifndef __cpp_lib_three_way_comparison
+#    error "__cpp_lib_three_way_comparison should be defined in c++26"
+#  endif
+#  if __cpp_lib_three_way_comparison != 201907L
+#    error "__cpp_lib_three_way_comparison should have the value 201907L in c++26"
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/complex.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/complex.version.compile.pass.cpp
new file mode 100644
index 0000000000000..92f9c93b6bedc
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/complex.version.compile.pass.cpp
@@ -0,0 +1,109 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <complex>
+
+// Test the feature test macros defined by <complex>
+
+// clang-format off
+
+#include <complex>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_complex_udls
+#    error "__cpp_lib_complex_udls should not be defined before c++14"
+#  endif
+
+#  ifdef __cpp_lib_constexpr_complex
+#    error "__cpp_lib_constexpr_complex should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifndef __cpp_lib_complex_udls
+#    error "__cpp_lib_complex_udls should be defined in c++14"
+#  endif
+#  if __cpp_lib_complex_udls != 201309L
+#    error "__cpp_lib_complex_udls should have the value 201309L in c++14"
+#  endif
+
+#  ifdef __cpp_lib_constexpr_complex
+#    error "__cpp_lib_constexpr_complex should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifndef __cpp_lib_complex_udls
+#    error "__cpp_lib_complex_udls should be defined in c++17"
+#  endif
+#  if __cpp_lib_complex_udls != 201309L
+#    error "__cpp_lib_complex_udls should have the value 201309L in c++17"
+#  endif
+
+#  ifdef __cpp_lib_constexpr_complex
+#    error "__cpp_lib_constexpr_complex should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifndef __cpp_lib_complex_udls
+#    error "__cpp_lib_complex_udls should be defined in c++20"
+#  endif
+#  if __cpp_lib_complex_udls != 201309L
+#    error "__cpp_lib_complex_udls should have the value 201309L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_constexpr_complex
+#    error "__cpp_lib_constexpr_complex should be defined in c++20"
+#  endif
+#  if __cpp_lib_constexpr_complex != 201711L
+#    error "__cpp_lib_constexpr_complex should have the value 201711L in c++20"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifndef __cpp_lib_complex_udls
+#    error "__cpp_lib_complex_udls should be defined in c++23"
+#  endif
+#  if __cpp_lib_complex_udls != 201309L
+#    error "__cpp_lib_complex_udls should have the value 201309L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_constexpr_complex
+#    error "__cpp_lib_constexpr_complex should be defined in c++23"
+#  endif
+#  if __cpp_lib_constexpr_complex != 201711L
+#    error "__cpp_lib_constexpr_complex should have the value 201711L in c++23"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  ifndef __cpp_lib_complex_udls
+#    error "__cpp_lib_complex_udls should be defined in c++26"
+#  endif
+#  if __cpp_lib_complex_udls != 201309L
+#    error "__cpp_lib_complex_udls should have the value 201309L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_constexpr_complex
+#    error "__cpp_lib_constexpr_complex should be defined in c++26"
+#  endif
+#  if __cpp_lib_constexpr_complex != 201711L
+#    error "__cpp_lib_constexpr_complex should have the value 201711L in c++26"
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/concepts.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/concepts.version.compile.pass.cpp
new file mode 100644
index 0000000000000..6c1b4f068ed46
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/concepts.version.compile.pass.cpp
@@ -0,0 +1,70 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <concepts>
+
+// Test the feature test macros defined by <concepts>
+
+// clang-format off
+
+#include <concepts>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_concepts
+#    error "__cpp_lib_concepts should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_concepts
+#    error "__cpp_lib_concepts should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_concepts
+#    error "__cpp_lib_concepts should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifndef __cpp_lib_concepts
+#    error "__cpp_lib_concepts should be defined in c++20"
+#  endif
+#  if __cpp_lib_concepts != 202002L
+#    error "__cpp_lib_concepts should have the value 202002L in c++20"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifndef __cpp_lib_concepts
+#    error "__cpp_lib_concepts should be defined in c++23"
+#  endif
+#  if __cpp_lib_concepts != 202002L
+#    error "__cpp_lib_concepts should have the value 202002L in c++23"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  ifndef __cpp_lib_concepts
+#    error "__cpp_lib_concepts should be defined in c++26"
+#  endif
+#  if __cpp_lib_concepts != 202002L
+#    error "__cpp_lib_concepts should have the value 202002L in c++26"
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/coroutine.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/coroutine.version.compile.pass.cpp
new file mode 100644
index 0000000000000..5f4266f8c62a8
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/coroutine.version.compile.pass.cpp
@@ -0,0 +1,70 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <coroutine>
+
+// Test the feature test macros defined by <coroutine>
+
+// clang-format off
+
+#include <coroutine>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_coroutine
+#    error "__cpp_lib_coroutine should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_coroutine
+#    error "__cpp_lib_coroutine should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_coroutine
+#    error "__cpp_lib_coroutine should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifndef __cpp_lib_coroutine
+#    error "__cpp_lib_coroutine should be defined in c++20"
+#  endif
+#  if __cpp_lib_coroutine != 201902L
+#    error "__cpp_lib_coroutine should have the value 201902L in c++20"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifndef __cpp_lib_coroutine
+#    error "__cpp_lib_coroutine should be defined in c++23"
+#  endif
+#  if __cpp_lib_coroutine != 201902L
+#    error "__cpp_lib_coroutine should have the value 201902L in c++23"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  ifndef __cpp_lib_coroutine
+#    error "__cpp_lib_coroutine should be defined in c++26"
+#  endif
+#  if __cpp_lib_coroutine != 201902L
+#    error "__cpp_lib_coroutine should have the value 201902L in c++26"
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/cstddef.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/cstddef.version.compile.pass.cpp
new file mode 100644
index 0000000000000..e84bac8aa954f
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/cstddef.version.compile.pass.cpp
@@ -0,0 +1,73 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <cstddef>
+
+// Test the feature test macros defined by <cstddef>
+
+// clang-format off
+
+#include <cstddef>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_byte
+#    error "__cpp_lib_byte should not be defined before c++17"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_byte
+#    error "__cpp_lib_byte should not be defined before c++17"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifndef __cpp_lib_byte
+#    error "__cpp_lib_byte should be defined in c++17"
+#  endif
+#  if __cpp_lib_byte != 201603L
+#    error "__cpp_lib_byte should have the value 201603L in c++17"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifndef __cpp_lib_byte
+#    error "__cpp_lib_byte should be defined in c++20"
+#  endif
+#  if __cpp_lib_byte != 201603L
+#    error "__cpp_lib_byte should have the value 201603L in c++20"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifndef __cpp_lib_byte
+#    error "__cpp_lib_byte should be defined in c++23"
+#  endif
+#  if __cpp_lib_byte != 201603L
+#    error "__cpp_lib_byte should have the value 201603L in c++23"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  ifndef __cpp_lib_byte
+#    error "__cpp_lib_byte should be defined in c++26"
+#  endif
+#  if __cpp_lib_byte != 201603L
+#    error "__cpp_lib_byte should have the value 201603L in c++26"
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/cstdlib.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/cstdlib.version.compile.pass.cpp
new file mode 100644
index 0000000000000..641de3c93ca8d
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/cstdlib.version.compile.pass.cpp
@@ -0,0 +1,81 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <cstdlib>
+
+// Test the feature test macros defined by <cstdlib>
+
+// clang-format off
+
+#if __has_include(<cstdlib>)
+#  include <cstdlib>
+#endif
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_constexpr_cmath
+#    error "__cpp_lib_constexpr_cmath should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_constexpr_cmath
+#    error "__cpp_lib_constexpr_cmath should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_constexpr_cmath
+#    error "__cpp_lib_constexpr_cmath should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifdef __cpp_lib_constexpr_cmath
+#    error "__cpp_lib_constexpr_cmath should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_constexpr_cmath
+#      error "__cpp_lib_constexpr_cmath should be defined in c++23"
+#    endif
+#    if __cpp_lib_constexpr_cmath != 202202L
+#      error "__cpp_lib_constexpr_cmath should have the value 202202L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_constexpr_cmath
+#      error "__cpp_lib_constexpr_cmath should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_constexpr_cmath
+#      error "__cpp_lib_constexpr_cmath should be defined in c++26"
+#    endif
+#    if __cpp_lib_constexpr_cmath != 202202L
+#      error "__cpp_lib_constexpr_cmath should have the value 202202L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_constexpr_cmath
+#      error "__cpp_lib_constexpr_cmath should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/cstring.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/cstring.version.compile.pass.cpp
new file mode 100644
index 0000000000000..31ed16e4504a0
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/cstring.version.compile.pass.cpp
@@ -0,0 +1,72 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <cstring>
+
+// Test the feature test macros defined by <cstring>
+
+// clang-format off
+
+#if __has_include(<cstring>)
+#  include <cstring>
+#endif
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_freestanding_cstring
+#    error "__cpp_lib_freestanding_cstring should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_freestanding_cstring
+#    error "__cpp_lib_freestanding_cstring should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_freestanding_cstring
+#    error "__cpp_lib_freestanding_cstring should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifdef __cpp_lib_freestanding_cstring
+#    error "__cpp_lib_freestanding_cstring should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifdef __cpp_lib_freestanding_cstring
+#    error "__cpp_lib_freestanding_cstring should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_freestanding_cstring
+#      error "__cpp_lib_freestanding_cstring should be defined in c++26"
+#    endif
+#    if __cpp_lib_freestanding_cstring != 202306L
+#      error "__cpp_lib_freestanding_cstring should have the value 202306L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_freestanding_cstring
+#      error "__cpp_lib_freestanding_cstring should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/debugging.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/debugging.version.compile.pass.cpp
new file mode 100644
index 0000000000000..5e97949ba89d5
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/debugging.version.compile.pass.cpp
@@ -0,0 +1,72 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <debugging>
+
+// Test the feature test macros defined by <debugging>
+
+// clang-format off
+
+#if __has_include(<debugging>)
+#  include <debugging>
+#endif
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_debugging
+#    error "__cpp_lib_debugging should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_debugging
+#    error "__cpp_lib_debugging should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_debugging
+#    error "__cpp_lib_debugging should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifdef __cpp_lib_debugging
+#    error "__cpp_lib_debugging should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifdef __cpp_lib_debugging
+#    error "__cpp_lib_debugging should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_debugging
+#      error "__cpp_lib_debugging should be defined in c++26"
+#    endif
+#    if __cpp_lib_debugging != 202311L
+#      error "__cpp_lib_debugging should have the value 202311L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_debugging
+#      error "__cpp_lib_debugging should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/deque.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/deque.version.compile.pass.cpp
new file mode 100644
index 0000000000000..3ed01b9edfc73
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/deque.version.compile.pass.cpp
@@ -0,0 +1,205 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <deque>
+
+// Test the feature test macros defined by <deque>
+
+// clang-format off
+
+#include <deque>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_default_template_type_for_algorithm_values
+#    error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should not be defined before c++17"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_default_template_type_for_algorithm_values
+#    error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should not be defined before c++17"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifndef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++17"
+#  endif
+#  if __cpp_lib_allocator_traits_is_always_equal != 201411L
+#    error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++17"
+#  endif
+
+#  ifdef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_default_template_type_for_algorithm_values
+#    error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should not be defined before c++20"
+#  endif
+
+#  ifndef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should be defined in c++17"
+#  endif
+#  if __cpp_lib_nonmember_container_access != 201411L
+#    error "__cpp_lib_nonmember_container_access should have the value 201411L in c++17"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifndef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++20"
+#  endif
+#  if __cpp_lib_allocator_traits_is_always_equal != 201411L
+#    error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++20"
+#  endif
+
+#  ifdef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_default_template_type_for_algorithm_values
+#    error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26"
+#  endif
+
+#  ifndef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should be defined in c++20"
+#  endif
+#  if __cpp_lib_erase_if != 202002L
+#    error "__cpp_lib_erase_if should have the value 202002L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should be defined in c++20"
+#  endif
+#  if __cpp_lib_nonmember_container_access != 201411L
+#    error "__cpp_lib_nonmember_container_access should have the value 201411L in c++20"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifndef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++23"
+#  endif
+#  if __cpp_lib_allocator_traits_is_always_equal != 201411L
+#    error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should be defined in c++23"
+#  endif
+#  if __cpp_lib_containers_ranges != 202202L
+#    error "__cpp_lib_containers_ranges should have the value 202202L in c++23"
+#  endif
+
+#  ifdef __cpp_lib_default_template_type_for_algorithm_values
+#    error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26"
+#  endif
+
+#  ifndef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should be defined in c++23"
+#  endif
+#  if __cpp_lib_erase_if != 202002L
+#    error "__cpp_lib_erase_if should have the value 202002L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should be defined in c++23"
+#  endif
+#  if __cpp_lib_nonmember_container_access != 201411L
+#    error "__cpp_lib_nonmember_container_access should have the value 201411L in c++23"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  ifndef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++26"
+#  endif
+#  if __cpp_lib_allocator_traits_is_always_equal != 201411L
+#    error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should be defined in c++26"
+#  endif
+#  if __cpp_lib_containers_ranges != 202202L
+#    error "__cpp_lib_containers_ranges should have the value 202202L in c++26"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_default_template_type_for_algorithm_values
+#      error "__cpp_lib_default_template_type_for_algorithm_values should be defined in c++26"
+#    endif
+#    if __cpp_lib_default_template_type_for_algorithm_values != 202403L
+#      error "__cpp_lib_default_template_type_for_algorithm_values should have the value 202403L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_default_template_type_for_algorithm_values
+#      error "__cpp_lib_default_template_type_for_algorithm_values should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should be defined in c++26"
+#  endif
+#  if __cpp_lib_erase_if != 202002L
+#    error "__cpp_lib_erase_if should have the value 202002L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should be defined in c++26"
+#  endif
+#  if __cpp_lib_nonmember_container_access != 201411L
+#    error "__cpp_lib_nonmember_container_access should have the value 201411L in c++26"
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/exception.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/exception.version.compile.pass.cpp
new file mode 100644
index 0000000000000..11ac76d0c341f
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/exception.version.compile.pass.cpp
@@ -0,0 +1,73 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <exception>
+
+// Test the feature test macros defined by <exception>
+
+// clang-format off
+
+#include <exception>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_uncaught_exceptions
+#    error "__cpp_lib_uncaught_exceptions should not be defined before c++17"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_uncaught_exceptions
+#    error "__cpp_lib_uncaught_exceptions should not be defined before c++17"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifndef __cpp_lib_uncaught_exceptions
+#    error "__cpp_lib_uncaught_exceptions should be defined in c++17"
+#  endif
+#  if __cpp_lib_uncaught_exceptions != 201411L
+#    error "__cpp_lib_uncaught_exceptions should have the value 201411L in c++17"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifndef __cpp_lib_uncaught_exceptions
+#    error "__cpp_lib_uncaught_exceptions should be defined in c++20"
+#  endif
+#  if __cpp_lib_uncaught_exceptions != 201411L
+#    error "__cpp_lib_uncaught_exceptions should have the value 201411L in c++20"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifndef __cpp_lib_uncaught_exceptions
+#    error "__cpp_lib_uncaught_exceptions should be defined in c++23"
+#  endif
+#  if __cpp_lib_uncaught_exceptions != 201411L
+#    error "__cpp_lib_uncaught_exceptions should have the value 201411L in c++23"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  ifndef __cpp_lib_uncaught_exceptions
+#    error "__cpp_lib_uncaught_exceptions should be defined in c++26"
+#  endif
+#  if __cpp_lib_uncaught_exceptions != 201411L
+#    error "__cpp_lib_uncaught_exceptions should have the value 201411L in c++26"
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/execution.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/execution.version.compile.pass.cpp
new file mode 100644
index 0000000000000..3e74101334681
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/execution.version.compile.pass.cpp
@@ -0,0 +1,132 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <execution>
+
+// Test the feature test macros defined by <execution>
+
+// clang-format off
+
+#if __has_include(<execution>)
+#  include <execution>
+#endif
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_execution
+#    error "__cpp_lib_execution should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_senders
+#    error "__cpp_lib_senders should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_execution
+#    error "__cpp_lib_execution should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_senders
+#    error "__cpp_lib_senders should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_execution
+#      error "__cpp_lib_execution should be defined in c++17"
+#    endif
+#    if __cpp_lib_execution != 201603L
+#      error "__cpp_lib_execution should have the value 201603L in c++17"
+#    endif
+#  else
+#    ifdef __cpp_lib_execution
+#      error "__cpp_lib_execution should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifdef __cpp_lib_senders
+#    error "__cpp_lib_senders should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_execution
+#      error "__cpp_lib_execution should be defined in c++20"
+#    endif
+#    if __cpp_lib_execution != 201902L
+#      error "__cpp_lib_execution should have the value 201902L in c++20"
+#    endif
+#  else
+#    ifdef __cpp_lib_execution
+#      error "__cpp_lib_execution should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifdef __cpp_lib_senders
+#    error "__cpp_lib_senders should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_execution
+#      error "__cpp_lib_execution should be defined in c++23"
+#    endif
+#    if __cpp_lib_execution != 201902L
+#      error "__cpp_lib_execution should have the value 201902L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_execution
+#      error "__cpp_lib_execution should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifdef __cpp_lib_senders
+#    error "__cpp_lib_senders should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_execution
+#      error "__cpp_lib_execution should be defined in c++26"
+#    endif
+#    if __cpp_lib_execution != 201902L
+#      error "__cpp_lib_execution should have the value 201902L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_execution
+#      error "__cpp_lib_execution should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_senders
+#      error "__cpp_lib_senders should be defined in c++26"
+#    endif
+#    if __cpp_lib_senders != 202406L
+#      error "__cpp_lib_senders should have the value 202406L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_senders
+#      error "__cpp_lib_senders should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/expected.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/expected.version.compile.pass.cpp
new file mode 100644
index 0000000000000..f75c7e45d5e6e
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/expected.version.compile.pass.cpp
@@ -0,0 +1,100 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <expected>
+
+// Test the feature test macros defined by <expected>
+
+// clang-format off
+
+#include <expected>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_expected
+#    error "__cpp_lib_expected should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_freestanding_expected
+#    error "__cpp_lib_freestanding_expected should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_expected
+#    error "__cpp_lib_expected should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_freestanding_expected
+#    error "__cpp_lib_freestanding_expected should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_expected
+#    error "__cpp_lib_expected should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_freestanding_expected
+#    error "__cpp_lib_freestanding_expected should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifdef __cpp_lib_expected
+#    error "__cpp_lib_expected should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_freestanding_expected
+#    error "__cpp_lib_freestanding_expected should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifndef __cpp_lib_expected
+#    error "__cpp_lib_expected should be defined in c++23"
+#  endif
+#  if __cpp_lib_expected != 202211L
+#    error "__cpp_lib_expected should have the value 202211L in c++23"
+#  endif
+
+#  ifdef __cpp_lib_freestanding_expected
+#    error "__cpp_lib_freestanding_expected should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  ifndef __cpp_lib_expected
+#    error "__cpp_lib_expected should be defined in c++26"
+#  endif
+#  if __cpp_lib_expected != 202211L
+#    error "__cpp_lib_expected should have the value 202211L in c++26"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_freestanding_expected
+#      error "__cpp_lib_freestanding_expected should be defined in c++26"
+#    endif
+#    if __cpp_lib_freestanding_expected != 202311L
+#      error "__cpp_lib_freestanding_expected should have the value 202311L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_freestanding_expected
+#      error "__cpp_lib_freestanding_expected should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/filesystem.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/filesystem.version.compile.pass.cpp
new file mode 100644
index 0000000000000..61b4a25a45068
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/filesystem.version.compile.pass.cpp
@@ -0,0 +1,183 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// UNSUPPORTED: no-filesystem
+
+// <filesystem>
+
+// Test the feature test macros defined by <filesystem>
+
+// clang-format off
+
+#include <filesystem>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_char8_t
+#    error "__cpp_lib_char8_t should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_filesystem
+#    error "__cpp_lib_filesystem should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_format_path
+#    error "__cpp_lib_format_path should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_char8_t
+#    error "__cpp_lib_char8_t should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_filesystem
+#    error "__cpp_lib_filesystem should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_format_path
+#    error "__cpp_lib_format_path should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_char8_t
+#    error "__cpp_lib_char8_t should not be defined before c++20"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_FILESYSTEM && _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_LIBRARY)
+#    ifndef __cpp_lib_filesystem
+#      error "__cpp_lib_filesystem should be defined in c++17"
+#    endif
+#    if __cpp_lib_filesystem != 201703L
+#      error "__cpp_lib_filesystem should have the value 201703L in c++17"
+#    endif
+#  else
+#    ifdef __cpp_lib_filesystem
+#      error "__cpp_lib_filesystem should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_FILESYSTEM && _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_LIBRARY)' is not met!"
+#    endif
+#  endif
+
+#  ifdef __cpp_lib_format_path
+#    error "__cpp_lib_format_path should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  if defined(__cpp_char8_t)
+#    ifndef __cpp_lib_char8_t
+#      error "__cpp_lib_char8_t should be defined in c++20"
+#    endif
+#    if __cpp_lib_char8_t != 201907L
+#      error "__cpp_lib_char8_t should have the value 201907L in c++20"
+#    endif
+#  else
+#    ifdef __cpp_lib_char8_t
+#      error "__cpp_lib_char8_t should not be defined when the requirement 'defined(__cpp_char8_t)' is not met!"
+#    endif
+#  endif
+
+#  if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_FILESYSTEM && _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_LIBRARY)
+#    ifndef __cpp_lib_filesystem
+#      error "__cpp_lib_filesystem should be defined in c++20"
+#    endif
+#    if __cpp_lib_filesystem != 201703L
+#      error "__cpp_lib_filesystem should have the value 201703L in c++20"
+#    endif
+#  else
+#    ifdef __cpp_lib_filesystem
+#      error "__cpp_lib_filesystem should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_FILESYSTEM && _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_LIBRARY)' is not met!"
+#    endif
+#  endif
+
+#  ifdef __cpp_lib_format_path
+#    error "__cpp_lib_format_path should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  if defined(__cpp_char8_t)
+#    ifndef __cpp_lib_char8_t
+#      error "__cpp_lib_char8_t should be defined in c++23"
+#    endif
+#    if __cpp_lib_char8_t != 201907L
+#      error "__cpp_lib_char8_t should have the value 201907L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_char8_t
+#      error "__cpp_lib_char8_t should not be defined when the requirement 'defined(__cpp_char8_t)' is not met!"
+#    endif
+#  endif
+
+#  if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_FILESYSTEM && _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_LIBRARY)
+#    ifndef __cpp_lib_filesystem
+#      error "__cpp_lib_filesystem should be defined in c++23"
+#    endif
+#    if __cpp_lib_filesystem != 201703L
+#      error "__cpp_lib_filesystem should have the value 201703L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_filesystem
+#      error "__cpp_lib_filesystem should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_FILESYSTEM && _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_LIBRARY)' is not met!"
+#    endif
+#  endif
+
+#  ifdef __cpp_lib_format_path
+#    error "__cpp_lib_format_path should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  if defined(__cpp_char8_t)
+#    ifndef __cpp_lib_char8_t
+#      error "__cpp_lib_char8_t should be defined in c++26"
+#    endif
+#    if __cpp_lib_char8_t != 201907L
+#      error "__cpp_lib_char8_t should have the value 201907L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_char8_t
+#      error "__cpp_lib_char8_t should not be defined when the requirement 'defined(__cpp_char8_t)' is not met!"
+#    endif
+#  endif
+
+#  if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_FILESYSTEM && _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_LIBRARY)
+#    ifndef __cpp_lib_filesystem
+#      error "__cpp_lib_filesystem should be defined in c++26"
+#    endif
+#    if __cpp_lib_filesystem != 201703L
+#      error "__cpp_lib_filesystem should have the value 201703L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_filesystem
+#      error "__cpp_lib_filesystem should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_FILESYSTEM && _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_LIBRARY)' is not met!"
+#    endif
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_format_path
+#      error "__cpp_lib_format_path should be defined in c++26"
+#    endif
+#    if __cpp_lib_format_path != 202403L
+#      error "__cpp_lib_format_path should have the value 202403L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_format_path
+#      error "__cpp_lib_format_path should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/flat_map.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/flat_map.version.compile.pass.cpp
new file mode 100644
index 0000000000000..e40a13158e05f
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/flat_map.version.compile.pass.cpp
@@ -0,0 +1,67 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <flat_map>
+
+// Test the feature test macros defined by <flat_map>
+
+// clang-format off
+
+#include <flat_map>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_flat_map
+#    error "__cpp_lib_flat_map should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_flat_map
+#    error "__cpp_lib_flat_map should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_flat_map
+#    error "__cpp_lib_flat_map should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifdef __cpp_lib_flat_map
+#    error "__cpp_lib_flat_map should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifndef __cpp_lib_flat_map
+#    error "__cpp_lib_flat_map should be defined in c++23"
+#  endif
+#  if __cpp_lib_flat_map != 202207L
+#    error "__cpp_lib_flat_map should have the value 202207L in c++23"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  ifndef __cpp_lib_flat_map
+#    error "__cpp_lib_flat_map should be defined in c++26"
+#  endif
+#  if __cpp_lib_flat_map != 202207L
+#    error "__cpp_lib_flat_map should have the value 202207L in c++26"
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/flat_set.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/flat_set.version.compile.pass.cpp
new file mode 100644
index 0000000000000..e118bf56b5e21
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/flat_set.version.compile.pass.cpp
@@ -0,0 +1,81 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <flat_set>
+
+// Test the feature test macros defined by <flat_set>
+
+// clang-format off
+
+#if __has_include(<flat_set>)
+#  include <flat_set>
+#endif
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_flat_set
+#    error "__cpp_lib_flat_set should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_flat_set
+#    error "__cpp_lib_flat_set should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_flat_set
+#    error "__cpp_lib_flat_set should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifdef __cpp_lib_flat_set
+#    error "__cpp_lib_flat_set should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_flat_set
+#      error "__cpp_lib_flat_set should be defined in c++23"
+#    endif
+#    if __cpp_lib_flat_set != 202207L
+#      error "__cpp_lib_flat_set should have the value 202207L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_flat_set
+#      error "__cpp_lib_flat_set should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_flat_set
+#      error "__cpp_lib_flat_set should be defined in c++26"
+#    endif
+#    if __cpp_lib_flat_set != 202207L
+#      error "__cpp_lib_flat_set should have the value 202207L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_flat_set
+#      error "__cpp_lib_flat_set should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/format.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/format.version.compile.pass.cpp
new file mode 100644
index 0000000000000..0171d69c52d96
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/format.version.compile.pass.cpp
@@ -0,0 +1,151 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <format>
+
+// Test the feature test macros defined by <format>
+
+// clang-format off
+
+#include <format>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_format
+#    error "__cpp_lib_format should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_format_ranges
+#    error "__cpp_lib_format_ranges should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_format_uchar
+#    error "__cpp_lib_format_uchar should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_format
+#    error "__cpp_lib_format should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_format_ranges
+#    error "__cpp_lib_format_ranges should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_format_uchar
+#    error "__cpp_lib_format_uchar should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_format
+#    error "__cpp_lib_format should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_format_ranges
+#    error "__cpp_lib_format_ranges should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_format_uchar
+#    error "__cpp_lib_format_uchar should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT
+#    ifndef __cpp_lib_format
+#      error "__cpp_lib_format should be defined in c++20"
+#    endif
+#    if __cpp_lib_format != 202110L
+#      error "__cpp_lib_format should have the value 202110L in c++20"
+#    endif
+#  else
+#    ifdef __cpp_lib_format
+#      error "__cpp_lib_format should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT' is not met!"
+#    endif
+#  endif
+
+#  ifdef __cpp_lib_format_ranges
+#    error "__cpp_lib_format_ranges should not be defined before c++23"
+#  endif
+
+#  ifndef __cpp_lib_format_uchar
+#    error "__cpp_lib_format_uchar should be defined in c++20"
+#  endif
+#  if __cpp_lib_format_uchar != 202311L
+#    error "__cpp_lib_format_uchar should have the value 202311L in c++20"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT
+#    ifndef __cpp_lib_format
+#      error "__cpp_lib_format should be defined in c++23"
+#    endif
+#    if __cpp_lib_format != 202110L
+#      error "__cpp_lib_format should have the value 202110L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_format
+#      error "__cpp_lib_format should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT' is not met!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_format_ranges
+#    error "__cpp_lib_format_ranges should be defined in c++23"
+#  endif
+#  if __cpp_lib_format_ranges != 202207L
+#    error "__cpp_lib_format_ranges should have the value 202207L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_format_uchar
+#    error "__cpp_lib_format_uchar should be defined in c++23"
+#  endif
+#  if __cpp_lib_format_uchar != 202311L
+#    error "__cpp_lib_format_uchar should have the value 202311L in c++23"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT
+#    ifndef __cpp_lib_format
+#      error "__cpp_lib_format should be defined in c++26"
+#    endif
+#    if __cpp_lib_format != 202110L
+#      error "__cpp_lib_format should have the value 202110L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_format
+#      error "__cpp_lib_format should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT' is not met!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_format_ranges
+#    error "__cpp_lib_format_ranges should be defined in c++26"
+#  endif
+#  if __cpp_lib_format_ranges != 202207L
+#    error "__cpp_lib_format_ranges should have the value 202207L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_format_uchar
+#    error "__cpp_lib_format_uchar should be defined in c++26"
+#  endif
+#  if __cpp_lib_format_uchar != 202311L
+#    error "__cpp_lib_format_uchar should have the value 202311L in c++26"
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/forward_list.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/forward_list.version.compile.pass.cpp
new file mode 100644
index 0000000000000..c55b760ab4416
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/forward_list.version.compile.pass.cpp
@@ -0,0 +1,274 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <forward_list>
+
+// Test the feature test macros defined by <forward_list>
+
+// clang-format off
+
+#include <forward_list>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_default_template_type_for_algorithm_values
+#    error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_incomplete_container_elements
+#    error "__cpp_lib_incomplete_container_elements should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_list_remove_return_type
+#    error "__cpp_lib_list_remove_return_type should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should not be defined before c++17"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_default_template_type_for_algorithm_values
+#    error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_incomplete_container_elements
+#    error "__cpp_lib_incomplete_container_elements should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_list_remove_return_type
+#    error "__cpp_lib_list_remove_return_type should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should not be defined before c++17"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifndef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++17"
+#  endif
+#  if __cpp_lib_allocator_traits_is_always_equal != 201411L
+#    error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++17"
+#  endif
+
+#  ifdef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_default_template_type_for_algorithm_values
+#    error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should not be defined before c++20"
+#  endif
+
+#  ifndef __cpp_lib_incomplete_container_elements
+#    error "__cpp_lib_incomplete_container_elements should be defined in c++17"
+#  endif
+#  if __cpp_lib_incomplete_container_elements != 201505L
+#    error "__cpp_lib_incomplete_container_elements should have the value 201505L in c++17"
+#  endif
+
+#  ifdef __cpp_lib_list_remove_return_type
+#    error "__cpp_lib_list_remove_return_type should not be defined before c++20"
+#  endif
+
+#  ifndef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should be defined in c++17"
+#  endif
+#  if __cpp_lib_nonmember_container_access != 201411L
+#    error "__cpp_lib_nonmember_container_access should have the value 201411L in c++17"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifndef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++20"
+#  endif
+#  if __cpp_lib_allocator_traits_is_always_equal != 201411L
+#    error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++20"
+#  endif
+
+#  ifdef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_default_template_type_for_algorithm_values
+#    error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26"
+#  endif
+
+#  ifndef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should be defined in c++20"
+#  endif
+#  if __cpp_lib_erase_if != 202002L
+#    error "__cpp_lib_erase_if should have the value 202002L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_incomplete_container_elements
+#    error "__cpp_lib_incomplete_container_elements should be defined in c++20"
+#  endif
+#  if __cpp_lib_incomplete_container_elements != 201505L
+#    error "__cpp_lib_incomplete_container_elements should have the value 201505L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_list_remove_return_type
+#    error "__cpp_lib_list_remove_return_type should be defined in c++20"
+#  endif
+#  if __cpp_lib_list_remove_return_type != 201806L
+#    error "__cpp_lib_list_remove_return_type should have the value 201806L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should be defined in c++20"
+#  endif
+#  if __cpp_lib_nonmember_container_access != 201411L
+#    error "__cpp_lib_nonmember_container_access should have the value 201411L in c++20"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifndef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++23"
+#  endif
+#  if __cpp_lib_allocator_traits_is_always_equal != 201411L
+#    error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should be defined in c++23"
+#  endif
+#  if __cpp_lib_containers_ranges != 202202L
+#    error "__cpp_lib_containers_ranges should have the value 202202L in c++23"
+#  endif
+
+#  ifdef __cpp_lib_default_template_type_for_algorithm_values
+#    error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26"
+#  endif
+
+#  ifndef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should be defined in c++23"
+#  endif
+#  if __cpp_lib_erase_if != 202002L
+#    error "__cpp_lib_erase_if should have the value 202002L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_incomplete_container_elements
+#    error "__cpp_lib_incomplete_container_elements should be defined in c++23"
+#  endif
+#  if __cpp_lib_incomplete_container_elements != 201505L
+#    error "__cpp_lib_incomplete_container_elements should have the value 201505L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_list_remove_return_type
+#    error "__cpp_lib_list_remove_return_type should be defined in c++23"
+#  endif
+#  if __cpp_lib_list_remove_return_type != 201806L
+#    error "__cpp_lib_list_remove_return_type should have the value 201806L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should be defined in c++23"
+#  endif
+#  if __cpp_lib_nonmember_container_access != 201411L
+#    error "__cpp_lib_nonmember_container_access should have the value 201411L in c++23"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  ifndef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++26"
+#  endif
+#  if __cpp_lib_allocator_traits_is_always_equal != 201411L
+#    error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should be defined in c++26"
+#  endif
+#  if __cpp_lib_containers_ranges != 202202L
+#    error "__cpp_lib_containers_ranges should have the value 202202L in c++26"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_default_template_type_for_algorithm_values
+#      error "__cpp_lib_default_template_type_for_algorithm_values should be defined in c++26"
+#    endif
+#    if __cpp_lib_default_template_type_for_algorithm_values != 202403L
+#      error "__cpp_lib_default_template_type_for_algorithm_values should have the value 202403L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_default_template_type_for_algorithm_values
+#      error "__cpp_lib_default_template_type_for_algorithm_values should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should be defined in c++26"
+#  endif
+#  if __cpp_lib_erase_if != 202002L
+#    error "__cpp_lib_erase_if should have the value 202002L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_incomplete_container_elements
+#    error "__cpp_lib_incomplete_container_elements should be defined in c++26"
+#  endif
+#  if __cpp_lib_incomplete_container_elements != 201505L
+#    error "__cpp_lib_incomplete_container_elements should have the value 201505L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_list_remove_return_type
+#    error "__cpp_lib_list_remove_return_type should be defined in c++26"
+#  endif
+#  if __cpp_lib_list_remove_return_type != 201806L
+#    error "__cpp_lib_list_remove_return_type should have the value 201806L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should be defined in c++26"
+#  endif
+#  if __cpp_lib_nonmember_container_access != 201411L
+#    error "__cpp_lib_nonmember_container_access should have the value 201411L in c++26"
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/fstream.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/fstream.version.compile.pass.cpp
new file mode 100644
index 0000000000000..37982e14ef299
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/fstream.version.compile.pass.cpp
@@ -0,0 +1,72 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// UNSUPPORTED: no-localization
+
+// <fstream>
+
+// Test the feature test macros defined by <fstream>
+
+// clang-format off
+
+#include <fstream>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_fstream_native_handle
+#    error "__cpp_lib_fstream_native_handle should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_fstream_native_handle
+#    error "__cpp_lib_fstream_native_handle should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_fstream_native_handle
+#    error "__cpp_lib_fstream_native_handle should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifdef __cpp_lib_fstream_native_handle
+#    error "__cpp_lib_fstream_native_handle should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifdef __cpp_lib_fstream_native_handle
+#    error "__cpp_lib_fstream_native_handle should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_FILESYSTEM && _LIBCPP_HAS_LOCALIZATION)
+#    ifndef __cpp_lib_fstream_native_handle
+#      error "__cpp_lib_fstream_native_handle should be defined in c++26"
+#    endif
+#    if __cpp_lib_fstream_native_handle != 202306L
+#      error "__cpp_lib_fstream_native_handle should have the value 202306L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_fstream_native_handle
+#      error "__cpp_lib_fstream_native_handle should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_FILESYSTEM && _LIBCPP_HAS_LOCALIZATION)' is not met!"
+#    endif
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/functional.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/functional.version.compile.pass.cpp
new file mode 100644
index 0000000000000..909fb336484e3
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/functional.version.compile.pass.cpp
@@ -0,0 +1,550 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <functional>
+
+// Test the feature test macros defined by <functional>
+
+// clang-format off
+
+#include <functional>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_bind_back
+#    error "__cpp_lib_bind_back should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_bind_front
+#    error "__cpp_lib_bind_front should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_boyer_moore_searcher
+#    error "__cpp_lib_boyer_moore_searcher should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_constexpr_functional
+#    error "__cpp_lib_constexpr_functional should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_copyable_function
+#    error "__cpp_lib_copyable_function should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_function_ref
+#    error "__cpp_lib_function_ref should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_invoke
+#    error "__cpp_lib_invoke should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_invoke_r
+#    error "__cpp_lib_invoke_r should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_move_only_function
+#    error "__cpp_lib_move_only_function should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_not_fn
+#    error "__cpp_lib_not_fn should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_ranges
+#    error "__cpp_lib_ranges should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_reference_wrapper
+#    error "__cpp_lib_reference_wrapper should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_result_of_sfinae
+#    error "__cpp_lib_result_of_sfinae should not be defined before c++14"
+#  endif
+
+#  ifdef __cpp_lib_transparent_operators
+#    error "__cpp_lib_transparent_operators should not be defined before c++14"
+#  endif
+
+#  ifdef __cpp_lib_unwrap_ref
+#    error "__cpp_lib_unwrap_ref should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_bind_back
+#    error "__cpp_lib_bind_back should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_bind_front
+#    error "__cpp_lib_bind_front should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_boyer_moore_searcher
+#    error "__cpp_lib_boyer_moore_searcher should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_constexpr_functional
+#    error "__cpp_lib_constexpr_functional should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_copyable_function
+#    error "__cpp_lib_copyable_function should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_function_ref
+#    error "__cpp_lib_function_ref should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_invoke
+#    error "__cpp_lib_invoke should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_invoke_r
+#    error "__cpp_lib_invoke_r should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_move_only_function
+#    error "__cpp_lib_move_only_function should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_not_fn
+#    error "__cpp_lib_not_fn should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_ranges
+#    error "__cpp_lib_ranges should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_reference_wrapper
+#    error "__cpp_lib_reference_wrapper should not be defined before c++26"
+#  endif
+
+#  ifndef __cpp_lib_result_of_sfinae
+#    error "__cpp_lib_result_of_sfinae should be defined in c++14"
+#  endif
+#  if __cpp_lib_result_of_sfinae != 201210L
+#    error "__cpp_lib_result_of_sfinae should have the value 201210L in c++14"
+#  endif
+
+#  ifndef __cpp_lib_transparent_operators
+#    error "__cpp_lib_transparent_operators should be defined in c++14"
+#  endif
+#  if __cpp_lib_transparent_operators != 201210L
+#    error "__cpp_lib_transparent_operators should have the value 201210L in c++14"
+#  endif
+
+#  ifdef __cpp_lib_unwrap_ref
+#    error "__cpp_lib_unwrap_ref should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_bind_back
+#    error "__cpp_lib_bind_back should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_bind_front
+#    error "__cpp_lib_bind_front should not be defined before c++20"
+#  endif
+
+#  ifndef __cpp_lib_boyer_moore_searcher
+#    error "__cpp_lib_boyer_moore_searcher should be defined in c++17"
+#  endif
+#  if __cpp_lib_boyer_moore_searcher != 201603L
+#    error "__cpp_lib_boyer_moore_searcher should have the value 201603L in c++17"
+#  endif
+
+#  ifdef __cpp_lib_constexpr_functional
+#    error "__cpp_lib_constexpr_functional should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_copyable_function
+#    error "__cpp_lib_copyable_function should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_function_ref
+#    error "__cpp_lib_function_ref should not be defined before c++26"
+#  endif
+
+#  ifndef __cpp_lib_invoke
+#    error "__cpp_lib_invoke should be defined in c++17"
+#  endif
+#  if __cpp_lib_invoke != 201411L
+#    error "__cpp_lib_invoke should have the value 201411L in c++17"
+#  endif
+
+#  ifdef __cpp_lib_invoke_r
+#    error "__cpp_lib_invoke_r should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_move_only_function
+#    error "__cpp_lib_move_only_function should not be defined before c++23"
+#  endif
+
+#  ifndef __cpp_lib_not_fn
+#    error "__cpp_lib_not_fn should be defined in c++17"
+#  endif
+#  if __cpp_lib_not_fn != 201603L
+#    error "__cpp_lib_not_fn should have the value 201603L in c++17"
+#  endif
+
+#  ifdef __cpp_lib_ranges
+#    error "__cpp_lib_ranges should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_reference_wrapper
+#    error "__cpp_lib_reference_wrapper should not be defined before c++26"
+#  endif
+
+#  ifndef __cpp_lib_result_of_sfinae
+#    error "__cpp_lib_result_of_sfinae should be defined in c++17"
+#  endif
+#  if __cpp_lib_result_of_sfinae != 201210L
+#    error "__cpp_lib_result_of_sfinae should have the value 201210L in c++17"
+#  endif
+
+#  ifndef __cpp_lib_transparent_operators
+#    error "__cpp_lib_transparent_operators should be defined in c++17"
+#  endif
+#  if __cpp_lib_transparent_operators != 201510L
+#    error "__cpp_lib_transparent_operators should have the value 201510L in c++17"
+#  endif
+
+#  ifdef __cpp_lib_unwrap_ref
+#    error "__cpp_lib_unwrap_ref should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifdef __cpp_lib_bind_back
+#    error "__cpp_lib_bind_back should not be defined before c++23"
+#  endif
+
+#  ifndef __cpp_lib_bind_front
+#    error "__cpp_lib_bind_front should be defined in c++20"
+#  endif
+#  if __cpp_lib_bind_front != 201907L
+#    error "__cpp_lib_bind_front should have the value 201907L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_boyer_moore_searcher
+#    error "__cpp_lib_boyer_moore_searcher should be defined in c++20"
+#  endif
+#  if __cpp_lib_boyer_moore_searcher != 201603L
+#    error "__cpp_lib_boyer_moore_searcher should have the value 201603L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_constexpr_functional
+#    error "__cpp_lib_constexpr_functional should be defined in c++20"
+#  endif
+#  if __cpp_lib_constexpr_functional != 201907L
+#    error "__cpp_lib_constexpr_functional should have the value 201907L in c++20"
+#  endif
+
+#  ifdef __cpp_lib_copyable_function
+#    error "__cpp_lib_copyable_function should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_function_ref
+#    error "__cpp_lib_function_ref should not be defined before c++26"
+#  endif
+
+#  ifndef __cpp_lib_invoke
+#    error "__cpp_lib_invoke should be defined in c++20"
+#  endif
+#  if __cpp_lib_invoke != 201411L
+#    error "__cpp_lib_invoke should have the value 201411L in c++20"
+#  endif
+
+#  ifdef __cpp_lib_invoke_r
+#    error "__cpp_lib_invoke_r should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_move_only_function
+#    error "__cpp_lib_move_only_function should not be defined before c++23"
+#  endif
+
+#  ifndef __cpp_lib_not_fn
+#    error "__cpp_lib_not_fn should be defined in c++20"
+#  endif
+#  if __cpp_lib_not_fn != 201603L
+#    error "__cpp_lib_not_fn should have the value 201603L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_ranges
+#    error "__cpp_lib_ranges should be defined in c++20"
+#  endif
+#  if __cpp_lib_ranges != 202110L
+#    error "__cpp_lib_ranges should have the value 202110L in c++20"
+#  endif
+
+#  ifdef __cpp_lib_reference_wrapper
+#    error "__cpp_lib_reference_wrapper should not be defined before c++26"
+#  endif
+
+#  ifndef __cpp_lib_result_of_sfinae
+#    error "__cpp_lib_result_of_sfinae should be defined in c++20"
+#  endif
+#  if __cpp_lib_result_of_sfinae != 201210L
+#    error "__cpp_lib_result_of_sfinae should have the value 201210L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_transparent_operators
+#    error "__cpp_lib_transparent_operators should be defined in c++20"
+#  endif
+#  if __cpp_lib_transparent_operators != 201510L
+#    error "__cpp_lib_transparent_operators should have the value 201510L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_unwrap_ref
+#    error "__cpp_lib_unwrap_ref should be defined in c++20"
+#  endif
+#  if __cpp_lib_unwrap_ref != 201811L
+#    error "__cpp_lib_unwrap_ref should have the value 201811L in c++20"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifndef __cpp_lib_bind_back
+#    error "__cpp_lib_bind_back should be defined in c++23"
+#  endif
+#  if __cpp_lib_bind_back != 202202L
+#    error "__cpp_lib_bind_back should have the value 202202L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_bind_front
+#    error "__cpp_lib_bind_front should be defined in c++23"
+#  endif
+#  if __cpp_lib_bind_front != 201907L
+#    error "__cpp_lib_bind_front should have the value 201907L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_boyer_moore_searcher
+#    error "__cpp_lib_boyer_moore_searcher should be defined in c++23"
+#  endif
+#  if __cpp_lib_boyer_moore_searcher != 201603L
+#    error "__cpp_lib_boyer_moore_searcher should have the value 201603L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_constexpr_functional
+#    error "__cpp_lib_constexpr_functional should be defined in c++23"
+#  endif
+#  if __cpp_lib_constexpr_functional != 201907L
+#    error "__cpp_lib_constexpr_functional should have the value 201907L in c++23"
+#  endif
+
+#  ifdef __cpp_lib_copyable_function
+#    error "__cpp_lib_copyable_function should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_function_ref
+#    error "__cpp_lib_function_ref should not be defined before c++26"
+#  endif
+
+#  ifndef __cpp_lib_invoke
+#    error "__cpp_lib_invoke should be defined in c++23"
+#  endif
+#  if __cpp_lib_invoke != 201411L
+#    error "__cpp_lib_invoke should have the value 201411L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_invoke_r
+#    error "__cpp_lib_invoke_r should be defined in c++23"
+#  endif
+#  if __cpp_lib_invoke_r != 202106L
+#    error "__cpp_lib_invoke_r should have the value 202106L in c++23"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_move_only_function
+#      error "__cpp_lib_move_only_function should be defined in c++23"
+#    endif
+#    if __cpp_lib_move_only_function != 202110L
+#      error "__cpp_lib_move_only_function should have the value 202110L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_move_only_function
+#      error "__cpp_lib_move_only_function should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_not_fn
+#    error "__cpp_lib_not_fn should be defined in c++23"
+#  endif
+#  if __cpp_lib_not_fn != 201603L
+#    error "__cpp_lib_not_fn should have the value 201603L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_ranges
+#    error "__cpp_lib_ranges should be defined in c++23"
+#  endif
+#  if __cpp_lib_ranges != 202406L
+#    error "__cpp_lib_ranges should have the value 202406L in c++23"
+#  endif
+
+#  ifdef __cpp_lib_reference_wrapper
+#    error "__cpp_lib_reference_wrapper should not be defined before c++26"
+#  endif
+
+#  ifndef __cpp_lib_result_of_sfinae
+#    error "__cpp_lib_result_of_sfinae should be defined in c++23"
+#  endif
+#  if __cpp_lib_result_of_sfinae != 201210L
+#    error "__cpp_lib_result_of_sfinae should have the value 201210L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_transparent_operators
+#    error "__cpp_lib_transparent_operators should be defined in c++23"
+#  endif
+#  if __cpp_lib_transparent_operators != 201510L
+#    error "__cpp_lib_transparent_operators should have the value 201510L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_unwrap_ref
+#    error "__cpp_lib_unwrap_ref should be defined in c++23"
+#  endif
+#  if __cpp_lib_unwrap_ref != 201811L
+#    error "__cpp_lib_unwrap_ref should have the value 201811L in c++23"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  ifndef __cpp_lib_bind_back
+#    error "__cpp_lib_bind_back should be defined in c++26"
+#  endif
+#  if __cpp_lib_bind_back != 202202L
+#    error "__cpp_lib_bind_back should have the value 202202L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_bind_front
+#    error "__cpp_lib_bind_front should be defined in c++26"
+#  endif
+#  if __cpp_lib_bind_front != 202306L
+#    error "__cpp_lib_bind_front should have the value 202306L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_boyer_moore_searcher
+#    error "__cpp_lib_boyer_moore_searcher should be defined in c++26"
+#  endif
+#  if __cpp_lib_boyer_moore_searcher != 201603L
+#    error "__cpp_lib_boyer_moore_searcher should have the value 201603L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_constexpr_functional
+#    error "__cpp_lib_constexpr_functional should be defined in c++26"
+#  endif
+#  if __cpp_lib_constexpr_functional != 201907L
+#    error "__cpp_lib_constexpr_functional should have the value 201907L in c++26"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_copyable_function
+#      error "__cpp_lib_copyable_function should be defined in c++26"
+#    endif
+#    if __cpp_lib_copyable_function != 202306L
+#      error "__cpp_lib_copyable_function should have the value 202306L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_copyable_function
+#      error "__cpp_lib_copyable_function should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_function_ref
+#      error "__cpp_lib_function_ref should be defined in c++26"
+#    endif
+#    if __cpp_lib_function_ref != 202306L
+#      error "__cpp_lib_function_ref should have the value 202306L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_function_ref
+#      error "__cpp_lib_function_ref should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_invoke
+#    error "__cpp_lib_invoke should be defined in c++26"
+#  endif
+#  if __cpp_lib_invoke != 201411L
+#    error "__cpp_lib_invoke should have the value 201411L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_invoke_r
+#    error "__cpp_lib_invoke_r should be defined in c++26"
+#  endif
+#  if __cpp_lib_invoke_r != 202106L
+#    error "__cpp_lib_invoke_r should have the value 202106L in c++26"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_move_only_function
+#      error "__cpp_lib_move_only_function should be defined in c++26"
+#    endif
+#    if __cpp_lib_move_only_function != 202110L
+#      error "__cpp_lib_move_only_function should have the value 202110L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_move_only_function
+#      error "__cpp_lib_move_only_function should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_not_fn
+#    error "__cpp_lib_not_fn should be defined in c++26"
+#  endif
+#  if __cpp_lib_not_fn != 202306L
+#    error "__cpp_lib_not_fn should have the value 202306L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_ranges
+#    error "__cpp_lib_ranges should be defined in c++26"
+#  endif
+#  if __cpp_lib_ranges != 202406L
+#    error "__cpp_lib_ranges should have the value 202406L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_reference_wrapper
+#    error "__cpp_lib_reference_wrapper should be defined in c++26"
+#  endif
+#  if __cpp_lib_reference_wrapper != 202403L
+#    error "__cpp_lib_reference_wrapper should have the value 202403L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_result_of_sfinae
+#    error "__cpp_lib_result_of_sfinae should be defined in c++26"
+#  endif
+#  if __cpp_lib_result_of_sfinae != 201210L
+#    error "__cpp_lib_result_of_sfinae should have the value 201210L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_transparent_operators
+#    error "__cpp_lib_transparent_operators should be defined in c++26"
+#  endif
+#  if __cpp_lib_transparent_operators != 201510L
+#    error "__cpp_lib_transparent_operators should have the value 201510L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_unwrap_ref
+#    error "__cpp_lib_unwrap_ref should be defined in c++26"
+#  endif
+#  if __cpp_lib_unwrap_ref != 201811L
+#    error "__cpp_lib_unwrap_ref should have the value 201811L in c++26"
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/hazard_pointer.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/hazard_pointer.version.compile.pass.cpp
new file mode 100644
index 0000000000000..9d3b48de84419
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/hazard_pointer.version.compile.pass.cpp
@@ -0,0 +1,72 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <hazard_pointer>
+
+// Test the feature test macros defined by <hazard_pointer>
+
+// clang-format off
+
+#if __has_include(<hazard_pointer>)
+#  include <hazard_pointer>
+#endif
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_hazard_pointer
+#    error "__cpp_lib_hazard_pointer should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_hazard_pointer
+#    error "__cpp_lib_hazard_pointer should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_hazard_pointer
+#    error "__cpp_lib_hazard_pointer should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifdef __cpp_lib_hazard_pointer
+#    error "__cpp_lib_hazard_pointer should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifdef __cpp_lib_hazard_pointer
+#    error "__cpp_lib_hazard_pointer should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_hazard_pointer
+#      error "__cpp_lib_hazard_pointer should be defined in c++26"
+#    endif
+#    if __cpp_lib_hazard_pointer != 202306L
+#      error "__cpp_lib_hazard_pointer should have the value 202306L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_hazard_pointer
+#      error "__cpp_lib_hazard_pointer should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/inplace_vector.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/inplace_vector.version.compile.pass.cpp
new file mode 100644
index 0000000000000..2d43c272d968c
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/inplace_vector.version.compile.pass.cpp
@@ -0,0 +1,72 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <inplace_vector>
+
+// Test the feature test macros defined by <inplace_vector>
+
+// clang-format off
+
+#if __has_include(<inplace_vector>)
+#  include <inplace_vector>
+#endif
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_inplace_vector
+#    error "__cpp_lib_inplace_vector should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_inplace_vector
+#    error "__cpp_lib_inplace_vector should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_inplace_vector
+#    error "__cpp_lib_inplace_vector should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifdef __cpp_lib_inplace_vector
+#    error "__cpp_lib_inplace_vector should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifdef __cpp_lib_inplace_vector
+#    error "__cpp_lib_inplace_vector should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_inplace_vector
+#      error "__cpp_lib_inplace_vector should be defined in c++26"
+#    endif
+#    if __cpp_lib_inplace_vector != 202406L
+#      error "__cpp_lib_inplace_vector should have the value 202406L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_inplace_vector
+#      error "__cpp_lib_inplace_vector should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/iomanip.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/iomanip.version.compile.pass.cpp
new file mode 100644
index 0000000000000..d9fd07ddd47fe
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/iomanip.version.compile.pass.cpp
@@ -0,0 +1,108 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// UNSUPPORTED: no-localization
+
+// <iomanip>
+
+// Test the feature test macros defined by <iomanip>
+
+// clang-format off
+
+#include <iomanip>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_quoted_string_io
+#    error "__cpp_lib_quoted_string_io should not be defined before c++14"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  if !defined(_LIBCPP_VERSION) || _LIBCPP_HAS_LOCALIZATION
+#    ifndef __cpp_lib_quoted_string_io
+#      error "__cpp_lib_quoted_string_io should be defined in c++14"
+#    endif
+#    if __cpp_lib_quoted_string_io != 201304L
+#      error "__cpp_lib_quoted_string_io should have the value 201304L in c++14"
+#    endif
+#  else
+#    ifdef __cpp_lib_quoted_string_io
+#      error "__cpp_lib_quoted_string_io should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_HAS_LOCALIZATION' is not met!"
+#    endif
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  if !defined(_LIBCPP_VERSION) || _LIBCPP_HAS_LOCALIZATION
+#    ifndef __cpp_lib_quoted_string_io
+#      error "__cpp_lib_quoted_string_io should be defined in c++17"
+#    endif
+#    if __cpp_lib_quoted_string_io != 201304L
+#      error "__cpp_lib_quoted_string_io should have the value 201304L in c++17"
+#    endif
+#  else
+#    ifdef __cpp_lib_quoted_string_io
+#      error "__cpp_lib_quoted_string_io should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_HAS_LOCALIZATION' is not met!"
+#    endif
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  if !defined(_LIBCPP_VERSION) || _LIBCPP_HAS_LOCALIZATION
+#    ifndef __cpp_lib_quoted_string_io
+#      error "__cpp_lib_quoted_string_io should be defined in c++20"
+#    endif
+#    if __cpp_lib_quoted_string_io != 201304L
+#      error "__cpp_lib_quoted_string_io should have the value 201304L in c++20"
+#    endif
+#  else
+#    ifdef __cpp_lib_quoted_string_io
+#      error "__cpp_lib_quoted_string_io should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_HAS_LOCALIZATION' is not met!"
+#    endif
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  if !defined(_LIBCPP_VERSION) || _LIBCPP_HAS_LOCALIZATION
+#    ifndef __cpp_lib_quoted_string_io
+#      error "__cpp_lib_quoted_string_io should be defined in c++23"
+#    endif
+#    if __cpp_lib_quoted_string_io != 201304L
+#      error "__cpp_lib_quoted_string_io should have the value 201304L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_quoted_string_io
+#      error "__cpp_lib_quoted_string_io should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_HAS_LOCALIZATION' is not met!"
+#    endif
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  if !defined(_LIBCPP_VERSION) || _LIBCPP_HAS_LOCALIZATION
+#    ifndef __cpp_lib_quoted_string_io
+#      error "__cpp_lib_quoted_string_io should be defined in c++26"
+#    endif
+#    if __cpp_lib_quoted_string_io != 201304L
+#      error "__cpp_lib_quoted_string_io should have the value 201304L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_quoted_string_io
+#      error "__cpp_lib_quoted_string_io should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_HAS_LOCALIZATION' is not met!"
+#    endif
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/ios.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/ios.version.compile.pass.cpp
new file mode 100644
index 0000000000000..46d9b2734165a
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/ios.version.compile.pass.cpp
@@ -0,0 +1,69 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// UNSUPPORTED: no-localization
+
+// <ios>
+
+// Test the feature test macros defined by <ios>
+
+// clang-format off
+
+#include <ios>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_ios_noreplace
+#    error "__cpp_lib_ios_noreplace should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_ios_noreplace
+#    error "__cpp_lib_ios_noreplace should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_ios_noreplace
+#    error "__cpp_lib_ios_noreplace should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifdef __cpp_lib_ios_noreplace
+#    error "__cpp_lib_ios_noreplace should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifndef __cpp_lib_ios_noreplace
+#    error "__cpp_lib_ios_noreplace should be defined in c++23"
+#  endif
+#  if __cpp_lib_ios_noreplace != 202207L
+#    error "__cpp_lib_ios_noreplace should have the value 202207L in c++23"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  ifndef __cpp_lib_ios_noreplace
+#    error "__cpp_lib_ios_noreplace should be defined in c++26"
+#  endif
+#  if __cpp_lib_ios_noreplace != 202207L
+#    error "__cpp_lib_ios_noreplace should have the value 202207L in c++26"
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/istream.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/istream.version.compile.pass.cpp
new file mode 100644
index 0000000000000..3138ce8820483
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/istream.version.compile.pass.cpp
@@ -0,0 +1,90 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// UNSUPPORTED: no-localization
+
+// <istream>
+
+// Test the feature test macros defined by <istream>
+
+// clang-format off
+
+#include <istream>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_char8_t
+#    error "__cpp_lib_char8_t should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_char8_t
+#    error "__cpp_lib_char8_t should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_char8_t
+#    error "__cpp_lib_char8_t should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  if defined(__cpp_char8_t)
+#    ifndef __cpp_lib_char8_t
+#      error "__cpp_lib_char8_t should be defined in c++20"
+#    endif
+#    if __cpp_lib_char8_t != 201907L
+#      error "__cpp_lib_char8_t should have the value 201907L in c++20"
+#    endif
+#  else
+#    ifdef __cpp_lib_char8_t
+#      error "__cpp_lib_char8_t should not be defined when the requirement 'defined(__cpp_char8_t)' is not met!"
+#    endif
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  if defined(__cpp_char8_t)
+#    ifndef __cpp_lib_char8_t
+#      error "__cpp_lib_char8_t should be defined in c++23"
+#    endif
+#    if __cpp_lib_char8_t != 201907L
+#      error "__cpp_lib_char8_t should have the value 201907L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_char8_t
+#      error "__cpp_lib_char8_t should not be defined when the requirement 'defined(__cpp_char8_t)' is not met!"
+#    endif
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  if defined(__cpp_char8_t)
+#    ifndef __cpp_lib_char8_t
+#      error "__cpp_lib_char8_t should be defined in c++26"
+#    endif
+#    if __cpp_lib_char8_t != 201907L
+#      error "__cpp_lib_char8_t should have the value 201907L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_char8_t
+#      error "__cpp_lib_char8_t should not be defined when the requirement 'defined(__cpp_char8_t)' is not met!"
+#    endif
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/iterator.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/iterator.version.compile.pass.cpp
new file mode 100644
index 0000000000000..9729b00d0c2f1
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/iterator.version.compile.pass.cpp
@@ -0,0 +1,319 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <iterator>
+
+// Test the feature test macros defined by <iterator>
+
+// clang-format off
+
+#include <iterator>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_array_constexpr
+#    error "__cpp_lib_array_constexpr should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_constexpr_iterator
+#    error "__cpp_lib_constexpr_iterator should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_make_reverse_iterator
+#    error "__cpp_lib_make_reverse_iterator should not be defined before c++14"
+#  endif
+
+#  ifdef __cpp_lib_move_iterator_concept
+#    error "__cpp_lib_move_iterator_concept should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_null_iterators
+#    error "__cpp_lib_null_iterators should not be defined before c++14"
+#  endif
+
+#  ifdef __cpp_lib_ranges
+#    error "__cpp_lib_ranges should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_ssize
+#    error "__cpp_lib_ssize should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_array_constexpr
+#    error "__cpp_lib_array_constexpr should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_constexpr_iterator
+#    error "__cpp_lib_constexpr_iterator should not be defined before c++20"
+#  endif
+
+#  ifndef __cpp_lib_make_reverse_iterator
+#    error "__cpp_lib_make_reverse_iterator should be defined in c++14"
+#  endif
+#  if __cpp_lib_make_reverse_iterator != 201402L
+#    error "__cpp_lib_make_reverse_iterator should have the value 201402L in c++14"
+#  endif
+
+#  ifdef __cpp_lib_move_iterator_concept
+#    error "__cpp_lib_move_iterator_concept should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should not be defined before c++17"
+#  endif
+
+#  ifndef __cpp_lib_null_iterators
+#    error "__cpp_lib_null_iterators should be defined in c++14"
+#  endif
+#  if __cpp_lib_null_iterators != 201304L
+#    error "__cpp_lib_null_iterators should have the value 201304L in c++14"
+#  endif
+
+#  ifdef __cpp_lib_ranges
+#    error "__cpp_lib_ranges should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_ssize
+#    error "__cpp_lib_ssize should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifndef __cpp_lib_array_constexpr
+#    error "__cpp_lib_array_constexpr should be defined in c++17"
+#  endif
+#  if __cpp_lib_array_constexpr != 201603L
+#    error "__cpp_lib_array_constexpr should have the value 201603L in c++17"
+#  endif
+
+#  ifdef __cpp_lib_constexpr_iterator
+#    error "__cpp_lib_constexpr_iterator should not be defined before c++20"
+#  endif
+
+#  ifndef __cpp_lib_make_reverse_iterator
+#    error "__cpp_lib_make_reverse_iterator should be defined in c++17"
+#  endif
+#  if __cpp_lib_make_reverse_iterator != 201402L
+#    error "__cpp_lib_make_reverse_iterator should have the value 201402L in c++17"
+#  endif
+
+#  ifdef __cpp_lib_move_iterator_concept
+#    error "__cpp_lib_move_iterator_concept should not be defined before c++20"
+#  endif
+
+#  ifndef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should be defined in c++17"
+#  endif
+#  if __cpp_lib_nonmember_container_access != 201411L
+#    error "__cpp_lib_nonmember_container_access should have the value 201411L in c++17"
+#  endif
+
+#  ifndef __cpp_lib_null_iterators
+#    error "__cpp_lib_null_iterators should be defined in c++17"
+#  endif
+#  if __cpp_lib_null_iterators != 201304L
+#    error "__cpp_lib_null_iterators should have the value 201304L in c++17"
+#  endif
+
+#  ifdef __cpp_lib_ranges
+#    error "__cpp_lib_ranges should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_ssize
+#    error "__cpp_lib_ssize should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifndef __cpp_lib_array_constexpr
+#    error "__cpp_lib_array_constexpr should be defined in c++20"
+#  endif
+#  if __cpp_lib_array_constexpr != 201811L
+#    error "__cpp_lib_array_constexpr should have the value 201811L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_constexpr_iterator
+#    error "__cpp_lib_constexpr_iterator should be defined in c++20"
+#  endif
+#  if __cpp_lib_constexpr_iterator != 201811L
+#    error "__cpp_lib_constexpr_iterator should have the value 201811L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_make_reverse_iterator
+#    error "__cpp_lib_make_reverse_iterator should be defined in c++20"
+#  endif
+#  if __cpp_lib_make_reverse_iterator != 201402L
+#    error "__cpp_lib_make_reverse_iterator should have the value 201402L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_move_iterator_concept
+#    error "__cpp_lib_move_iterator_concept should be defined in c++20"
+#  endif
+#  if __cpp_lib_move_iterator_concept != 202207L
+#    error "__cpp_lib_move_iterator_concept should have the value 202207L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should be defined in c++20"
+#  endif
+#  if __cpp_lib_nonmember_container_access != 201411L
+#    error "__cpp_lib_nonmember_container_access should have the value 201411L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_null_iterators
+#    error "__cpp_lib_null_iterators should be defined in c++20"
+#  endif
+#  if __cpp_lib_null_iterators != 201304L
+#    error "__cpp_lib_null_iterators should have the value 201304L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_ranges
+#    error "__cpp_lib_ranges should be defined in c++20"
+#  endif
+#  if __cpp_lib_ranges != 202110L
+#    error "__cpp_lib_ranges should have the value 202110L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_ssize
+#    error "__cpp_lib_ssize should be defined in c++20"
+#  endif
+#  if __cpp_lib_ssize != 201902L
+#    error "__cpp_lib_ssize should have the value 201902L in c++20"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifndef __cpp_lib_array_constexpr
+#    error "__cpp_lib_array_constexpr should be defined in c++23"
+#  endif
+#  if __cpp_lib_array_constexpr != 201811L
+#    error "__cpp_lib_array_constexpr should have the value 201811L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_constexpr_iterator
+#    error "__cpp_lib_constexpr_iterator should be defined in c++23"
+#  endif
+#  if __cpp_lib_constexpr_iterator != 201811L
+#    error "__cpp_lib_constexpr_iterator should have the value 201811L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_make_reverse_iterator
+#    error "__cpp_lib_make_reverse_iterator should be defined in c++23"
+#  endif
+#  if __cpp_lib_make_reverse_iterator != 201402L
+#    error "__cpp_lib_make_reverse_iterator should have the value 201402L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_move_iterator_concept
+#    error "__cpp_lib_move_iterator_concept should be defined in c++23"
+#  endif
+#  if __cpp_lib_move_iterator_concept != 202207L
+#    error "__cpp_lib_move_iterator_concept should have the value 202207L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should be defined in c++23"
+#  endif
+#  if __cpp_lib_nonmember_container_access != 201411L
+#    error "__cpp_lib_nonmember_container_access should have the value 201411L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_null_iterators
+#    error "__cpp_lib_null_iterators should be defined in c++23"
+#  endif
+#  if __cpp_lib_null_iterators != 201304L
+#    error "__cpp_lib_null_iterators should have the value 201304L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_ranges
+#    error "__cpp_lib_ranges should be defined in c++23"
+#  endif
+#  if __cpp_lib_ranges != 202406L
+#    error "__cpp_lib_ranges should have the value 202406L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_ssize
+#    error "__cpp_lib_ssize should be defined in c++23"
+#  endif
+#  if __cpp_lib_ssize != 201902L
+#    error "__cpp_lib_ssize should have the value 201902L in c++23"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  ifndef __cpp_lib_array_constexpr
+#    error "__cpp_lib_array_constexpr should be defined in c++26"
+#  endif
+#  if __cpp_lib_array_constexpr != 201811L
+#    error "__cpp_lib_array_constexpr should have the value 201811L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_constexpr_iterator
+#    error "__cpp_lib_constexpr_iterator should be defined in c++26"
+#  endif
+#  if __cpp_lib_constexpr_iterator != 201811L
+#    error "__cpp_lib_constexpr_iterator should have the value 201811L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_make_reverse_iterator
+#    error "__cpp_lib_make_reverse_iterator should be defined in c++26"
+#  endif
+#  if __cpp_lib_make_reverse_iterator != 201402L
+#    error "__cpp_lib_make_reverse_iterator should have the value 201402L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_move_iterator_concept
+#    error "__cpp_lib_move_iterator_concept should be defined in c++26"
+#  endif
+#  if __cpp_lib_move_iterator_concept != 202207L
+#    error "__cpp_lib_move_iterator_concept should have the value 202207L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should be defined in c++26"
+#  endif
+#  if __cpp_lib_nonmember_container_access != 201411L
+#    error "__cpp_lib_nonmember_container_access should have the value 201411L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_null_iterators
+#    error "__cpp_lib_null_iterators should be defined in c++26"
+#  endif
+#  if __cpp_lib_null_iterators != 201304L
+#    error "__cpp_lib_null_iterators should have the value 201304L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_ranges
+#    error "__cpp_lib_ranges should be defined in c++26"
+#  endif
+#  if __cpp_lib_ranges != 202406L
+#    error "__cpp_lib_ranges should have the value 202406L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_ssize
+#    error "__cpp_lib_ssize should be defined in c++26"
+#  endif
+#  if __cpp_lib_ssize != 201902L
+#    error "__cpp_lib_ssize should have the value 201902L in c++26"
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/latch.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/latch.version.compile.pass.cpp
new file mode 100644
index 0000000000000..d0c3eb4b57967
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/latch.version.compile.pass.cpp
@@ -0,0 +1,90 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// UNSUPPORTED: no-threads
+
+// <latch>
+
+// Test the feature test macros defined by <latch>
+
+// clang-format off
+
+#include <latch>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_latch
+#    error "__cpp_lib_latch should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_latch
+#    error "__cpp_lib_latch should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_latch
+#    error "__cpp_lib_latch should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)
+#    ifndef __cpp_lib_latch
+#      error "__cpp_lib_latch should be defined in c++20"
+#    endif
+#    if __cpp_lib_latch != 201907L
+#      error "__cpp_lib_latch should have the value 201907L in c++20"
+#    endif
+#  else
+#    ifdef __cpp_lib_latch
+#      error "__cpp_lib_latch should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)' is not met!"
+#    endif
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)
+#    ifndef __cpp_lib_latch
+#      error "__cpp_lib_latch should be defined in c++23"
+#    endif
+#    if __cpp_lib_latch != 201907L
+#      error "__cpp_lib_latch should have the value 201907L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_latch
+#      error "__cpp_lib_latch should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)' is not met!"
+#    endif
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)
+#    ifndef __cpp_lib_latch
+#      error "__cpp_lib_latch should be defined in c++26"
+#    endif
+#    if __cpp_lib_latch != 201907L
+#      error "__cpp_lib_latch should have the value 201907L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_latch
+#      error "__cpp_lib_latch should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)' is not met!"
+#    endif
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/limits.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/limits.version.compile.pass.cpp
new file mode 100644
index 0000000000000..f288fc57716b5
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/limits.version.compile.pass.cpp
@@ -0,0 +1,88 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <limits>
+
+// Test the feature test macros defined by <limits>
+
+// clang-format off
+
+#include <limits>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_char8_t
+#    error "__cpp_lib_char8_t should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_char8_t
+#    error "__cpp_lib_char8_t should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_char8_t
+#    error "__cpp_lib_char8_t should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  if defined(__cpp_char8_t)
+#    ifndef __cpp_lib_char8_t
+#      error "__cpp_lib_char8_t should be defined in c++20"
+#    endif
+#    if __cpp_lib_char8_t != 201907L
+#      error "__cpp_lib_char8_t should have the value 201907L in c++20"
+#    endif
+#  else
+#    ifdef __cpp_lib_char8_t
+#      error "__cpp_lib_char8_t should not be defined when the requirement 'defined(__cpp_char8_t)' is not met!"
+#    endif
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  if defined(__cpp_char8_t)
+#    ifndef __cpp_lib_char8_t
+#      error "__cpp_lib_char8_t should be defined in c++23"
+#    endif
+#    if __cpp_lib_char8_t != 201907L
+#      error "__cpp_lib_char8_t should have the value 201907L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_char8_t
+#      error "__cpp_lib_char8_t should not be defined when the requirement 'defined(__cpp_char8_t)' is not met!"
+#    endif
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  if defined(__cpp_char8_t)
+#    ifndef __cpp_lib_char8_t
+#      error "__cpp_lib_char8_t should be defined in c++26"
+#    endif
+#    if __cpp_lib_char8_t != 201907L
+#      error "__cpp_lib_char8_t should have the value 201907L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_char8_t
+#      error "__cpp_lib_char8_t should not be defined when the requirement 'defined(__cpp_char8_t)' is not met!"
+#    endif
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/linalg.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/linalg.version.compile.pass.cpp
new file mode 100644
index 0000000000000..248c97843050a
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/linalg.version.compile.pass.cpp
@@ -0,0 +1,72 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <linalg>
+
+// Test the feature test macros defined by <linalg>
+
+// clang-format off
+
+#if __has_include(<linalg>)
+#  include <linalg>
+#endif
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_linalg
+#    error "__cpp_lib_linalg should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_linalg
+#    error "__cpp_lib_linalg should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_linalg
+#    error "__cpp_lib_linalg should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifdef __cpp_lib_linalg
+#    error "__cpp_lib_linalg should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifdef __cpp_lib_linalg
+#    error "__cpp_lib_linalg should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_linalg
+#      error "__cpp_lib_linalg should be defined in c++26"
+#    endif
+#    if __cpp_lib_linalg != 202311L
+#      error "__cpp_lib_linalg should have the value 202311L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_linalg
+#      error "__cpp_lib_linalg should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/list.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/list.version.compile.pass.cpp
new file mode 100644
index 0000000000000..a630bb52f558b
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/list.version.compile.pass.cpp
@@ -0,0 +1,274 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <list>
+
+// Test the feature test macros defined by <list>
+
+// clang-format off
+
+#include <list>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_default_template_type_for_algorithm_values
+#    error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_incomplete_container_elements
+#    error "__cpp_lib_incomplete_container_elements should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_list_remove_return_type
+#    error "__cpp_lib_list_remove_return_type should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should not be defined before c++17"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_default_template_type_for_algorithm_values
+#    error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_incomplete_container_elements
+#    error "__cpp_lib_incomplete_container_elements should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_list_remove_return_type
+#    error "__cpp_lib_list_remove_return_type should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should not be defined before c++17"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifndef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++17"
+#  endif
+#  if __cpp_lib_allocator_traits_is_always_equal != 201411L
+#    error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++17"
+#  endif
+
+#  ifdef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_default_template_type_for_algorithm_values
+#    error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should not be defined before c++20"
+#  endif
+
+#  ifndef __cpp_lib_incomplete_container_elements
+#    error "__cpp_lib_incomplete_container_elements should be defined in c++17"
+#  endif
+#  if __cpp_lib_incomplete_container_elements != 201505L
+#    error "__cpp_lib_incomplete_container_elements should have the value 201505L in c++17"
+#  endif
+
+#  ifdef __cpp_lib_list_remove_return_type
+#    error "__cpp_lib_list_remove_return_type should not be defined before c++20"
+#  endif
+
+#  ifndef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should be defined in c++17"
+#  endif
+#  if __cpp_lib_nonmember_container_access != 201411L
+#    error "__cpp_lib_nonmember_container_access should have the value 201411L in c++17"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifndef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++20"
+#  endif
+#  if __cpp_lib_allocator_traits_is_always_equal != 201411L
+#    error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++20"
+#  endif
+
+#  ifdef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_default_template_type_for_algorithm_values
+#    error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26"
+#  endif
+
+#  ifndef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should be defined in c++20"
+#  endif
+#  if __cpp_lib_erase_if != 202002L
+#    error "__cpp_lib_erase_if should have the value 202002L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_incomplete_container_elements
+#    error "__cpp_lib_incomplete_container_elements should be defined in c++20"
+#  endif
+#  if __cpp_lib_incomplete_container_elements != 201505L
+#    error "__cpp_lib_incomplete_container_elements should have the value 201505L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_list_remove_return_type
+#    error "__cpp_lib_list_remove_return_type should be defined in c++20"
+#  endif
+#  if __cpp_lib_list_remove_return_type != 201806L
+#    error "__cpp_lib_list_remove_return_type should have the value 201806L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should be defined in c++20"
+#  endif
+#  if __cpp_lib_nonmember_container_access != 201411L
+#    error "__cpp_lib_nonmember_container_access should have the value 201411L in c++20"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifndef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++23"
+#  endif
+#  if __cpp_lib_allocator_traits_is_always_equal != 201411L
+#    error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should be defined in c++23"
+#  endif
+#  if __cpp_lib_containers_ranges != 202202L
+#    error "__cpp_lib_containers_ranges should have the value 202202L in c++23"
+#  endif
+
+#  ifdef __cpp_lib_default_template_type_for_algorithm_values
+#    error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26"
+#  endif
+
+#  ifndef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should be defined in c++23"
+#  endif
+#  if __cpp_lib_erase_if != 202002L
+#    error "__cpp_lib_erase_if should have the value 202002L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_incomplete_container_elements
+#    error "__cpp_lib_incomplete_container_elements should be defined in c++23"
+#  endif
+#  if __cpp_lib_incomplete_container_elements != 201505L
+#    error "__cpp_lib_incomplete_container_elements should have the value 201505L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_list_remove_return_type
+#    error "__cpp_lib_list_remove_return_type should be defined in c++23"
+#  endif
+#  if __cpp_lib_list_remove_return_type != 201806L
+#    error "__cpp_lib_list_remove_return_type should have the value 201806L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should be defined in c++23"
+#  endif
+#  if __cpp_lib_nonmember_container_access != 201411L
+#    error "__cpp_lib_nonmember_container_access should have the value 201411L in c++23"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  ifndef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++26"
+#  endif
+#  if __cpp_lib_allocator_traits_is_always_equal != 201411L
+#    error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should be defined in c++26"
+#  endif
+#  if __cpp_lib_containers_ranges != 202202L
+#    error "__cpp_lib_containers_ranges should have the value 202202L in c++26"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_default_template_type_for_algorithm_values
+#      error "__cpp_lib_default_template_type_for_algorithm_values should be defined in c++26"
+#    endif
+#    if __cpp_lib_default_template_type_for_algorithm_values != 202403L
+#      error "__cpp_lib_default_template_type_for_algorithm_values should have the value 202403L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_default_template_type_for_algorithm_values
+#      error "__cpp_lib_default_template_type_for_algorithm_values should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should be defined in c++26"
+#  endif
+#  if __cpp_lib_erase_if != 202002L
+#    error "__cpp_lib_erase_if should have the value 202002L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_incomplete_container_elements
+#    error "__cpp_lib_incomplete_container_elements should be defined in c++26"
+#  endif
+#  if __cpp_lib_incomplete_container_elements != 201505L
+#    error "__cpp_lib_incomplete_container_elements should have the value 201505L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_list_remove_return_type
+#    error "__cpp_lib_list_remove_return_type should be defined in c++26"
+#  endif
+#  if __cpp_lib_list_remove_return_type != 201806L
+#    error "__cpp_lib_list_remove_return_type should have the value 201806L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should be defined in c++26"
+#  endif
+#  if __cpp_lib_nonmember_container_access != 201411L
+#    error "__cpp_lib_nonmember_container_access should have the value 201411L in c++26"
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/locale.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/locale.version.compile.pass.cpp
new file mode 100644
index 0000000000000..5a533ca113e32
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/locale.version.compile.pass.cpp
@@ -0,0 +1,90 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// UNSUPPORTED: no-localization
+
+// <locale>
+
+// Test the feature test macros defined by <locale>
+
+// clang-format off
+
+#include <locale>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_char8_t
+#    error "__cpp_lib_char8_t should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_char8_t
+#    error "__cpp_lib_char8_t should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_char8_t
+#    error "__cpp_lib_char8_t should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  if defined(__cpp_char8_t)
+#    ifndef __cpp_lib_char8_t
+#      error "__cpp_lib_char8_t should be defined in c++20"
+#    endif
+#    if __cpp_lib_char8_t != 201907L
+#      error "__cpp_lib_char8_t should have the value 201907L in c++20"
+#    endif
+#  else
+#    ifdef __cpp_lib_char8_t
+#      error "__cpp_lib_char8_t should not be defined when the requirement 'defined(__cpp_char8_t)' is not met!"
+#    endif
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  if defined(__cpp_char8_t)
+#    ifndef __cpp_lib_char8_t
+#      error "__cpp_lib_char8_t should be defined in c++23"
+#    endif
+#    if __cpp_lib_char8_t != 201907L
+#      error "__cpp_lib_char8_t should have the value 201907L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_char8_t
+#      error "__cpp_lib_char8_t should not be defined when the requirement 'defined(__cpp_char8_t)' is not met!"
+#    endif
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  if defined(__cpp_char8_t)
+#    ifndef __cpp_lib_char8_t
+#      error "__cpp_lib_char8_t should be defined in c++26"
+#    endif
+#    if __cpp_lib_char8_t != 201907L
+#      error "__cpp_lib_char8_t should have the value 201907L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_char8_t
+#      error "__cpp_lib_char8_t should not be defined when the requirement 'defined(__cpp_char8_t)' is not met!"
+#    endif
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/map.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/map.version.compile.pass.cpp
new file mode 100644
index 0000000000000..0eb25ea572d1b
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/map.version.compile.pass.cpp
@@ -0,0 +1,400 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <map>
+
+// Test the feature test macros defined by <map>
+
+// clang-format off
+
+#include <map>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_associative_heterogeneous_erasure
+#    error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_associative_heterogeneous_insertion
+#    error "__cpp_lib_associative_heterogeneous_insertion should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_generic_associative_lookup
+#    error "__cpp_lib_generic_associative_lookup should not be defined before c++14"
+#  endif
+
+#  ifdef __cpp_lib_map_try_emplace
+#    error "__cpp_lib_map_try_emplace should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_node_extract
+#    error "__cpp_lib_node_extract should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_tuple_like
+#    error "__cpp_lib_tuple_like should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_associative_heterogeneous_erasure
+#    error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_associative_heterogeneous_insertion
+#    error "__cpp_lib_associative_heterogeneous_insertion should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should not be defined before c++20"
+#  endif
+
+#  ifndef __cpp_lib_generic_associative_lookup
+#    error "__cpp_lib_generic_associative_lookup should be defined in c++14"
+#  endif
+#  if __cpp_lib_generic_associative_lookup != 201304L
+#    error "__cpp_lib_generic_associative_lookup should have the value 201304L in c++14"
+#  endif
+
+#  ifdef __cpp_lib_map_try_emplace
+#    error "__cpp_lib_map_try_emplace should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_node_extract
+#    error "__cpp_lib_node_extract should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_tuple_like
+#    error "__cpp_lib_tuple_like should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifndef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++17"
+#  endif
+#  if __cpp_lib_allocator_traits_is_always_equal != 201411L
+#    error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++17"
+#  endif
+
+#  ifdef __cpp_lib_associative_heterogeneous_erasure
+#    error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_associative_heterogeneous_insertion
+#    error "__cpp_lib_associative_heterogeneous_insertion should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should not be defined before c++20"
+#  endif
+
+#  ifndef __cpp_lib_generic_associative_lookup
+#    error "__cpp_lib_generic_associative_lookup should be defined in c++17"
+#  endif
+#  if __cpp_lib_generic_associative_lookup != 201304L
+#    error "__cpp_lib_generic_associative_lookup should have the value 201304L in c++17"
+#  endif
+
+#  ifndef __cpp_lib_map_try_emplace
+#    error "__cpp_lib_map_try_emplace should be defined in c++17"
+#  endif
+#  if __cpp_lib_map_try_emplace != 201411L
+#    error "__cpp_lib_map_try_emplace should have the value 201411L in c++17"
+#  endif
+
+#  ifndef __cpp_lib_node_extract
+#    error "__cpp_lib_node_extract should be defined in c++17"
+#  endif
+#  if __cpp_lib_node_extract != 201606L
+#    error "__cpp_lib_node_extract should have the value 201606L in c++17"
+#  endif
+
+#  ifndef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should be defined in c++17"
+#  endif
+#  if __cpp_lib_nonmember_container_access != 201411L
+#    error "__cpp_lib_nonmember_container_access should have the value 201411L in c++17"
+#  endif
+
+#  ifdef __cpp_lib_tuple_like
+#    error "__cpp_lib_tuple_like should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifndef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++20"
+#  endif
+#  if __cpp_lib_allocator_traits_is_always_equal != 201411L
+#    error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++20"
+#  endif
+
+#  ifdef __cpp_lib_associative_heterogeneous_erasure
+#    error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_associative_heterogeneous_insertion
+#    error "__cpp_lib_associative_heterogeneous_insertion should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should not be defined before c++23"
+#  endif
+
+#  ifndef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should be defined in c++20"
+#  endif
+#  if __cpp_lib_erase_if != 202002L
+#    error "__cpp_lib_erase_if should have the value 202002L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_generic_associative_lookup
+#    error "__cpp_lib_generic_associative_lookup should be defined in c++20"
+#  endif
+#  if __cpp_lib_generic_associative_lookup != 201304L
+#    error "__cpp_lib_generic_associative_lookup should have the value 201304L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_map_try_emplace
+#    error "__cpp_lib_map_try_emplace should be defined in c++20"
+#  endif
+#  if __cpp_lib_map_try_emplace != 201411L
+#    error "__cpp_lib_map_try_emplace should have the value 201411L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_node_extract
+#    error "__cpp_lib_node_extract should be defined in c++20"
+#  endif
+#  if __cpp_lib_node_extract != 201606L
+#    error "__cpp_lib_node_extract should have the value 201606L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should be defined in c++20"
+#  endif
+#  if __cpp_lib_nonmember_container_access != 201411L
+#    error "__cpp_lib_nonmember_container_access should have the value 201411L in c++20"
+#  endif
+
+#  ifdef __cpp_lib_tuple_like
+#    error "__cpp_lib_tuple_like should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifndef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++23"
+#  endif
+#  if __cpp_lib_allocator_traits_is_always_equal != 201411L
+#    error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++23"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_associative_heterogeneous_erasure
+#      error "__cpp_lib_associative_heterogeneous_erasure should be defined in c++23"
+#    endif
+#    if __cpp_lib_associative_heterogeneous_erasure != 202110L
+#      error "__cpp_lib_associative_heterogeneous_erasure should have the value 202110L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_associative_heterogeneous_erasure
+#      error "__cpp_lib_associative_heterogeneous_erasure should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifdef __cpp_lib_associative_heterogeneous_insertion
+#    error "__cpp_lib_associative_heterogeneous_insertion should not be defined before c++26"
+#  endif
+
+#  ifndef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should be defined in c++23"
+#  endif
+#  if __cpp_lib_containers_ranges != 202202L
+#    error "__cpp_lib_containers_ranges should have the value 202202L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should be defined in c++23"
+#  endif
+#  if __cpp_lib_erase_if != 202002L
+#    error "__cpp_lib_erase_if should have the value 202002L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_generic_associative_lookup
+#    error "__cpp_lib_generic_associative_lookup should be defined in c++23"
+#  endif
+#  if __cpp_lib_generic_associative_lookup != 201304L
+#    error "__cpp_lib_generic_associative_lookup should have the value 201304L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_map_try_emplace
+#    error "__cpp_lib_map_try_emplace should be defined in c++23"
+#  endif
+#  if __cpp_lib_map_try_emplace != 201411L
+#    error "__cpp_lib_map_try_emplace should have the value 201411L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_node_extract
+#    error "__cpp_lib_node_extract should be defined in c++23"
+#  endif
+#  if __cpp_lib_node_extract != 201606L
+#    error "__cpp_lib_node_extract should have the value 201606L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should be defined in c++23"
+#  endif
+#  if __cpp_lib_nonmember_container_access != 201411L
+#    error "__cpp_lib_nonmember_container_access should have the value 201411L in c++23"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_tuple_like
+#      error "__cpp_lib_tuple_like should be defined in c++23"
+#    endif
+#    if __cpp_lib_tuple_like != 202207L
+#      error "__cpp_lib_tuple_like should have the value 202207L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_tuple_like
+#      error "__cpp_lib_tuple_like should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  ifndef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++26"
+#  endif
+#  if __cpp_lib_allocator_traits_is_always_equal != 201411L
+#    error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++26"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_associative_heterogeneous_erasure
+#      error "__cpp_lib_associative_heterogeneous_erasure should be defined in c++26"
+#    endif
+#    if __cpp_lib_associative_heterogeneous_erasure != 202110L
+#      error "__cpp_lib_associative_heterogeneous_erasure should have the value 202110L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_associative_heterogeneous_erasure
+#      error "__cpp_lib_associative_heterogeneous_erasure should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_associative_heterogeneous_insertion
+#      error "__cpp_lib_associative_heterogeneous_insertion should be defined in c++26"
+#    endif
+#    if __cpp_lib_associative_heterogeneous_insertion != 202306L
+#      error "__cpp_lib_associative_heterogeneous_insertion should have the value 202306L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_associative_heterogeneous_insertion
+#      error "__cpp_lib_associative_heterogeneous_insertion should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should be defined in c++26"
+#  endif
+#  if __cpp_lib_containers_ranges != 202202L
+#    error "__cpp_lib_containers_ranges should have the value 202202L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should be defined in c++26"
+#  endif
+#  if __cpp_lib_erase_if != 202002L
+#    error "__cpp_lib_erase_if should have the value 202002L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_generic_associative_lookup
+#    error "__cpp_lib_generic_associative_lookup should be defined in c++26"
+#  endif
+#  if __cpp_lib_generic_associative_lookup != 201304L
+#    error "__cpp_lib_generic_associative_lookup should have the value 201304L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_map_try_emplace
+#    error "__cpp_lib_map_try_emplace should be defined in c++26"
+#  endif
+#  if __cpp_lib_map_try_emplace != 201411L
+#    error "__cpp_lib_map_try_emplace should have the value 201411L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_node_extract
+#    error "__cpp_lib_node_extract should be defined in c++26"
+#  endif
+#  if __cpp_lib_node_extract != 201606L
+#    error "__cpp_lib_node_extract should have the value 201606L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should be defined in c++26"
+#  endif
+#  if __cpp_lib_nonmember_container_access != 201411L
+#    error "__cpp_lib_nonmember_container_access should have the value 201411L in c++26"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_tuple_like
+#      error "__cpp_lib_tuple_like should be defined in c++26"
+#    endif
+#    if __cpp_lib_tuple_like != 202311L
+#      error "__cpp_lib_tuple_like should have the value 202311L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_tuple_like
+#      error "__cpp_lib_tuple_like should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/mdspan.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/mdspan.version.compile.pass.cpp
new file mode 100644
index 0000000000000..57bbedf84e0ac
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/mdspan.version.compile.pass.cpp
@@ -0,0 +1,133 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <mdspan>
+
+// Test the feature test macros defined by <mdspan>
+
+// clang-format off
+
+#include <mdspan>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_freestanding_mdspan
+#    error "__cpp_lib_freestanding_mdspan should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_mdspan
+#    error "__cpp_lib_mdspan should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_submdspan
+#    error "__cpp_lib_submdspan should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_freestanding_mdspan
+#    error "__cpp_lib_freestanding_mdspan should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_mdspan
+#    error "__cpp_lib_mdspan should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_submdspan
+#    error "__cpp_lib_submdspan should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_freestanding_mdspan
+#    error "__cpp_lib_freestanding_mdspan should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_mdspan
+#    error "__cpp_lib_mdspan should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_submdspan
+#    error "__cpp_lib_submdspan should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifdef __cpp_lib_freestanding_mdspan
+#    error "__cpp_lib_freestanding_mdspan should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_mdspan
+#    error "__cpp_lib_mdspan should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_submdspan
+#    error "__cpp_lib_submdspan should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifdef __cpp_lib_freestanding_mdspan
+#    error "__cpp_lib_freestanding_mdspan should not be defined before c++26"
+#  endif
+
+#  ifndef __cpp_lib_mdspan
+#    error "__cpp_lib_mdspan should be defined in c++23"
+#  endif
+#  if __cpp_lib_mdspan != 202207L
+#    error "__cpp_lib_mdspan should have the value 202207L in c++23"
+#  endif
+
+#  ifdef __cpp_lib_submdspan
+#    error "__cpp_lib_submdspan should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_freestanding_mdspan
+#      error "__cpp_lib_freestanding_mdspan should be defined in c++26"
+#    endif
+#    if __cpp_lib_freestanding_mdspan != 202311L
+#      error "__cpp_lib_freestanding_mdspan should have the value 202311L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_freestanding_mdspan
+#      error "__cpp_lib_freestanding_mdspan should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_mdspan
+#    error "__cpp_lib_mdspan should be defined in c++26"
+#  endif
+#  if __cpp_lib_mdspan != 202406L
+#    error "__cpp_lib_mdspan should have the value 202406L in c++26"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_submdspan
+#      error "__cpp_lib_submdspan should be defined in c++26"
+#    endif
+#    if __cpp_lib_submdspan != 202306L
+#      error "__cpp_lib_submdspan should have the value 202306L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_submdspan
+#      error "__cpp_lib_submdspan should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/memory.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/memory.version.compile.pass.cpp
new file mode 100644
index 0000000000000..f6207de9909e2
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/memory.version.compile.pass.cpp
@@ -0,0 +1,655 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <memory>
+
+// Test the feature test macros defined by <memory>
+
+// clang-format off
+
+#include <memory>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_addressof_constexpr
+#    error "__cpp_lib_addressof_constexpr should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_allocate_at_least
+#    error "__cpp_lib_allocate_at_least should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_assume_aligned
+#    error "__cpp_lib_assume_aligned should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_atomic_value_initialization
+#    error "__cpp_lib_atomic_value_initialization should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_constexpr_dynamic_alloc
+#    error "__cpp_lib_constexpr_dynamic_alloc should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_constexpr_memory
+#    error "__cpp_lib_constexpr_memory should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_enable_shared_from_this
+#    error "__cpp_lib_enable_shared_from_this should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_make_unique
+#    error "__cpp_lib_make_unique should not be defined before c++14"
+#  endif
+
+#  ifdef __cpp_lib_out_ptr
+#    error "__cpp_lib_out_ptr should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_ranges
+#    error "__cpp_lib_ranges should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_raw_memory_algorithms
+#    error "__cpp_lib_raw_memory_algorithms should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_shared_ptr_arrays
+#    error "__cpp_lib_shared_ptr_arrays should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_shared_ptr_weak_type
+#    error "__cpp_lib_shared_ptr_weak_type should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_smart_ptr_for_overwrite
+#    error "__cpp_lib_smart_ptr_for_overwrite should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_smart_ptr_owner_equality
+#    error "__cpp_lib_smart_ptr_owner_equality should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_to_address
+#    error "__cpp_lib_to_address should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_transparent_operators
+#    error "__cpp_lib_transparent_operators should not be defined before c++14"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_addressof_constexpr
+#    error "__cpp_lib_addressof_constexpr should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_allocate_at_least
+#    error "__cpp_lib_allocate_at_least should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_assume_aligned
+#    error "__cpp_lib_assume_aligned should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_atomic_value_initialization
+#    error "__cpp_lib_atomic_value_initialization should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_constexpr_dynamic_alloc
+#    error "__cpp_lib_constexpr_dynamic_alloc should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_constexpr_memory
+#    error "__cpp_lib_constexpr_memory should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_enable_shared_from_this
+#    error "__cpp_lib_enable_shared_from_this should not be defined before c++17"
+#  endif
+
+#  ifndef __cpp_lib_make_unique
+#    error "__cpp_lib_make_unique should be defined in c++14"
+#  endif
+#  if __cpp_lib_make_unique != 201304L
+#    error "__cpp_lib_make_unique should have the value 201304L in c++14"
+#  endif
+
+#  ifdef __cpp_lib_out_ptr
+#    error "__cpp_lib_out_ptr should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_ranges
+#    error "__cpp_lib_ranges should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_raw_memory_algorithms
+#    error "__cpp_lib_raw_memory_algorithms should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_shared_ptr_arrays
+#    error "__cpp_lib_shared_ptr_arrays should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_shared_ptr_weak_type
+#    error "__cpp_lib_shared_ptr_weak_type should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_smart_ptr_for_overwrite
+#    error "__cpp_lib_smart_ptr_for_overwrite should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_smart_ptr_owner_equality
+#    error "__cpp_lib_smart_ptr_owner_equality should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_to_address
+#    error "__cpp_lib_to_address should not be defined before c++20"
+#  endif
+
+#  ifndef __cpp_lib_transparent_operators
+#    error "__cpp_lib_transparent_operators should be defined in c++14"
+#  endif
+#  if __cpp_lib_transparent_operators != 201210L
+#    error "__cpp_lib_transparent_operators should have the value 201210L in c++14"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifndef __cpp_lib_addressof_constexpr
+#    error "__cpp_lib_addressof_constexpr should be defined in c++17"
+#  endif
+#  if __cpp_lib_addressof_constexpr != 201603L
+#    error "__cpp_lib_addressof_constexpr should have the value 201603L in c++17"
+#  endif
+
+#  ifdef __cpp_lib_allocate_at_least
+#    error "__cpp_lib_allocate_at_least should not be defined before c++23"
+#  endif
+
+#  ifndef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++17"
+#  endif
+#  if __cpp_lib_allocator_traits_is_always_equal != 201411L
+#    error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++17"
+#  endif
+
+#  ifdef __cpp_lib_assume_aligned
+#    error "__cpp_lib_assume_aligned should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_atomic_value_initialization
+#    error "__cpp_lib_atomic_value_initialization should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_constexpr_dynamic_alloc
+#    error "__cpp_lib_constexpr_dynamic_alloc should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_constexpr_memory
+#    error "__cpp_lib_constexpr_memory should not be defined before c++20"
+#  endif
+
+#  ifndef __cpp_lib_enable_shared_from_this
+#    error "__cpp_lib_enable_shared_from_this should be defined in c++17"
+#  endif
+#  if __cpp_lib_enable_shared_from_this != 201603L
+#    error "__cpp_lib_enable_shared_from_this should have the value 201603L in c++17"
+#  endif
+
+#  ifndef __cpp_lib_make_unique
+#    error "__cpp_lib_make_unique should be defined in c++17"
+#  endif
+#  if __cpp_lib_make_unique != 201304L
+#    error "__cpp_lib_make_unique should have the value 201304L in c++17"
+#  endif
+
+#  ifdef __cpp_lib_out_ptr
+#    error "__cpp_lib_out_ptr should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_ranges
+#    error "__cpp_lib_ranges should not be defined before c++20"
+#  endif
+
+#  ifndef __cpp_lib_raw_memory_algorithms
+#    error "__cpp_lib_raw_memory_algorithms should be defined in c++17"
+#  endif
+#  if __cpp_lib_raw_memory_algorithms != 201606L
+#    error "__cpp_lib_raw_memory_algorithms should have the value 201606L in c++17"
+#  endif
+
+#  ifndef __cpp_lib_shared_ptr_arrays
+#    error "__cpp_lib_shared_ptr_arrays should be defined in c++17"
+#  endif
+#  if __cpp_lib_shared_ptr_arrays != 201611L
+#    error "__cpp_lib_shared_ptr_arrays should have the value 201611L in c++17"
+#  endif
+
+#  ifndef __cpp_lib_shared_ptr_weak_type
+#    error "__cpp_lib_shared_ptr_weak_type should be defined in c++17"
+#  endif
+#  if __cpp_lib_shared_ptr_weak_type != 201606L
+#    error "__cpp_lib_shared_ptr_weak_type should have the value 201606L in c++17"
+#  endif
+
+#  ifdef __cpp_lib_smart_ptr_for_overwrite
+#    error "__cpp_lib_smart_ptr_for_overwrite should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_smart_ptr_owner_equality
+#    error "__cpp_lib_smart_ptr_owner_equality should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_to_address
+#    error "__cpp_lib_to_address should not be defined before c++20"
+#  endif
+
+#  ifndef __cpp_lib_transparent_operators
+#    error "__cpp_lib_transparent_operators should be defined in c++17"
+#  endif
+#  if __cpp_lib_transparent_operators != 201510L
+#    error "__cpp_lib_transparent_operators should have the value 201510L in c++17"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifndef __cpp_lib_addressof_constexpr
+#    error "__cpp_lib_addressof_constexpr should be defined in c++20"
+#  endif
+#  if __cpp_lib_addressof_constexpr != 201603L
+#    error "__cpp_lib_addressof_constexpr should have the value 201603L in c++20"
+#  endif
+
+#  ifdef __cpp_lib_allocate_at_least
+#    error "__cpp_lib_allocate_at_least should not be defined before c++23"
+#  endif
+
+#  ifndef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++20"
+#  endif
+#  if __cpp_lib_allocator_traits_is_always_equal != 201411L
+#    error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_assume_aligned
+#    error "__cpp_lib_assume_aligned should be defined in c++20"
+#  endif
+#  if __cpp_lib_assume_aligned != 201811L
+#    error "__cpp_lib_assume_aligned should have the value 201811L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_atomic_value_initialization
+#    error "__cpp_lib_atomic_value_initialization should be defined in c++20"
+#  endif
+#  if __cpp_lib_atomic_value_initialization != 201911L
+#    error "__cpp_lib_atomic_value_initialization should have the value 201911L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_constexpr_dynamic_alloc
+#    error "__cpp_lib_constexpr_dynamic_alloc should be defined in c++20"
+#  endif
+#  if __cpp_lib_constexpr_dynamic_alloc != 201907L
+#    error "__cpp_lib_constexpr_dynamic_alloc should have the value 201907L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_constexpr_memory
+#    error "__cpp_lib_constexpr_memory should be defined in c++20"
+#  endif
+#  if __cpp_lib_constexpr_memory != 201811L
+#    error "__cpp_lib_constexpr_memory should have the value 201811L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_enable_shared_from_this
+#    error "__cpp_lib_enable_shared_from_this should be defined in c++20"
+#  endif
+#  if __cpp_lib_enable_shared_from_this != 201603L
+#    error "__cpp_lib_enable_shared_from_this should have the value 201603L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_make_unique
+#    error "__cpp_lib_make_unique should be defined in c++20"
+#  endif
+#  if __cpp_lib_make_unique != 201304L
+#    error "__cpp_lib_make_unique should have the value 201304L in c++20"
+#  endif
+
+#  ifdef __cpp_lib_out_ptr
+#    error "__cpp_lib_out_ptr should not be defined before c++23"
+#  endif
+
+#  ifndef __cpp_lib_ranges
+#    error "__cpp_lib_ranges should be defined in c++20"
+#  endif
+#  if __cpp_lib_ranges != 202110L
+#    error "__cpp_lib_ranges should have the value 202110L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_raw_memory_algorithms
+#    error "__cpp_lib_raw_memory_algorithms should be defined in c++20"
+#  endif
+#  if __cpp_lib_raw_memory_algorithms != 201606L
+#    error "__cpp_lib_raw_memory_algorithms should have the value 201606L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_shared_ptr_arrays
+#    error "__cpp_lib_shared_ptr_arrays should be defined in c++20"
+#  endif
+#  if __cpp_lib_shared_ptr_arrays != 201707L
+#    error "__cpp_lib_shared_ptr_arrays should have the value 201707L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_shared_ptr_weak_type
+#    error "__cpp_lib_shared_ptr_weak_type should be defined in c++20"
+#  endif
+#  if __cpp_lib_shared_ptr_weak_type != 201606L
+#    error "__cpp_lib_shared_ptr_weak_type should have the value 201606L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_smart_ptr_for_overwrite
+#    error "__cpp_lib_smart_ptr_for_overwrite should be defined in c++20"
+#  endif
+#  if __cpp_lib_smart_ptr_for_overwrite != 202002L
+#    error "__cpp_lib_smart_ptr_for_overwrite should have the value 202002L in c++20"
+#  endif
+
+#  ifdef __cpp_lib_smart_ptr_owner_equality
+#    error "__cpp_lib_smart_ptr_owner_equality should not be defined before c++26"
+#  endif
+
+#  ifndef __cpp_lib_to_address
+#    error "__cpp_lib_to_address should be defined in c++20"
+#  endif
+#  if __cpp_lib_to_address != 201711L
+#    error "__cpp_lib_to_address should have the value 201711L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_transparent_operators
+#    error "__cpp_lib_transparent_operators should be defined in c++20"
+#  endif
+#  if __cpp_lib_transparent_operators != 201510L
+#    error "__cpp_lib_transparent_operators should have the value 201510L in c++20"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifndef __cpp_lib_addressof_constexpr
+#    error "__cpp_lib_addressof_constexpr should be defined in c++23"
+#  endif
+#  if __cpp_lib_addressof_constexpr != 201603L
+#    error "__cpp_lib_addressof_constexpr should have the value 201603L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_allocate_at_least
+#    error "__cpp_lib_allocate_at_least should be defined in c++23"
+#  endif
+#  if __cpp_lib_allocate_at_least != 202302L
+#    error "__cpp_lib_allocate_at_least should have the value 202302L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++23"
+#  endif
+#  if __cpp_lib_allocator_traits_is_always_equal != 201411L
+#    error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_assume_aligned
+#    error "__cpp_lib_assume_aligned should be defined in c++23"
+#  endif
+#  if __cpp_lib_assume_aligned != 201811L
+#    error "__cpp_lib_assume_aligned should have the value 201811L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_atomic_value_initialization
+#    error "__cpp_lib_atomic_value_initialization should be defined in c++23"
+#  endif
+#  if __cpp_lib_atomic_value_initialization != 201911L
+#    error "__cpp_lib_atomic_value_initialization should have the value 201911L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_constexpr_dynamic_alloc
+#    error "__cpp_lib_constexpr_dynamic_alloc should be defined in c++23"
+#  endif
+#  if __cpp_lib_constexpr_dynamic_alloc != 201907L
+#    error "__cpp_lib_constexpr_dynamic_alloc should have the value 201907L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_constexpr_memory
+#    error "__cpp_lib_constexpr_memory should be defined in c++23"
+#  endif
+#  if __cpp_lib_constexpr_memory != 202202L
+#    error "__cpp_lib_constexpr_memory should have the value 202202L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_enable_shared_from_this
+#    error "__cpp_lib_enable_shared_from_this should be defined in c++23"
+#  endif
+#  if __cpp_lib_enable_shared_from_this != 201603L
+#    error "__cpp_lib_enable_shared_from_this should have the value 201603L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_make_unique
+#    error "__cpp_lib_make_unique should be defined in c++23"
+#  endif
+#  if __cpp_lib_make_unique != 201304L
+#    error "__cpp_lib_make_unique should have the value 201304L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_out_ptr
+#    error "__cpp_lib_out_ptr should be defined in c++23"
+#  endif
+#  if __cpp_lib_out_ptr != 202106L
+#    error "__cpp_lib_out_ptr should have the value 202106L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_ranges
+#    error "__cpp_lib_ranges should be defined in c++23"
+#  endif
+#  if __cpp_lib_ranges != 202406L
+#    error "__cpp_lib_ranges should have the value 202406L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_raw_memory_algorithms
+#    error "__cpp_lib_raw_memory_algorithms should be defined in c++23"
+#  endif
+#  if __cpp_lib_raw_memory_algorithms != 201606L
+#    error "__cpp_lib_raw_memory_algorithms should have the value 201606L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_shared_ptr_arrays
+#    error "__cpp_lib_shared_ptr_arrays should be defined in c++23"
+#  endif
+#  if __cpp_lib_shared_ptr_arrays != 201707L
+#    error "__cpp_lib_shared_ptr_arrays should have the value 201707L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_shared_ptr_weak_type
+#    error "__cpp_lib_shared_ptr_weak_type should be defined in c++23"
+#  endif
+#  if __cpp_lib_shared_ptr_weak_type != 201606L
+#    error "__cpp_lib_shared_ptr_weak_type should have the value 201606L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_smart_ptr_for_overwrite
+#    error "__cpp_lib_smart_ptr_for_overwrite should be defined in c++23"
+#  endif
+#  if __cpp_lib_smart_ptr_for_overwrite != 202002L
+#    error "__cpp_lib_smart_ptr_for_overwrite should have the value 202002L in c++23"
+#  endif
+
+#  ifdef __cpp_lib_smart_ptr_owner_equality
+#    error "__cpp_lib_smart_ptr_owner_equality should not be defined before c++26"
+#  endif
+
+#  ifndef __cpp_lib_to_address
+#    error "__cpp_lib_to_address should be defined in c++23"
+#  endif
+#  if __cpp_lib_to_address != 201711L
+#    error "__cpp_lib_to_address should have the value 201711L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_transparent_operators
+#    error "__cpp_lib_transparent_operators should be defined in c++23"
+#  endif
+#  if __cpp_lib_transparent_operators != 201510L
+#    error "__cpp_lib_transparent_operators should have the value 201510L in c++23"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  ifndef __cpp_lib_addressof_constexpr
+#    error "__cpp_lib_addressof_constexpr should be defined in c++26"
+#  endif
+#  if __cpp_lib_addressof_constexpr != 201603L
+#    error "__cpp_lib_addressof_constexpr should have the value 201603L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_allocate_at_least
+#    error "__cpp_lib_allocate_at_least should be defined in c++26"
+#  endif
+#  if __cpp_lib_allocate_at_least != 202302L
+#    error "__cpp_lib_allocate_at_least should have the value 202302L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++26"
+#  endif
+#  if __cpp_lib_allocator_traits_is_always_equal != 201411L
+#    error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_assume_aligned
+#    error "__cpp_lib_assume_aligned should be defined in c++26"
+#  endif
+#  if __cpp_lib_assume_aligned != 201811L
+#    error "__cpp_lib_assume_aligned should have the value 201811L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_atomic_value_initialization
+#    error "__cpp_lib_atomic_value_initialization should be defined in c++26"
+#  endif
+#  if __cpp_lib_atomic_value_initialization != 201911L
+#    error "__cpp_lib_atomic_value_initialization should have the value 201911L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_constexpr_dynamic_alloc
+#    error "__cpp_lib_constexpr_dynamic_alloc should be defined in c++26"
+#  endif
+#  if __cpp_lib_constexpr_dynamic_alloc != 201907L
+#    error "__cpp_lib_constexpr_dynamic_alloc should have the value 201907L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_constexpr_memory
+#    error "__cpp_lib_constexpr_memory should be defined in c++26"
+#  endif
+#  if __cpp_lib_constexpr_memory != 202202L
+#    error "__cpp_lib_constexpr_memory should have the value 202202L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_enable_shared_from_this
+#    error "__cpp_lib_enable_shared_from_this should be defined in c++26"
+#  endif
+#  if __cpp_lib_enable_shared_from_this != 201603L
+#    error "__cpp_lib_enable_shared_from_this should have the value 201603L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_make_unique
+#    error "__cpp_lib_make_unique should be defined in c++26"
+#  endif
+#  if __cpp_lib_make_unique != 201304L
+#    error "__cpp_lib_make_unique should have the value 201304L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_out_ptr
+#    error "__cpp_lib_out_ptr should be defined in c++26"
+#  endif
+#  if __cpp_lib_out_ptr != 202311L
+#    error "__cpp_lib_out_ptr should have the value 202311L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_ranges
+#    error "__cpp_lib_ranges should be defined in c++26"
+#  endif
+#  if __cpp_lib_ranges != 202406L
+#    error "__cpp_lib_ranges should have the value 202406L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_raw_memory_algorithms
+#    error "__cpp_lib_raw_memory_algorithms should be defined in c++26"
+#  endif
+#  if __cpp_lib_raw_memory_algorithms != 201606L
+#    error "__cpp_lib_raw_memory_algorithms should have the value 201606L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_shared_ptr_arrays
+#    error "__cpp_lib_shared_ptr_arrays should be defined in c++26"
+#  endif
+#  if __cpp_lib_shared_ptr_arrays != 201707L
+#    error "__cpp_lib_shared_ptr_arrays should have the value 201707L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_shared_ptr_weak_type
+#    error "__cpp_lib_shared_ptr_weak_type should be defined in c++26"
+#  endif
+#  if __cpp_lib_shared_ptr_weak_type != 201606L
+#    error "__cpp_lib_shared_ptr_weak_type should have the value 201606L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_smart_ptr_for_overwrite
+#    error "__cpp_lib_smart_ptr_for_overwrite should be defined in c++26"
+#  endif
+#  if __cpp_lib_smart_ptr_for_overwrite != 202002L
+#    error "__cpp_lib_smart_ptr_for_overwrite should have the value 202002L in c++26"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_smart_ptr_owner_equality
+#      error "__cpp_lib_smart_ptr_owner_equality should be defined in c++26"
+#    endif
+#    if __cpp_lib_smart_ptr_owner_equality != 202306L
+#      error "__cpp_lib_smart_ptr_owner_equality should have the value 202306L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_smart_ptr_owner_equality
+#      error "__cpp_lib_smart_ptr_owner_equality should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_to_address
+#    error "__cpp_lib_to_address should be defined in c++26"
+#  endif
+#  if __cpp_lib_to_address != 201711L
+#    error "__cpp_lib_to_address should have the value 201711L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_transparent_operators
+#    error "__cpp_lib_transparent_operators should be defined in c++26"
+#  endif
+#  if __cpp_lib_transparent_operators != 201510L
+#    error "__cpp_lib_transparent_operators should have the value 201510L in c++26"
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/memory_resource.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/memory_resource.version.compile.pass.cpp
new file mode 100644
index 0000000000000..d7bc75b5f31e5
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/memory_resource.version.compile.pass.cpp
@@ -0,0 +1,148 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <memory_resource>
+
+// Test the feature test macros defined by <memory_resource>
+
+// clang-format off
+
+#include <memory_resource>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_memory_resource
+#    error "__cpp_lib_memory_resource should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_polymorphic_allocator
+#    error "__cpp_lib_polymorphic_allocator should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_memory_resource
+#    error "__cpp_lib_memory_resource should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_polymorphic_allocator
+#    error "__cpp_lib_polymorphic_allocator should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_PMR
+#    ifndef __cpp_lib_memory_resource
+#      error "__cpp_lib_memory_resource should be defined in c++17"
+#    endif
+#    if __cpp_lib_memory_resource != 201603L
+#      error "__cpp_lib_memory_resource should have the value 201603L in c++17"
+#    endif
+#  else
+#    ifdef __cpp_lib_memory_resource
+#      error "__cpp_lib_memory_resource should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_PMR' is not met!"
+#    endif
+#  endif
+
+#  ifdef __cpp_lib_polymorphic_allocator
+#    error "__cpp_lib_polymorphic_allocator should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_PMR
+#    ifndef __cpp_lib_memory_resource
+#      error "__cpp_lib_memory_resource should be defined in c++20"
+#    endif
+#    if __cpp_lib_memory_resource != 201603L
+#      error "__cpp_lib_memory_resource should have the value 201603L in c++20"
+#    endif
+#  else
+#    ifdef __cpp_lib_memory_resource
+#      error "__cpp_lib_memory_resource should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_PMR' is not met!"
+#    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++20"
+#    endif
+#    if __cpp_lib_polymorphic_allocator != 201902L
+#      error "__cpp_lib_polymorphic_allocator should have the value 201902L in c++20"
+#    endif
+#  else
+#    ifdef __cpp_lib_polymorphic_allocator
+#      error "__cpp_lib_polymorphic_allocator should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_PMR' is not met!"
+#    endif
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_PMR
+#    ifndef __cpp_lib_memory_resource
+#      error "__cpp_lib_memory_resource should be defined in c++23"
+#    endif
+#    if __cpp_lib_memory_resource != 201603L
+#      error "__cpp_lib_memory_resource should have the value 201603L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_memory_resource
+#      error "__cpp_lib_memory_resource should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_PMR' is not met!"
+#    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++23"
+#    endif
+#    if __cpp_lib_polymorphic_allocator != 201902L
+#      error "__cpp_lib_polymorphic_allocator should have the value 201902L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_polymorphic_allocator
+#      error "__cpp_lib_polymorphic_allocator should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_PMR' is not met!"
+#    endif
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_PMR
+#    ifndef __cpp_lib_memory_resource
+#      error "__cpp_lib_memory_resource should be defined in c++26"
+#    endif
+#    if __cpp_lib_memory_resource != 201603L
+#      error "__cpp_lib_memory_resource should have the value 201603L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_memory_resource
+#      error "__cpp_lib_memory_resource should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_PMR' is not met!"
+#    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++26"
+#    endif
+#    if __cpp_lib_polymorphic_allocator != 201902L
+#      error "__cpp_lib_polymorphic_allocator should have the value 201902L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_polymorphic_allocator
+#      error "__cpp_lib_polymorphic_allocator should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_PMR' is not met!"
+#    endif
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/mutex.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/mutex.version.compile.pass.cpp
new file mode 100644
index 0000000000000..5b87ab21a22b7
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/mutex.version.compile.pass.cpp
@@ -0,0 +1,99 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// UNSUPPORTED: no-threads
+
+// <mutex>
+
+// Test the feature test macros defined by <mutex>
+
+// clang-format off
+
+#include <mutex>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_scoped_lock
+#    error "__cpp_lib_scoped_lock should not be defined before c++17"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_scoped_lock
+#    error "__cpp_lib_scoped_lock should not be defined before c++17"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  if !defined(_LIBCPP_VERSION) || _LIBCPP_HAS_THREADS
+#    ifndef __cpp_lib_scoped_lock
+#      error "__cpp_lib_scoped_lock should be defined in c++17"
+#    endif
+#    if __cpp_lib_scoped_lock != 201703L
+#      error "__cpp_lib_scoped_lock should have the value 201703L in c++17"
+#    endif
+#  else
+#    ifdef __cpp_lib_scoped_lock
+#      error "__cpp_lib_scoped_lock should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_HAS_THREADS' is not met!"
+#    endif
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  if !defined(_LIBCPP_VERSION) || _LIBCPP_HAS_THREADS
+#    ifndef __cpp_lib_scoped_lock
+#      error "__cpp_lib_scoped_lock should be defined in c++20"
+#    endif
+#    if __cpp_lib_scoped_lock != 201703L
+#      error "__cpp_lib_scoped_lock should have the value 201703L in c++20"
+#    endif
+#  else
+#    ifdef __cpp_lib_scoped_lock
+#      error "__cpp_lib_scoped_lock should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_HAS_THREADS' is not met!"
+#    endif
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  if !defined(_LIBCPP_VERSION) || _LIBCPP_HAS_THREADS
+#    ifndef __cpp_lib_scoped_lock
+#      error "__cpp_lib_scoped_lock should be defined in c++23"
+#    endif
+#    if __cpp_lib_scoped_lock != 201703L
+#      error "__cpp_lib_scoped_lock should have the value 201703L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_scoped_lock
+#      error "__cpp_lib_scoped_lock should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_HAS_THREADS' is not met!"
+#    endif
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  if !defined(_LIBCPP_VERSION) || _LIBCPP_HAS_THREADS
+#    ifndef __cpp_lib_scoped_lock
+#      error "__cpp_lib_scoped_lock should be defined in c++26"
+#    endif
+#    if __cpp_lib_scoped_lock != 201703L
+#      error "__cpp_lib_scoped_lock should have the value 201703L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_scoped_lock
+#      error "__cpp_lib_scoped_lock should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_HAS_THREADS' is not met!"
+#    endif
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/new.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/new.version.compile.pass.cpp
new file mode 100644
index 0000000000000..2c758d4391b9f
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/new.version.compile.pass.cpp
@@ -0,0 +1,217 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <new>
+
+// Test the feature test macros defined by <new>
+
+// clang-format off
+
+#include <new>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_constexpr_new
+#    error "__cpp_lib_constexpr_new should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_destroying_delete
+#    error "__cpp_lib_destroying_delete should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_hardware_interference_size
+#    error "__cpp_lib_hardware_interference_size should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_launder
+#    error "__cpp_lib_launder should not be defined before c++17"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_constexpr_new
+#    error "__cpp_lib_constexpr_new should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_destroying_delete
+#    error "__cpp_lib_destroying_delete should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_hardware_interference_size
+#    error "__cpp_lib_hardware_interference_size should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_launder
+#    error "__cpp_lib_launder should not be defined before c++17"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_constexpr_new
+#    error "__cpp_lib_constexpr_new should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_destroying_delete
+#    error "__cpp_lib_destroying_delete should not be defined before c++20"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION) || (defined(__GCC_DESTRUCTIVE_SIZE) && defined(__GCC_CONSTRUCTIVE_SIZE))
+#    ifndef __cpp_lib_hardware_interference_size
+#      error "__cpp_lib_hardware_interference_size should be defined in c++17"
+#    endif
+#    if __cpp_lib_hardware_interference_size != 201703L
+#      error "__cpp_lib_hardware_interference_size should have the value 201703L in c++17"
+#    endif
+#  else
+#    ifdef __cpp_lib_hardware_interference_size
+#      error "__cpp_lib_hardware_interference_size should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (defined(__GCC_DESTRUCTIVE_SIZE) && defined(__GCC_CONSTRUCTIVE_SIZE))' is not met!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_launder
+#    error "__cpp_lib_launder should be defined in c++17"
+#  endif
+#  if __cpp_lib_launder != 201606L
+#    error "__cpp_lib_launder should have the value 201606L in c++17"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifdef __cpp_lib_constexpr_new
+#    error "__cpp_lib_constexpr_new should not be defined before c++26"
+#  endif
+
+#  if TEST_STD_VER > 17 && defined(__cpp_impl_destroying_delete) && __cpp_impl_destroying_delete >= 201806L
+#    ifndef __cpp_lib_destroying_delete
+#      error "__cpp_lib_destroying_delete should be defined in c++20"
+#    endif
+#    if __cpp_lib_destroying_delete != 201806L
+#      error "__cpp_lib_destroying_delete should have the value 201806L in c++20"
+#    endif
+#  else
+#    ifdef __cpp_lib_destroying_delete
+#      error "__cpp_lib_destroying_delete should not be defined when the requirement 'TEST_STD_VER > 17 && defined(__cpp_impl_destroying_delete) && __cpp_impl_destroying_delete >= 201806L' is not met!"
+#    endif
+#  endif
+
+#  if !defined(_LIBCPP_VERSION) || (defined(__GCC_DESTRUCTIVE_SIZE) && defined(__GCC_CONSTRUCTIVE_SIZE))
+#    ifndef __cpp_lib_hardware_interference_size
+#      error "__cpp_lib_hardware_interference_size should be defined in c++20"
+#    endif
+#    if __cpp_lib_hardware_interference_size != 201703L
+#      error "__cpp_lib_hardware_interference_size should have the value 201703L in c++20"
+#    endif
+#  else
+#    ifdef __cpp_lib_hardware_interference_size
+#      error "__cpp_lib_hardware_interference_size should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (defined(__GCC_DESTRUCTIVE_SIZE) && defined(__GCC_CONSTRUCTIVE_SIZE))' is not met!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_launder
+#    error "__cpp_lib_launder should be defined in c++20"
+#  endif
+#  if __cpp_lib_launder != 201606L
+#    error "__cpp_lib_launder should have the value 201606L in c++20"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifdef __cpp_lib_constexpr_new
+#    error "__cpp_lib_constexpr_new should not be defined before c++26"
+#  endif
+
+#  if TEST_STD_VER > 17 && defined(__cpp_impl_destroying_delete) && __cpp_impl_destroying_delete >= 201806L
+#    ifndef __cpp_lib_destroying_delete
+#      error "__cpp_lib_destroying_delete should be defined in c++23"
+#    endif
+#    if __cpp_lib_destroying_delete != 201806L
+#      error "__cpp_lib_destroying_delete should have the value 201806L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_destroying_delete
+#      error "__cpp_lib_destroying_delete should not be defined when the requirement 'TEST_STD_VER > 17 && defined(__cpp_impl_destroying_delete) && __cpp_impl_destroying_delete >= 201806L' is not met!"
+#    endif
+#  endif
+
+#  if !defined(_LIBCPP_VERSION) || (defined(__GCC_DESTRUCTIVE_SIZE) && defined(__GCC_CONSTRUCTIVE_SIZE))
+#    ifndef __cpp_lib_hardware_interference_size
+#      error "__cpp_lib_hardware_interference_size should be defined in c++23"
+#    endif
+#    if __cpp_lib_hardware_interference_size != 201703L
+#      error "__cpp_lib_hardware_interference_size should have the value 201703L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_hardware_interference_size
+#      error "__cpp_lib_hardware_interference_size should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (defined(__GCC_DESTRUCTIVE_SIZE) && defined(__GCC_CONSTRUCTIVE_SIZE))' is not met!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_launder
+#    error "__cpp_lib_launder should be defined in c++23"
+#  endif
+#  if __cpp_lib_launder != 201606L
+#    error "__cpp_lib_launder should have the value 201606L in c++23"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  if !defined(_LIBCPP_ABI_VCRUNTIME)
+#    ifndef __cpp_lib_constexpr_new
+#      error "__cpp_lib_constexpr_new should be defined in c++26"
+#    endif
+#    if __cpp_lib_constexpr_new != 202406L
+#      error "__cpp_lib_constexpr_new should have the value 202406L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_constexpr_new
+#      error "__cpp_lib_constexpr_new should not be defined when the requirement '!defined(_LIBCPP_ABI_VCRUNTIME)' is not met!"
+#    endif
+#  endif
+
+#  if TEST_STD_VER > 17 && defined(__cpp_impl_destroying_delete) && __cpp_impl_destroying_delete >= 201806L
+#    ifndef __cpp_lib_destroying_delete
+#      error "__cpp_lib_destroying_delete should be defined in c++26"
+#    endif
+#    if __cpp_lib_destroying_delete != 201806L
+#      error "__cpp_lib_destroying_delete should have the value 201806L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_destroying_delete
+#      error "__cpp_lib_destroying_delete should not be defined when the requirement 'TEST_STD_VER > 17 && defined(__cpp_impl_destroying_delete) && __cpp_impl_destroying_delete >= 201806L' is not met!"
+#    endif
+#  endif
+
+#  if !defined(_LIBCPP_VERSION) || (defined(__GCC_DESTRUCTIVE_SIZE) && defined(__GCC_CONSTRUCTIVE_SIZE))
+#    ifndef __cpp_lib_hardware_interference_size
+#      error "__cpp_lib_hardware_interference_size should be defined in c++26"
+#    endif
+#    if __cpp_lib_hardware_interference_size != 201703L
+#      error "__cpp_lib_hardware_interference_size should have the value 201703L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_hardware_interference_size
+#      error "__cpp_lib_hardware_interference_size should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (defined(__GCC_DESTRUCTIVE_SIZE) && defined(__GCC_CONSTRUCTIVE_SIZE))' is not met!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_launder
+#    error "__cpp_lib_launder should be defined in c++26"
+#  endif
+#  if __cpp_lib_launder != 201606L
+#    error "__cpp_lib_launder should have the value 201606L in c++26"
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/numbers.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/numbers.version.compile.pass.cpp
new file mode 100644
index 0000000000000..fcff9799c4d17
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/numbers.version.compile.pass.cpp
@@ -0,0 +1,70 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <numbers>
+
+// Test the feature test macros defined by <numbers>
+
+// clang-format off
+
+#include <numbers>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_math_constants
+#    error "__cpp_lib_math_constants should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_math_constants
+#    error "__cpp_lib_math_constants should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_math_constants
+#    error "__cpp_lib_math_constants should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifndef __cpp_lib_math_constants
+#    error "__cpp_lib_math_constants should be defined in c++20"
+#  endif
+#  if __cpp_lib_math_constants != 201907L
+#    error "__cpp_lib_math_constants should have the value 201907L in c++20"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifndef __cpp_lib_math_constants
+#    error "__cpp_lib_math_constants should be defined in c++23"
+#  endif
+#  if __cpp_lib_math_constants != 201907L
+#    error "__cpp_lib_math_constants should have the value 201907L in c++23"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  ifndef __cpp_lib_math_constants
+#    error "__cpp_lib_math_constants should be defined in c++26"
+#  endif
+#  if __cpp_lib_math_constants != 201907L
+#    error "__cpp_lib_math_constants should have the value 201907L in c++26"
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/numeric.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/numeric.version.compile.pass.cpp
new file mode 100644
index 0000000000000..02c07bc1c54be
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/numeric.version.compile.pass.cpp
@@ -0,0 +1,268 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <numeric>
+
+// Test the feature test macros defined by <numeric>
+
+// clang-format off
+
+#include <numeric>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_constexpr_numeric
+#    error "__cpp_lib_constexpr_numeric should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_gcd_lcm
+#    error "__cpp_lib_gcd_lcm should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_interpolate
+#    error "__cpp_lib_interpolate should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_parallel_algorithm
+#    error "__cpp_lib_parallel_algorithm should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_ranges_iota
+#    error "__cpp_lib_ranges_iota should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_saturation_arithmetic
+#    error "__cpp_lib_saturation_arithmetic should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_constexpr_numeric
+#    error "__cpp_lib_constexpr_numeric should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_gcd_lcm
+#    error "__cpp_lib_gcd_lcm should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_interpolate
+#    error "__cpp_lib_interpolate should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_parallel_algorithm
+#    error "__cpp_lib_parallel_algorithm should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_ranges_iota
+#    error "__cpp_lib_ranges_iota should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_saturation_arithmetic
+#    error "__cpp_lib_saturation_arithmetic should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_constexpr_numeric
+#    error "__cpp_lib_constexpr_numeric should not be defined before c++20"
+#  endif
+
+#  ifndef __cpp_lib_gcd_lcm
+#    error "__cpp_lib_gcd_lcm should be defined in c++17"
+#  endif
+#  if __cpp_lib_gcd_lcm != 201606L
+#    error "__cpp_lib_gcd_lcm should have the value 201606L in c++17"
+#  endif
+
+#  ifdef __cpp_lib_interpolate
+#    error "__cpp_lib_interpolate should not be defined before c++20"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_parallel_algorithm
+#      error "__cpp_lib_parallel_algorithm should be defined in c++17"
+#    endif
+#    if __cpp_lib_parallel_algorithm != 201603L
+#      error "__cpp_lib_parallel_algorithm should have the value 201603L in c++17"
+#    endif
+#  else
+#    ifdef __cpp_lib_parallel_algorithm
+#      error "__cpp_lib_parallel_algorithm should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifdef __cpp_lib_ranges_iota
+#    error "__cpp_lib_ranges_iota should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_saturation_arithmetic
+#    error "__cpp_lib_saturation_arithmetic should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifndef __cpp_lib_constexpr_numeric
+#    error "__cpp_lib_constexpr_numeric should be defined in c++20"
+#  endif
+#  if __cpp_lib_constexpr_numeric != 201911L
+#    error "__cpp_lib_constexpr_numeric should have the value 201911L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_gcd_lcm
+#    error "__cpp_lib_gcd_lcm should be defined in c++20"
+#  endif
+#  if __cpp_lib_gcd_lcm != 201606L
+#    error "__cpp_lib_gcd_lcm should have the value 201606L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_interpolate
+#    error "__cpp_lib_interpolate should be defined in c++20"
+#  endif
+#  if __cpp_lib_interpolate != 201902L
+#    error "__cpp_lib_interpolate should have the value 201902L in c++20"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_parallel_algorithm
+#      error "__cpp_lib_parallel_algorithm should be defined in c++20"
+#    endif
+#    if __cpp_lib_parallel_algorithm != 201603L
+#      error "__cpp_lib_parallel_algorithm should have the value 201603L in c++20"
+#    endif
+#  else
+#    ifdef __cpp_lib_parallel_algorithm
+#      error "__cpp_lib_parallel_algorithm should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifdef __cpp_lib_ranges_iota
+#    error "__cpp_lib_ranges_iota should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_saturation_arithmetic
+#    error "__cpp_lib_saturation_arithmetic should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifndef __cpp_lib_constexpr_numeric
+#    error "__cpp_lib_constexpr_numeric should be defined in c++23"
+#  endif
+#  if __cpp_lib_constexpr_numeric != 201911L
+#    error "__cpp_lib_constexpr_numeric should have the value 201911L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_gcd_lcm
+#    error "__cpp_lib_gcd_lcm should be defined in c++23"
+#  endif
+#  if __cpp_lib_gcd_lcm != 201606L
+#    error "__cpp_lib_gcd_lcm should have the value 201606L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_interpolate
+#    error "__cpp_lib_interpolate should be defined in c++23"
+#  endif
+#  if __cpp_lib_interpolate != 201902L
+#    error "__cpp_lib_interpolate should have the value 201902L in c++23"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_parallel_algorithm
+#      error "__cpp_lib_parallel_algorithm should be defined in c++23"
+#    endif
+#    if __cpp_lib_parallel_algorithm != 201603L
+#      error "__cpp_lib_parallel_algorithm should have the value 201603L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_parallel_algorithm
+#      error "__cpp_lib_parallel_algorithm should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_ranges_iota
+#      error "__cpp_lib_ranges_iota should be defined in c++23"
+#    endif
+#    if __cpp_lib_ranges_iota != 202202L
+#      error "__cpp_lib_ranges_iota should have the value 202202L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_ranges_iota
+#      error "__cpp_lib_ranges_iota should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifdef __cpp_lib_saturation_arithmetic
+#    error "__cpp_lib_saturation_arithmetic should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  ifndef __cpp_lib_constexpr_numeric
+#    error "__cpp_lib_constexpr_numeric should be defined in c++26"
+#  endif
+#  if __cpp_lib_constexpr_numeric != 201911L
+#    error "__cpp_lib_constexpr_numeric should have the value 201911L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_gcd_lcm
+#    error "__cpp_lib_gcd_lcm should be defined in c++26"
+#  endif
+#  if __cpp_lib_gcd_lcm != 201606L
+#    error "__cpp_lib_gcd_lcm should have the value 201606L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_interpolate
+#    error "__cpp_lib_interpolate should be defined in c++26"
+#  endif
+#  if __cpp_lib_interpolate != 201902L
+#    error "__cpp_lib_interpolate should have the value 201902L in c++26"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_parallel_algorithm
+#      error "__cpp_lib_parallel_algorithm should be defined in c++26"
+#    endif
+#    if __cpp_lib_parallel_algorithm != 201603L
+#      error "__cpp_lib_parallel_algorithm should have the value 201603L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_parallel_algorithm
+#      error "__cpp_lib_parallel_algorithm should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_ranges_iota
+#      error "__cpp_lib_ranges_iota should be defined in c++26"
+#    endif
+#    if __cpp_lib_ranges_iota != 202202L
+#      error "__cpp_lib_ranges_iota should have the value 202202L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_ranges_iota
+#      error "__cpp_lib_ranges_iota should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_saturation_arithmetic
+#    error "__cpp_lib_saturation_arithmetic should be defined in c++26"
+#  endif
+#  if __cpp_lib_saturation_arithmetic != 202311L
+#    error "__cpp_lib_saturation_arithmetic should have the value 202311L in c++26"
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/optional.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/optional.version.compile.pass.cpp
new file mode 100644
index 0000000000000..c96646c3cd2d1
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/optional.version.compile.pass.cpp
@@ -0,0 +1,172 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <optional>
+
+// Test the feature test macros defined by <optional>
+
+// clang-format off
+
+#include <optional>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_constrained_equality
+#    error "__cpp_lib_constrained_equality should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_freestanding_optional
+#    error "__cpp_lib_freestanding_optional should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_optional
+#    error "__cpp_lib_optional should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_optional_range_support
+#    error "__cpp_lib_optional_range_support should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_constrained_equality
+#    error "__cpp_lib_constrained_equality should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_freestanding_optional
+#    error "__cpp_lib_freestanding_optional should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_optional
+#    error "__cpp_lib_optional should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_optional_range_support
+#    error "__cpp_lib_optional_range_support should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_constrained_equality
+#    error "__cpp_lib_constrained_equality should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_freestanding_optional
+#    error "__cpp_lib_freestanding_optional should not be defined before c++26"
+#  endif
+
+#  ifndef __cpp_lib_optional
+#    error "__cpp_lib_optional should be defined in c++17"
+#  endif
+#  if __cpp_lib_optional != 201606L
+#    error "__cpp_lib_optional should have the value 201606L in c++17"
+#  endif
+
+#  ifdef __cpp_lib_optional_range_support
+#    error "__cpp_lib_optional_range_support should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifdef __cpp_lib_constrained_equality
+#    error "__cpp_lib_constrained_equality should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_freestanding_optional
+#    error "__cpp_lib_freestanding_optional should not be defined before c++26"
+#  endif
+
+#  ifndef __cpp_lib_optional
+#    error "__cpp_lib_optional should be defined in c++20"
+#  endif
+#  if __cpp_lib_optional != 202106L
+#    error "__cpp_lib_optional should have the value 202106L in c++20"
+#  endif
+
+#  ifdef __cpp_lib_optional_range_support
+#    error "__cpp_lib_optional_range_support should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifdef __cpp_lib_constrained_equality
+#    error "__cpp_lib_constrained_equality should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_freestanding_optional
+#    error "__cpp_lib_freestanding_optional should not be defined before c++26"
+#  endif
+
+#  ifndef __cpp_lib_optional
+#    error "__cpp_lib_optional should be defined in c++23"
+#  endif
+#  if __cpp_lib_optional != 202110L
+#    error "__cpp_lib_optional should have the value 202110L in c++23"
+#  endif
+
+#  ifdef __cpp_lib_optional_range_support
+#    error "__cpp_lib_optional_range_support should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_constrained_equality
+#      error "__cpp_lib_constrained_equality should be defined in c++26"
+#    endif
+#    if __cpp_lib_constrained_equality != 202403L
+#      error "__cpp_lib_constrained_equality should have the value 202403L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_constrained_equality
+#      error "__cpp_lib_constrained_equality should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_freestanding_optional
+#      error "__cpp_lib_freestanding_optional should be defined in c++26"
+#    endif
+#    if __cpp_lib_freestanding_optional != 202311L
+#      error "__cpp_lib_freestanding_optional should have the value 202311L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_freestanding_optional
+#      error "__cpp_lib_freestanding_optional should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_optional
+#    error "__cpp_lib_optional should be defined in c++26"
+#  endif
+#  if __cpp_lib_optional != 202110L
+#    error "__cpp_lib_optional should have the value 202110L in c++26"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_optional_range_support
+#      error "__cpp_lib_optional_range_support should be defined in c++26"
+#    endif
+#    if __cpp_lib_optional_range_support != 202406L
+#      error "__cpp_lib_optional_range_support should have the value 202406L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_optional_range_support
+#      error "__cpp_lib_optional_range_support should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/ostream.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/ostream.version.compile.pass.cpp
new file mode 100644
index 0000000000000..acd9d53432259
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/ostream.version.compile.pass.cpp
@@ -0,0 +1,132 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// UNSUPPORTED: no-localization
+
+// <ostream>
+
+// Test the feature test macros defined by <ostream>
+
+// clang-format off
+
+#include <ostream>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_char8_t
+#    error "__cpp_lib_char8_t should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_print
+#    error "__cpp_lib_print should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_char8_t
+#    error "__cpp_lib_char8_t should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_print
+#    error "__cpp_lib_print should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_char8_t
+#    error "__cpp_lib_char8_t should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_print
+#    error "__cpp_lib_print should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  if defined(__cpp_char8_t)
+#    ifndef __cpp_lib_char8_t
+#      error "__cpp_lib_char8_t should be defined in c++20"
+#    endif
+#    if __cpp_lib_char8_t != 201907L
+#      error "__cpp_lib_char8_t should have the value 201907L in c++20"
+#    endif
+#  else
+#    ifdef __cpp_lib_char8_t
+#      error "__cpp_lib_char8_t should not be defined when the requirement 'defined(__cpp_char8_t)' is not met!"
+#    endif
+#  endif
+
+#  ifdef __cpp_lib_print
+#    error "__cpp_lib_print should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  if defined(__cpp_char8_t)
+#    ifndef __cpp_lib_char8_t
+#      error "__cpp_lib_char8_t should be defined in c++23"
+#    endif
+#    if __cpp_lib_char8_t != 201907L
+#      error "__cpp_lib_char8_t should have the value 201907L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_char8_t
+#      error "__cpp_lib_char8_t should not be defined when the requirement 'defined(__cpp_char8_t)' is not met!"
+#    endif
+#  endif
+
+#  if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT
+#    ifndef __cpp_lib_print
+#      error "__cpp_lib_print should be defined in c++23"
+#    endif
+#    if __cpp_lib_print != 202207L
+#      error "__cpp_lib_print should have the value 202207L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_print
+#      error "__cpp_lib_print should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT' is not met!"
+#    endif
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  if defined(__cpp_char8_t)
+#    ifndef __cpp_lib_char8_t
+#      error "__cpp_lib_char8_t should be defined in c++26"
+#    endif
+#    if __cpp_lib_char8_t != 201907L
+#      error "__cpp_lib_char8_t should have the value 201907L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_char8_t
+#      error "__cpp_lib_char8_t should not be defined when the requirement 'defined(__cpp_char8_t)' is not met!"
+#    endif
+#  endif
+
+#  if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT
+#    ifndef __cpp_lib_print
+#      error "__cpp_lib_print should be defined in c++26"
+#    endif
+#    if __cpp_lib_print != 202207L
+#      error "__cpp_lib_print should have the value 202207L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_print
+#      error "__cpp_lib_print should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT' is not met!"
+#    endif
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/print.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/print.version.compile.pass.cpp
new file mode 100644
index 0000000000000..2fba6d917930f
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/print.version.compile.pass.cpp
@@ -0,0 +1,81 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// UNSUPPORTED: no-filesystem
+
+// <print>
+
+// Test the feature test macros defined by <print>
+
+// clang-format off
+
+#include <print>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_print
+#    error "__cpp_lib_print should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_print
+#    error "__cpp_lib_print should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_print
+#    error "__cpp_lib_print should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifdef __cpp_lib_print
+#    error "__cpp_lib_print should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT
+#    ifndef __cpp_lib_print
+#      error "__cpp_lib_print should be defined in c++23"
+#    endif
+#    if __cpp_lib_print != 202207L
+#      error "__cpp_lib_print should have the value 202207L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_print
+#      error "__cpp_lib_print should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT' is not met!"
+#    endif
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT
+#    ifndef __cpp_lib_print
+#      error "__cpp_lib_print should be defined in c++26"
+#    endif
+#    if __cpp_lib_print != 202207L
+#      error "__cpp_lib_print should have the value 202207L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_print
+#      error "__cpp_lib_print should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT' is not met!"
+#    endif
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/queue.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/queue.version.compile.pass.cpp
new file mode 100644
index 0000000000000..df383f8277508
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/queue.version.compile.pass.cpp
@@ -0,0 +1,97 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <queue>
+
+// Test the feature test macros defined by <queue>
+
+// clang-format off
+
+#include <queue>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_adaptor_iterator_pair_constructor
+#    error "__cpp_lib_adaptor_iterator_pair_constructor should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_adaptor_iterator_pair_constructor
+#    error "__cpp_lib_adaptor_iterator_pair_constructor should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_adaptor_iterator_pair_constructor
+#    error "__cpp_lib_adaptor_iterator_pair_constructor should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifdef __cpp_lib_adaptor_iterator_pair_constructor
+#    error "__cpp_lib_adaptor_iterator_pair_constructor should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifndef __cpp_lib_adaptor_iterator_pair_constructor
+#    error "__cpp_lib_adaptor_iterator_pair_constructor should be defined in c++23"
+#  endif
+#  if __cpp_lib_adaptor_iterator_pair_constructor != 202106L
+#    error "__cpp_lib_adaptor_iterator_pair_constructor should have the value 202106L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should be defined in c++23"
+#  endif
+#  if __cpp_lib_containers_ranges != 202202L
+#    error "__cpp_lib_containers_ranges should have the value 202202L in c++23"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  ifndef __cpp_lib_adaptor_iterator_pair_constructor
+#    error "__cpp_lib_adaptor_iterator_pair_constructor should be defined in c++26"
+#  endif
+#  if __cpp_lib_adaptor_iterator_pair_constructor != 202106L
+#    error "__cpp_lib_adaptor_iterator_pair_constructor should have the value 202106L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should be defined in c++26"
+#  endif
+#  if __cpp_lib_containers_ranges != 202202L
+#    error "__cpp_lib_containers_ranges should have the value 202202L in c++26"
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/random.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/random.version.compile.pass.cpp
new file mode 100644
index 0000000000000..70086434d6a6c
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/random.version.compile.pass.cpp
@@ -0,0 +1,105 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <random>
+
+// Test the feature test macros defined by <random>
+
+// clang-format off
+
+#if __has_include(<random>)
+#  include <random>
+#endif
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_generate_random
+#    error "__cpp_lib_generate_random should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_philox_engine
+#    error "__cpp_lib_philox_engine should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_generate_random
+#    error "__cpp_lib_generate_random should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_philox_engine
+#    error "__cpp_lib_philox_engine should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_generate_random
+#    error "__cpp_lib_generate_random should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_philox_engine
+#    error "__cpp_lib_philox_engine should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifdef __cpp_lib_generate_random
+#    error "__cpp_lib_generate_random should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_philox_engine
+#    error "__cpp_lib_philox_engine should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifdef __cpp_lib_generate_random
+#    error "__cpp_lib_generate_random should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_philox_engine
+#    error "__cpp_lib_philox_engine should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_generate_random
+#      error "__cpp_lib_generate_random should be defined in c++26"
+#    endif
+#    if __cpp_lib_generate_random != 202403L
+#      error "__cpp_lib_generate_random should have the value 202403L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_generate_random
+#      error "__cpp_lib_generate_random should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_philox_engine
+#      error "__cpp_lib_philox_engine should be defined in c++26"
+#    endif
+#    if __cpp_lib_philox_engine != 202406L
+#      error "__cpp_lib_philox_engine should have the value 202406L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_philox_engine
+#      error "__cpp_lib_philox_engine should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/ranges.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/ranges.version.compile.pass.cpp
new file mode 100644
index 0000000000000..7b35d243f831b
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/ranges.version.compile.pass.cpp
@@ -0,0 +1,466 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <ranges>
+
+// Test the feature test macros defined by <ranges>
+
+// clang-format off
+
+#include <ranges>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_default_template_type_for_algorithm_values
+#    error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_ranges
+#    error "__cpp_lib_ranges should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_ranges_as_const
+#    error "__cpp_lib_ranges_as_const should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_ranges_as_rvalue
+#    error "__cpp_lib_ranges_as_rvalue should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_ranges_chunk
+#    error "__cpp_lib_ranges_chunk should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_ranges_chunk_by
+#    error "__cpp_lib_ranges_chunk_by should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_ranges_concat
+#    error "__cpp_lib_ranges_concat should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_ranges_join_with
+#    error "__cpp_lib_ranges_join_with should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_ranges_repeat
+#    error "__cpp_lib_ranges_repeat should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_ranges_slide
+#    error "__cpp_lib_ranges_slide should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_ranges_to_container
+#    error "__cpp_lib_ranges_to_container should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_ranges_zip
+#    error "__cpp_lib_ranges_zip should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_default_template_type_for_algorithm_values
+#    error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_ranges
+#    error "__cpp_lib_ranges should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_ranges_as_const
+#    error "__cpp_lib_ranges_as_const should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_ranges_as_rvalue
+#    error "__cpp_lib_ranges_as_rvalue should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_ranges_chunk
+#    error "__cpp_lib_ranges_chunk should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_ranges_chunk_by
+#    error "__cpp_lib_ranges_chunk_by should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_ranges_concat
+#    error "__cpp_lib_ranges_concat should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_ranges_join_with
+#    error "__cpp_lib_ranges_join_with should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_ranges_repeat
+#    error "__cpp_lib_ranges_repeat should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_ranges_slide
+#    error "__cpp_lib_ranges_slide should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_ranges_to_container
+#    error "__cpp_lib_ranges_to_container should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_ranges_zip
+#    error "__cpp_lib_ranges_zip should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_default_template_type_for_algorithm_values
+#    error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_ranges
+#    error "__cpp_lib_ranges should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_ranges_as_const
+#    error "__cpp_lib_ranges_as_const should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_ranges_as_rvalue
+#    error "__cpp_lib_ranges_as_rvalue should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_ranges_chunk
+#    error "__cpp_lib_ranges_chunk should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_ranges_chunk_by
+#    error "__cpp_lib_ranges_chunk_by should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_ranges_concat
+#    error "__cpp_lib_ranges_concat should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_ranges_join_with
+#    error "__cpp_lib_ranges_join_with should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_ranges_repeat
+#    error "__cpp_lib_ranges_repeat should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_ranges_slide
+#    error "__cpp_lib_ranges_slide should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_ranges_to_container
+#    error "__cpp_lib_ranges_to_container should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_ranges_zip
+#    error "__cpp_lib_ranges_zip should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifdef __cpp_lib_default_template_type_for_algorithm_values
+#    error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26"
+#  endif
+
+#  ifndef __cpp_lib_ranges
+#    error "__cpp_lib_ranges should be defined in c++20"
+#  endif
+#  if __cpp_lib_ranges != 202110L
+#    error "__cpp_lib_ranges should have the value 202110L in c++20"
+#  endif
+
+#  ifdef __cpp_lib_ranges_as_const
+#    error "__cpp_lib_ranges_as_const should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_ranges_as_rvalue
+#    error "__cpp_lib_ranges_as_rvalue should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_ranges_chunk
+#    error "__cpp_lib_ranges_chunk should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_ranges_chunk_by
+#    error "__cpp_lib_ranges_chunk_by should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_ranges_concat
+#    error "__cpp_lib_ranges_concat should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_ranges_join_with
+#    error "__cpp_lib_ranges_join_with should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_ranges_repeat
+#    error "__cpp_lib_ranges_repeat should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_ranges_slide
+#    error "__cpp_lib_ranges_slide should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_ranges_to_container
+#    error "__cpp_lib_ranges_to_container should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_ranges_zip
+#    error "__cpp_lib_ranges_zip should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifdef __cpp_lib_default_template_type_for_algorithm_values
+#    error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26"
+#  endif
+
+#  ifndef __cpp_lib_ranges
+#    error "__cpp_lib_ranges should be defined in c++23"
+#  endif
+#  if __cpp_lib_ranges != 202406L
+#    error "__cpp_lib_ranges should have the value 202406L in c++23"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_ranges_as_const
+#      error "__cpp_lib_ranges_as_const should be defined in c++23"
+#    endif
+#    if __cpp_lib_ranges_as_const != 202207L
+#      error "__cpp_lib_ranges_as_const should have the value 202207L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_ranges_as_const
+#      error "__cpp_lib_ranges_as_const should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_ranges_as_rvalue
+#    error "__cpp_lib_ranges_as_rvalue should be defined in c++23"
+#  endif
+#  if __cpp_lib_ranges_as_rvalue != 202207L
+#    error "__cpp_lib_ranges_as_rvalue should have the value 202207L in c++23"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_ranges_chunk
+#      error "__cpp_lib_ranges_chunk should be defined in c++23"
+#    endif
+#    if __cpp_lib_ranges_chunk != 202202L
+#      error "__cpp_lib_ranges_chunk should have the value 202202L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_ranges_chunk
+#      error "__cpp_lib_ranges_chunk should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_ranges_chunk_by
+#    error "__cpp_lib_ranges_chunk_by should be defined in c++23"
+#  endif
+#  if __cpp_lib_ranges_chunk_by != 202202L
+#    error "__cpp_lib_ranges_chunk_by should have the value 202202L in c++23"
+#  endif
+
+#  ifdef __cpp_lib_ranges_concat
+#    error "__cpp_lib_ranges_concat should not be defined before c++26"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_ranges_join_with
+#      error "__cpp_lib_ranges_join_with should be defined in c++23"
+#    endif
+#    if __cpp_lib_ranges_join_with != 202202L
+#      error "__cpp_lib_ranges_join_with should have the value 202202L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_ranges_join_with
+#      error "__cpp_lib_ranges_join_with should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_ranges_repeat
+#    error "__cpp_lib_ranges_repeat should be defined in c++23"
+#  endif
+#  if __cpp_lib_ranges_repeat != 202207L
+#    error "__cpp_lib_ranges_repeat should have the value 202207L in c++23"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_ranges_slide
+#      error "__cpp_lib_ranges_slide should be defined in c++23"
+#    endif
+#    if __cpp_lib_ranges_slide != 202202L
+#      error "__cpp_lib_ranges_slide should have the value 202202L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_ranges_slide
+#      error "__cpp_lib_ranges_slide should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_ranges_to_container
+#    error "__cpp_lib_ranges_to_container should be defined in c++23"
+#  endif
+#  if __cpp_lib_ranges_to_container != 202202L
+#    error "__cpp_lib_ranges_to_container should have the value 202202L in c++23"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_ranges_zip
+#      error "__cpp_lib_ranges_zip should be defined in c++23"
+#    endif
+#    if __cpp_lib_ranges_zip != 202110L
+#      error "__cpp_lib_ranges_zip should have the value 202110L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_ranges_zip
+#      error "__cpp_lib_ranges_zip should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_default_template_type_for_algorithm_values
+#      error "__cpp_lib_default_template_type_for_algorithm_values should be defined in c++26"
+#    endif
+#    if __cpp_lib_default_template_type_for_algorithm_values != 202403L
+#      error "__cpp_lib_default_template_type_for_algorithm_values should have the value 202403L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_default_template_type_for_algorithm_values
+#      error "__cpp_lib_default_template_type_for_algorithm_values 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++26"
+#  endif
+#  if __cpp_lib_ranges != 202406L
+#    error "__cpp_lib_ranges should have the value 202406L in c++26"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_ranges_as_const
+#      error "__cpp_lib_ranges_as_const should be defined in c++26"
+#    endif
+#    if __cpp_lib_ranges_as_const != 202207L
+#      error "__cpp_lib_ranges_as_const should have the value 202207L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_ranges_as_const
+#      error "__cpp_lib_ranges_as_const should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_ranges_as_rvalue
+#    error "__cpp_lib_ranges_as_rvalue should be defined in c++26"
+#  endif
+#  if __cpp_lib_ranges_as_rvalue != 202207L
+#    error "__cpp_lib_ranges_as_rvalue should have the value 202207L in c++26"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_ranges_chunk
+#      error "__cpp_lib_ranges_chunk should be defined in c++26"
+#    endif
+#    if __cpp_lib_ranges_chunk != 202202L
+#      error "__cpp_lib_ranges_chunk should have the value 202202L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_ranges_chunk
+#      error "__cpp_lib_ranges_chunk should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_ranges_chunk_by
+#    error "__cpp_lib_ranges_chunk_by should be defined in c++26"
+#  endif
+#  if __cpp_lib_ranges_chunk_by != 202202L
+#    error "__cpp_lib_ranges_chunk_by should have the value 202202L in c++26"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_ranges_concat
+#      error "__cpp_lib_ranges_concat should be defined in c++26"
+#    endif
+#    if __cpp_lib_ranges_concat != 202403L
+#      error "__cpp_lib_ranges_concat should have the value 202403L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_ranges_concat
+#      error "__cpp_lib_ranges_concat should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_ranges_join_with
+#      error "__cpp_lib_ranges_join_with should be defined in c++26"
+#    endif
+#    if __cpp_lib_ranges_join_with != 202202L
+#      error "__cpp_lib_ranges_join_with should have the value 202202L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_ranges_join_with
+#      error "__cpp_lib_ranges_join_with should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_ranges_repeat
+#    error "__cpp_lib_ranges_repeat should be defined in c++26"
+#  endif
+#  if __cpp_lib_ranges_repeat != 202207L
+#    error "__cpp_lib_ranges_repeat should have the value 202207L in c++26"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_ranges_slide
+#      error "__cpp_lib_ranges_slide should be defined in c++26"
+#    endif
+#    if __cpp_lib_ranges_slide != 202202L
+#      error "__cpp_lib_ranges_slide should have the value 202202L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_ranges_slide
+#      error "__cpp_lib_ranges_slide should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_ranges_to_container
+#    error "__cpp_lib_ranges_to_container should be defined in c++26"
+#  endif
+#  if __cpp_lib_ranges_to_container != 202202L
+#    error "__cpp_lib_ranges_to_container should have the value 202202L in c++26"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_ranges_zip
+#      error "__cpp_lib_ranges_zip should be defined in c++26"
+#    endif
+#    if __cpp_lib_ranges_zip != 202110L
+#      error "__cpp_lib_ranges_zip should have the value 202110L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_ranges_zip
+#      error "__cpp_lib_ranges_zip should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/ratio.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/ratio.version.compile.pass.cpp
new file mode 100644
index 0000000000000..5f1ce629a6f01
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/ratio.version.compile.pass.cpp
@@ -0,0 +1,64 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <ratio>
+
+// Test the feature test macros defined by <ratio>
+
+// clang-format off
+
+#include <ratio>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_ratio
+#    error "__cpp_lib_ratio should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_ratio
+#    error "__cpp_lib_ratio should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_ratio
+#    error "__cpp_lib_ratio should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifdef __cpp_lib_ratio
+#    error "__cpp_lib_ratio should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifdef __cpp_lib_ratio
+#    error "__cpp_lib_ratio should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  ifndef __cpp_lib_ratio
+#    error "__cpp_lib_ratio should be defined in c++26"
+#  endif
+#  if __cpp_lib_ratio != 202306L
+#    error "__cpp_lib_ratio should have the value 202306L in c++26"
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/rcu.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/rcu.version.compile.pass.cpp
new file mode 100644
index 0000000000000..28d6ff3c5bbd3
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/rcu.version.compile.pass.cpp
@@ -0,0 +1,72 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <rcu>
+
+// Test the feature test macros defined by <rcu>
+
+// clang-format off
+
+#if __has_include(<rcu>)
+#  include <rcu>
+#endif
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_rcu
+#    error "__cpp_lib_rcu should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_rcu
+#    error "__cpp_lib_rcu should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_rcu
+#    error "__cpp_lib_rcu should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifdef __cpp_lib_rcu
+#    error "__cpp_lib_rcu should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifdef __cpp_lib_rcu
+#    error "__cpp_lib_rcu should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_rcu
+#      error "__cpp_lib_rcu should be defined in c++26"
+#    endif
+#    if __cpp_lib_rcu != 202306L
+#      error "__cpp_lib_rcu should have the value 202306L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_rcu
+#      error "__cpp_lib_rcu should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/regex.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/regex.version.compile.pass.cpp
new file mode 100644
index 0000000000000..ef8115ea3b37a
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/regex.version.compile.pass.cpp
@@ -0,0 +1,75 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// UNSUPPORTED: no-localization
+
+// <regex>
+
+// Test the feature test macros defined by <regex>
+
+// clang-format off
+
+#include <regex>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should not be defined before c++17"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should not be defined before c++17"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifndef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should be defined in c++17"
+#  endif
+#  if __cpp_lib_nonmember_container_access != 201411L
+#    error "__cpp_lib_nonmember_container_access should have the value 201411L in c++17"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifndef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should be defined in c++20"
+#  endif
+#  if __cpp_lib_nonmember_container_access != 201411L
+#    error "__cpp_lib_nonmember_container_access should have the value 201411L in c++20"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifndef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should be defined in c++23"
+#  endif
+#  if __cpp_lib_nonmember_container_access != 201411L
+#    error "__cpp_lib_nonmember_container_access should have the value 201411L in c++23"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  ifndef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should be defined in c++26"
+#  endif
+#  if __cpp_lib_nonmember_container_access != 201411L
+#    error "__cpp_lib_nonmember_container_access should have the value 201411L in c++26"
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/scoped_allocator.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/scoped_allocator.version.compile.pass.cpp
new file mode 100644
index 0000000000000..c9d49703e88b3
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/scoped_allocator.version.compile.pass.cpp
@@ -0,0 +1,73 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <scoped_allocator>
+
+// Test the feature test macros defined by <scoped_allocator>
+
+// clang-format off
+
+#include <scoped_allocator>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should not be defined before c++17"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should not be defined before c++17"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifndef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++17"
+#  endif
+#  if __cpp_lib_allocator_traits_is_always_equal != 201411L
+#    error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++17"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifndef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++20"
+#  endif
+#  if __cpp_lib_allocator_traits_is_always_equal != 201411L
+#    error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++20"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifndef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++23"
+#  endif
+#  if __cpp_lib_allocator_traits_is_always_equal != 201411L
+#    error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++23"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  ifndef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++26"
+#  endif
+#  if __cpp_lib_allocator_traits_is_always_equal != 201411L
+#    error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++26"
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/semaphore.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/semaphore.version.compile.pass.cpp
new file mode 100644
index 0000000000000..dbf4be9c29c87
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/semaphore.version.compile.pass.cpp
@@ -0,0 +1,90 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// UNSUPPORTED: no-threads
+
+// <semaphore>
+
+// Test the feature test macros defined by <semaphore>
+
+// clang-format off
+
+#include <semaphore>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_semaphore
+#    error "__cpp_lib_semaphore should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_semaphore
+#    error "__cpp_lib_semaphore should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_semaphore
+#    error "__cpp_lib_semaphore should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)
+#    ifndef __cpp_lib_semaphore
+#      error "__cpp_lib_semaphore should be defined in c++20"
+#    endif
+#    if __cpp_lib_semaphore != 201907L
+#      error "__cpp_lib_semaphore should have the value 201907L in c++20"
+#    endif
+#  else
+#    ifdef __cpp_lib_semaphore
+#      error "__cpp_lib_semaphore should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)' is not met!"
+#    endif
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)
+#    ifndef __cpp_lib_semaphore
+#      error "__cpp_lib_semaphore should be defined in c++23"
+#    endif
+#    if __cpp_lib_semaphore != 201907L
+#      error "__cpp_lib_semaphore should have the value 201907L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_semaphore
+#      error "__cpp_lib_semaphore should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)' is not met!"
+#    endif
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)
+#    ifndef __cpp_lib_semaphore
+#      error "__cpp_lib_semaphore should be defined in c++26"
+#    endif
+#    if __cpp_lib_semaphore != 201907L
+#      error "__cpp_lib_semaphore should have the value 201907L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_semaphore
+#      error "__cpp_lib_semaphore should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)' is not met!"
+#    endif
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/set.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/set.version.compile.pass.cpp
new file mode 100644
index 0000000000000..d854aa4377a73
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/set.version.compile.pass.cpp
@@ -0,0 +1,322 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <set>
+
+// Test the feature test macros defined by <set>
+
+// clang-format off
+
+#include <set>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_associative_heterogeneous_erasure
+#    error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_associative_heterogeneous_insertion
+#    error "__cpp_lib_associative_heterogeneous_insertion should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_generic_associative_lookup
+#    error "__cpp_lib_generic_associative_lookup should not be defined before c++14"
+#  endif
+
+#  ifdef __cpp_lib_node_extract
+#    error "__cpp_lib_node_extract should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should not be defined before c++17"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_associative_heterogeneous_erasure
+#    error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_associative_heterogeneous_insertion
+#    error "__cpp_lib_associative_heterogeneous_insertion should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should not be defined before c++20"
+#  endif
+
+#  ifndef __cpp_lib_generic_associative_lookup
+#    error "__cpp_lib_generic_associative_lookup should be defined in c++14"
+#  endif
+#  if __cpp_lib_generic_associative_lookup != 201304L
+#    error "__cpp_lib_generic_associative_lookup should have the value 201304L in c++14"
+#  endif
+
+#  ifdef __cpp_lib_node_extract
+#    error "__cpp_lib_node_extract should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should not be defined before c++17"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifndef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++17"
+#  endif
+#  if __cpp_lib_allocator_traits_is_always_equal != 201411L
+#    error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++17"
+#  endif
+
+#  ifdef __cpp_lib_associative_heterogeneous_erasure
+#    error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_associative_heterogeneous_insertion
+#    error "__cpp_lib_associative_heterogeneous_insertion should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should not be defined before c++20"
+#  endif
+
+#  ifndef __cpp_lib_generic_associative_lookup
+#    error "__cpp_lib_generic_associative_lookup should be defined in c++17"
+#  endif
+#  if __cpp_lib_generic_associative_lookup != 201304L
+#    error "__cpp_lib_generic_associative_lookup should have the value 201304L in c++17"
+#  endif
+
+#  ifndef __cpp_lib_node_extract
+#    error "__cpp_lib_node_extract should be defined in c++17"
+#  endif
+#  if __cpp_lib_node_extract != 201606L
+#    error "__cpp_lib_node_extract should have the value 201606L in c++17"
+#  endif
+
+#  ifndef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should be defined in c++17"
+#  endif
+#  if __cpp_lib_nonmember_container_access != 201411L
+#    error "__cpp_lib_nonmember_container_access should have the value 201411L in c++17"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifndef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++20"
+#  endif
+#  if __cpp_lib_allocator_traits_is_always_equal != 201411L
+#    error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++20"
+#  endif
+
+#  ifdef __cpp_lib_associative_heterogeneous_erasure
+#    error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_associative_heterogeneous_insertion
+#    error "__cpp_lib_associative_heterogeneous_insertion should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should not be defined before c++23"
+#  endif
+
+#  ifndef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should be defined in c++20"
+#  endif
+#  if __cpp_lib_erase_if != 202002L
+#    error "__cpp_lib_erase_if should have the value 202002L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_generic_associative_lookup
+#    error "__cpp_lib_generic_associative_lookup should be defined in c++20"
+#  endif
+#  if __cpp_lib_generic_associative_lookup != 201304L
+#    error "__cpp_lib_generic_associative_lookup should have the value 201304L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_node_extract
+#    error "__cpp_lib_node_extract should be defined in c++20"
+#  endif
+#  if __cpp_lib_node_extract != 201606L
+#    error "__cpp_lib_node_extract should have the value 201606L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should be defined in c++20"
+#  endif
+#  if __cpp_lib_nonmember_container_access != 201411L
+#    error "__cpp_lib_nonmember_container_access should have the value 201411L in c++20"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifndef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++23"
+#  endif
+#  if __cpp_lib_allocator_traits_is_always_equal != 201411L
+#    error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++23"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_associative_heterogeneous_erasure
+#      error "__cpp_lib_associative_heterogeneous_erasure should be defined in c++23"
+#    endif
+#    if __cpp_lib_associative_heterogeneous_erasure != 202110L
+#      error "__cpp_lib_associative_heterogeneous_erasure should have the value 202110L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_associative_heterogeneous_erasure
+#      error "__cpp_lib_associative_heterogeneous_erasure should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifdef __cpp_lib_associative_heterogeneous_insertion
+#    error "__cpp_lib_associative_heterogeneous_insertion should not be defined before c++26"
+#  endif
+
+#  ifndef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should be defined in c++23"
+#  endif
+#  if __cpp_lib_containers_ranges != 202202L
+#    error "__cpp_lib_containers_ranges should have the value 202202L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should be defined in c++23"
+#  endif
+#  if __cpp_lib_erase_if != 202002L
+#    error "__cpp_lib_erase_if should have the value 202002L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_generic_associative_lookup
+#    error "__cpp_lib_generic_associative_lookup should be defined in c++23"
+#  endif
+#  if __cpp_lib_generic_associative_lookup != 201304L
+#    error "__cpp_lib_generic_associative_lookup should have the value 201304L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_node_extract
+#    error "__cpp_lib_node_extract should be defined in c++23"
+#  endif
+#  if __cpp_lib_node_extract != 201606L
+#    error "__cpp_lib_node_extract should have the value 201606L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should be defined in c++23"
+#  endif
+#  if __cpp_lib_nonmember_container_access != 201411L
+#    error "__cpp_lib_nonmember_container_access should have the value 201411L in c++23"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  ifndef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++26"
+#  endif
+#  if __cpp_lib_allocator_traits_is_always_equal != 201411L
+#    error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++26"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_associative_heterogeneous_erasure
+#      error "__cpp_lib_associative_heterogeneous_erasure should be defined in c++26"
+#    endif
+#    if __cpp_lib_associative_heterogeneous_erasure != 202110L
+#      error "__cpp_lib_associative_heterogeneous_erasure should have the value 202110L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_associative_heterogeneous_erasure
+#      error "__cpp_lib_associative_heterogeneous_erasure should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_associative_heterogeneous_insertion
+#      error "__cpp_lib_associative_heterogeneous_insertion should be defined in c++26"
+#    endif
+#    if __cpp_lib_associative_heterogeneous_insertion != 202306L
+#      error "__cpp_lib_associative_heterogeneous_insertion should have the value 202306L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_associative_heterogeneous_insertion
+#      error "__cpp_lib_associative_heterogeneous_insertion should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should be defined in c++26"
+#  endif
+#  if __cpp_lib_containers_ranges != 202202L
+#    error "__cpp_lib_containers_ranges should have the value 202202L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should be defined in c++26"
+#  endif
+#  if __cpp_lib_erase_if != 202002L
+#    error "__cpp_lib_erase_if should have the value 202002L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_generic_associative_lookup
+#    error "__cpp_lib_generic_associative_lookup should be defined in c++26"
+#  endif
+#  if __cpp_lib_generic_associative_lookup != 201304L
+#    error "__cpp_lib_generic_associative_lookup should have the value 201304L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_node_extract
+#    error "__cpp_lib_node_extract should be defined in c++26"
+#  endif
+#  if __cpp_lib_node_extract != 201606L
+#    error "__cpp_lib_node_extract should have the value 201606L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should be defined in c++26"
+#  endif
+#  if __cpp_lib_nonmember_container_access != 201411L
+#    error "__cpp_lib_nonmember_container_access should have the value 201411L in c++26"
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/shared_mutex.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/shared_mutex.version.compile.pass.cpp
new file mode 100644
index 0000000000000..9c0e3c2668ccb
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/shared_mutex.version.compile.pass.cpp
@@ -0,0 +1,168 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// UNSUPPORTED: no-threads
+
+// <shared_mutex>
+
+// Test the feature test macros defined by <shared_mutex>
+
+// clang-format off
+
+#include <shared_mutex>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_shared_mutex
+#    error "__cpp_lib_shared_mutex should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_shared_timed_mutex
+#    error "__cpp_lib_shared_timed_mutex should not be defined before c++14"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_shared_mutex
+#    error "__cpp_lib_shared_mutex should not be defined before c++17"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION) || _LIBCPP_HAS_THREADS
+#    ifndef __cpp_lib_shared_timed_mutex
+#      error "__cpp_lib_shared_timed_mutex should be defined in c++14"
+#    endif
+#    if __cpp_lib_shared_timed_mutex != 201402L
+#      error "__cpp_lib_shared_timed_mutex should have the value 201402L in c++14"
+#    endif
+#  else
+#    ifdef __cpp_lib_shared_timed_mutex
+#      error "__cpp_lib_shared_timed_mutex should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_HAS_THREADS' is not met!"
+#    endif
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  if !defined(_LIBCPP_VERSION) || _LIBCPP_HAS_THREADS
+#    ifndef __cpp_lib_shared_mutex
+#      error "__cpp_lib_shared_mutex should be defined in c++17"
+#    endif
+#    if __cpp_lib_shared_mutex != 201505L
+#      error "__cpp_lib_shared_mutex should have the value 201505L in c++17"
+#    endif
+#  else
+#    ifdef __cpp_lib_shared_mutex
+#      error "__cpp_lib_shared_mutex should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_HAS_THREADS' is not met!"
+#    endif
+#  endif
+
+#  if !defined(_LIBCPP_VERSION) || _LIBCPP_HAS_THREADS
+#    ifndef __cpp_lib_shared_timed_mutex
+#      error "__cpp_lib_shared_timed_mutex should be defined in c++17"
+#    endif
+#    if __cpp_lib_shared_timed_mutex != 201402L
+#      error "__cpp_lib_shared_timed_mutex should have the value 201402L in c++17"
+#    endif
+#  else
+#    ifdef __cpp_lib_shared_timed_mutex
+#      error "__cpp_lib_shared_timed_mutex should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_HAS_THREADS' is not met!"
+#    endif
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  if !defined(_LIBCPP_VERSION) || _LIBCPP_HAS_THREADS
+#    ifndef __cpp_lib_shared_mutex
+#      error "__cpp_lib_shared_mutex should be defined in c++20"
+#    endif
+#    if __cpp_lib_shared_mutex != 201505L
+#      error "__cpp_lib_shared_mutex should have the value 201505L in c++20"
+#    endif
+#  else
+#    ifdef __cpp_lib_shared_mutex
+#      error "__cpp_lib_shared_mutex should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_HAS_THREADS' is not met!"
+#    endif
+#  endif
+
+#  if !defined(_LIBCPP_VERSION) || _LIBCPP_HAS_THREADS
+#    ifndef __cpp_lib_shared_timed_mutex
+#      error "__cpp_lib_shared_timed_mutex should be defined in c++20"
+#    endif
+#    if __cpp_lib_shared_timed_mutex != 201402L
+#      error "__cpp_lib_shared_timed_mutex should have the value 201402L in c++20"
+#    endif
+#  else
+#    ifdef __cpp_lib_shared_timed_mutex
+#      error "__cpp_lib_shared_timed_mutex should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_HAS_THREADS' is not met!"
+#    endif
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  if !defined(_LIBCPP_VERSION) || _LIBCPP_HAS_THREADS
+#    ifndef __cpp_lib_shared_mutex
+#      error "__cpp_lib_shared_mutex should be defined in c++23"
+#    endif
+#    if __cpp_lib_shared_mutex != 201505L
+#      error "__cpp_lib_shared_mutex should have the value 201505L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_shared_mutex
+#      error "__cpp_lib_shared_mutex should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_HAS_THREADS' is not met!"
+#    endif
+#  endif
+
+#  if !defined(_LIBCPP_VERSION) || _LIBCPP_HAS_THREADS
+#    ifndef __cpp_lib_shared_timed_mutex
+#      error "__cpp_lib_shared_timed_mutex should be defined in c++23"
+#    endif
+#    if __cpp_lib_shared_timed_mutex != 201402L
+#      error "__cpp_lib_shared_timed_mutex should have the value 201402L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_shared_timed_mutex
+#      error "__cpp_lib_shared_timed_mutex should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_HAS_THREADS' is not met!"
+#    endif
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  if !defined(_LIBCPP_VERSION) || _LIBCPP_HAS_THREADS
+#    ifndef __cpp_lib_shared_mutex
+#      error "__cpp_lib_shared_mutex should be defined in c++26"
+#    endif
+#    if __cpp_lib_shared_mutex != 201505L
+#      error "__cpp_lib_shared_mutex should have the value 201505L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_shared_mutex
+#      error "__cpp_lib_shared_mutex should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_HAS_THREADS' is not met!"
+#    endif
+#  endif
+
+#  if !defined(_LIBCPP_VERSION) || _LIBCPP_HAS_THREADS
+#    ifndef __cpp_lib_shared_timed_mutex
+#      error "__cpp_lib_shared_timed_mutex should be defined in c++26"
+#    endif
+#    if __cpp_lib_shared_timed_mutex != 201402L
+#      error "__cpp_lib_shared_timed_mutex should have the value 201402L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_shared_timed_mutex
+#      error "__cpp_lib_shared_timed_mutex should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_HAS_THREADS' is not met!"
+#    endif
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/source_location.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/source_location.version.compile.pass.cpp
new file mode 100644
index 0000000000000..f2357afa755e7
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/source_location.version.compile.pass.cpp
@@ -0,0 +1,70 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <source_location>
+
+// Test the feature test macros defined by <source_location>
+
+// clang-format off
+
+#include <source_location>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_source_location
+#    error "__cpp_lib_source_location should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_source_location
+#    error "__cpp_lib_source_location should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_source_location
+#    error "__cpp_lib_source_location should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifndef __cpp_lib_source_location
+#    error "__cpp_lib_source_location should be defined in c++20"
+#  endif
+#  if __cpp_lib_source_location != 201907L
+#    error "__cpp_lib_source_location should have the value 201907L in c++20"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifndef __cpp_lib_source_location
+#    error "__cpp_lib_source_location should be defined in c++23"
+#  endif
+#  if __cpp_lib_source_location != 201907L
+#    error "__cpp_lib_source_location should have the value 201907L in c++23"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  ifndef __cpp_lib_source_location
+#    error "__cpp_lib_source_location should be defined in c++26"
+#  endif
+#  if __cpp_lib_source_location != 201907L
+#    error "__cpp_lib_source_location should have the value 201907L in c++26"
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/span.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/span.version.compile.pass.cpp
new file mode 100644
index 0000000000000..3e7af2055beba
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/span.version.compile.pass.cpp
@@ -0,0 +1,124 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <span>
+
+// Test the feature test macros defined by <span>
+
+// clang-format off
+
+#include <span>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_span
+#    error "__cpp_lib_span should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_span_at
+#    error "__cpp_lib_span_at should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_span_initializer_list
+#    error "__cpp_lib_span_initializer_list should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_span
+#    error "__cpp_lib_span should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_span_at
+#    error "__cpp_lib_span_at should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_span_initializer_list
+#    error "__cpp_lib_span_initializer_list should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_span
+#    error "__cpp_lib_span should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_span_at
+#    error "__cpp_lib_span_at should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_span_initializer_list
+#    error "__cpp_lib_span_initializer_list should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifndef __cpp_lib_span
+#    error "__cpp_lib_span should be defined in c++20"
+#  endif
+#  if __cpp_lib_span != 202002L
+#    error "__cpp_lib_span should have the value 202002L in c++20"
+#  endif
+
+#  ifdef __cpp_lib_span_at
+#    error "__cpp_lib_span_at should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_span_initializer_list
+#    error "__cpp_lib_span_initializer_list should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifndef __cpp_lib_span
+#    error "__cpp_lib_span should be defined in c++23"
+#  endif
+#  if __cpp_lib_span != 202002L
+#    error "__cpp_lib_span should have the value 202002L in c++23"
+#  endif
+
+#  ifdef __cpp_lib_span_at
+#    error "__cpp_lib_span_at should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_span_initializer_list
+#    error "__cpp_lib_span_initializer_list should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  ifndef __cpp_lib_span
+#    error "__cpp_lib_span should be defined in c++26"
+#  endif
+#  if __cpp_lib_span != 202002L
+#    error "__cpp_lib_span should have the value 202002L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_span_at
+#    error "__cpp_lib_span_at should be defined in c++26"
+#  endif
+#  if __cpp_lib_span_at != 202311L
+#    error "__cpp_lib_span_at should have the value 202311L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_span_initializer_list
+#    error "__cpp_lib_span_initializer_list should be defined in c++26"
+#  endif
+#  if __cpp_lib_span_initializer_list != 202311L
+#    error "__cpp_lib_span_initializer_list should have the value 202311L in c++26"
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/spanstream.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/spanstream.version.compile.pass.cpp
new file mode 100644
index 0000000000000..c04abd8013823
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/spanstream.version.compile.pass.cpp
@@ -0,0 +1,81 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <spanstream>
+
+// Test the feature test macros defined by <spanstream>
+
+// clang-format off
+
+#if __has_include(<spanstream>)
+#  include <spanstream>
+#endif
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_spanstream
+#    error "__cpp_lib_spanstream should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_spanstream
+#    error "__cpp_lib_spanstream should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_spanstream
+#    error "__cpp_lib_spanstream should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifdef __cpp_lib_spanstream
+#    error "__cpp_lib_spanstream should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_spanstream
+#      error "__cpp_lib_spanstream should be defined in c++23"
+#    endif
+#    if __cpp_lib_spanstream != 202106L
+#      error "__cpp_lib_spanstream should have the value 202106L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_spanstream
+#      error "__cpp_lib_spanstream should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_spanstream
+#      error "__cpp_lib_spanstream should be defined in c++26"
+#    endif
+#    if __cpp_lib_spanstream != 202106L
+#      error "__cpp_lib_spanstream should have the value 202106L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_spanstream
+#      error "__cpp_lib_spanstream should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/sstream.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/sstream.version.compile.pass.cpp
new file mode 100644
index 0000000000000..f8794d725ffe0
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/sstream.version.compile.pass.cpp
@@ -0,0 +1,66 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// UNSUPPORTED: no-localization
+
+// <sstream>
+
+// Test the feature test macros defined by <sstream>
+
+// clang-format off
+
+#include <sstream>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_sstream_from_string_view
+#    error "__cpp_lib_sstream_from_string_view should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_sstream_from_string_view
+#    error "__cpp_lib_sstream_from_string_view should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_sstream_from_string_view
+#    error "__cpp_lib_sstream_from_string_view should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifdef __cpp_lib_sstream_from_string_view
+#    error "__cpp_lib_sstream_from_string_view should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifdef __cpp_lib_sstream_from_string_view
+#    error "__cpp_lib_sstream_from_string_view should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  ifndef __cpp_lib_sstream_from_string_view
+#    error "__cpp_lib_sstream_from_string_view should be defined in c++26"
+#  endif
+#  if __cpp_lib_sstream_from_string_view != 202306L
+#    error "__cpp_lib_sstream_from_string_view should have the value 202306L in c++26"
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/stack.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/stack.version.compile.pass.cpp
new file mode 100644
index 0000000000000..295c1af54d45c
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/stack.version.compile.pass.cpp
@@ -0,0 +1,97 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <stack>
+
+// Test the feature test macros defined by <stack>
+
+// clang-format off
+
+#include <stack>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_adaptor_iterator_pair_constructor
+#    error "__cpp_lib_adaptor_iterator_pair_constructor should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_adaptor_iterator_pair_constructor
+#    error "__cpp_lib_adaptor_iterator_pair_constructor should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_adaptor_iterator_pair_constructor
+#    error "__cpp_lib_adaptor_iterator_pair_constructor should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifdef __cpp_lib_adaptor_iterator_pair_constructor
+#    error "__cpp_lib_adaptor_iterator_pair_constructor should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifndef __cpp_lib_adaptor_iterator_pair_constructor
+#    error "__cpp_lib_adaptor_iterator_pair_constructor should be defined in c++23"
+#  endif
+#  if __cpp_lib_adaptor_iterator_pair_constructor != 202106L
+#    error "__cpp_lib_adaptor_iterator_pair_constructor should have the value 202106L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should be defined in c++23"
+#  endif
+#  if __cpp_lib_containers_ranges != 202202L
+#    error "__cpp_lib_containers_ranges should have the value 202202L in c++23"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  ifndef __cpp_lib_adaptor_iterator_pair_constructor
+#    error "__cpp_lib_adaptor_iterator_pair_constructor should be defined in c++26"
+#  endif
+#  if __cpp_lib_adaptor_iterator_pair_constructor != 202106L
+#    error "__cpp_lib_adaptor_iterator_pair_constructor should have the value 202106L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should be defined in c++26"
+#  endif
+#  if __cpp_lib_containers_ranges != 202202L
+#    error "__cpp_lib_containers_ranges should have the value 202202L in c++26"
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/stacktrace.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/stacktrace.version.compile.pass.cpp
new file mode 100644
index 0000000000000..4e35a19a30e1d
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/stacktrace.version.compile.pass.cpp
@@ -0,0 +1,123 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <stacktrace>
+
+// Test the feature test macros defined by <stacktrace>
+
+// clang-format off
+
+#if __has_include(<stacktrace>)
+#  include <stacktrace>
+#endif
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_formatters
+#    error "__cpp_lib_formatters should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_stacktrace
+#    error "__cpp_lib_stacktrace should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_formatters
+#    error "__cpp_lib_formatters should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_stacktrace
+#    error "__cpp_lib_stacktrace should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_formatters
+#    error "__cpp_lib_formatters should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_stacktrace
+#    error "__cpp_lib_stacktrace should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifdef __cpp_lib_formatters
+#    error "__cpp_lib_formatters should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_stacktrace
+#    error "__cpp_lib_stacktrace should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_formatters
+#      error "__cpp_lib_formatters should be defined in c++23"
+#    endif
+#    if __cpp_lib_formatters != 202302L
+#      error "__cpp_lib_formatters should have the value 202302L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_formatters
+#      error "__cpp_lib_formatters should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_stacktrace
+#      error "__cpp_lib_stacktrace should be defined in c++23"
+#    endif
+#    if __cpp_lib_stacktrace != 202011L
+#      error "__cpp_lib_stacktrace should have the value 202011L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_stacktrace
+#      error "__cpp_lib_stacktrace should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_formatters
+#      error "__cpp_lib_formatters should be defined in c++26"
+#    endif
+#    if __cpp_lib_formatters != 202302L
+#      error "__cpp_lib_formatters should have the value 202302L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_formatters
+#      error "__cpp_lib_formatters should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_stacktrace
+#      error "__cpp_lib_stacktrace should be defined in c++26"
+#    endif
+#    if __cpp_lib_stacktrace != 202011L
+#      error "__cpp_lib_stacktrace should have the value 202011L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_stacktrace
+#      error "__cpp_lib_stacktrace should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/stdatomic.h.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/stdatomic.h.version.compile.pass.cpp
new file mode 100644
index 0000000000000..3e375b97486e3
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/stdatomic.h.version.compile.pass.cpp
@@ -0,0 +1,69 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// UNSUPPORTED: no-threads
+
+// <stdatomic.h>
+
+// Test the feature test macros defined by <stdatomic.h>
+
+// clang-format off
+
+#include <stdatomic.h>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_stdatomic_h
+#    error "__cpp_lib_stdatomic_h should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_stdatomic_h
+#    error "__cpp_lib_stdatomic_h should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_stdatomic_h
+#    error "__cpp_lib_stdatomic_h should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifdef __cpp_lib_stdatomic_h
+#    error "__cpp_lib_stdatomic_h should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifndef __cpp_lib_stdatomic_h
+#    error "__cpp_lib_stdatomic_h should be defined in c++23"
+#  endif
+#  if __cpp_lib_stdatomic_h != 202011L
+#    error "__cpp_lib_stdatomic_h should have the value 202011L in c++23"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  ifndef __cpp_lib_stdatomic_h
+#    error "__cpp_lib_stdatomic_h should be defined in c++26"
+#  endif
+#  if __cpp_lib_stdatomic_h != 202011L
+#    error "__cpp_lib_stdatomic_h should have the value 202011L in c++26"
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/stop_token.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/stop_token.version.compile.pass.cpp
new file mode 100644
index 0000000000000..d4f5d85f3fc86
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/stop_token.version.compile.pass.cpp
@@ -0,0 +1,90 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// UNSUPPORTED: no-threads
+
+// <stop_token>
+
+// Test the feature test macros defined by <stop_token>
+
+// clang-format off
+
+#include <stop_token>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_jthread
+#    error "__cpp_lib_jthread should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_jthread
+#    error "__cpp_lib_jthread should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_jthread
+#    error "__cpp_lib_jthread should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)
+#    ifndef __cpp_lib_jthread
+#      error "__cpp_lib_jthread should be defined in c++20"
+#    endif
+#    if __cpp_lib_jthread != 201911L
+#      error "__cpp_lib_jthread should have the value 201911L in c++20"
+#    endif
+#  else
+#    ifdef __cpp_lib_jthread
+#      error "__cpp_lib_jthread should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)' is not met!"
+#    endif
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)
+#    ifndef __cpp_lib_jthread
+#      error "__cpp_lib_jthread should be defined in c++23"
+#    endif
+#    if __cpp_lib_jthread != 201911L
+#      error "__cpp_lib_jthread should have the value 201911L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_jthread
+#      error "__cpp_lib_jthread should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)' is not met!"
+#    endif
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)
+#    ifndef __cpp_lib_jthread
+#      error "__cpp_lib_jthread should be defined in c++26"
+#    endif
+#    if __cpp_lib_jthread != 201911L
+#      error "__cpp_lib_jthread should have the value 201911L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_jthread
+#      error "__cpp_lib_jthread should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)' is not met!"
+#    endif
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/string.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/string.version.compile.pass.cpp
new file mode 100644
index 0000000000000..ef3a1179ddfc7
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/string.version.compile.pass.cpp
@@ -0,0 +1,490 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <string>
+
+// Test the feature test macros defined by <string>
+
+// clang-format off
+
+#include <string>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_char8_t
+#    error "__cpp_lib_char8_t should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_constexpr_string
+#    error "__cpp_lib_constexpr_string should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_default_template_type_for_algorithm_values
+#    error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_starts_ends_with
+#    error "__cpp_lib_starts_ends_with should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_string_contains
+#    error "__cpp_lib_string_contains should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_string_resize_and_overwrite
+#    error "__cpp_lib_string_resize_and_overwrite should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_string_udls
+#    error "__cpp_lib_string_udls should not be defined before c++14"
+#  endif
+
+#  ifdef __cpp_lib_string_view
+#    error "__cpp_lib_string_view should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_to_string
+#    error "__cpp_lib_to_string should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_char8_t
+#    error "__cpp_lib_char8_t should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_constexpr_string
+#    error "__cpp_lib_constexpr_string should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_default_template_type_for_algorithm_values
+#    error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_starts_ends_with
+#    error "__cpp_lib_starts_ends_with should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_string_contains
+#    error "__cpp_lib_string_contains should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_string_resize_and_overwrite
+#    error "__cpp_lib_string_resize_and_overwrite should not be defined before c++23"
+#  endif
+
+#  ifndef __cpp_lib_string_udls
+#    error "__cpp_lib_string_udls should be defined in c++14"
+#  endif
+#  if __cpp_lib_string_udls != 201304L
+#    error "__cpp_lib_string_udls should have the value 201304L in c++14"
+#  endif
+
+#  ifdef __cpp_lib_string_view
+#    error "__cpp_lib_string_view should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_to_string
+#    error "__cpp_lib_to_string should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifndef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++17"
+#  endif
+#  if __cpp_lib_allocator_traits_is_always_equal != 201411L
+#    error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++17"
+#  endif
+
+#  ifdef __cpp_lib_char8_t
+#    error "__cpp_lib_char8_t should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_constexpr_string
+#    error "__cpp_lib_constexpr_string should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_default_template_type_for_algorithm_values
+#    error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should not be defined before c++20"
+#  endif
+
+#  ifndef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should be defined in c++17"
+#  endif
+#  if __cpp_lib_nonmember_container_access != 201411L
+#    error "__cpp_lib_nonmember_container_access should have the value 201411L in c++17"
+#  endif
+
+#  ifdef __cpp_lib_starts_ends_with
+#    error "__cpp_lib_starts_ends_with should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_string_contains
+#    error "__cpp_lib_string_contains should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_string_resize_and_overwrite
+#    error "__cpp_lib_string_resize_and_overwrite should not be defined before c++23"
+#  endif
+
+#  ifndef __cpp_lib_string_udls
+#    error "__cpp_lib_string_udls should be defined in c++17"
+#  endif
+#  if __cpp_lib_string_udls != 201304L
+#    error "__cpp_lib_string_udls should have the value 201304L in c++17"
+#  endif
+
+#  ifndef __cpp_lib_string_view
+#    error "__cpp_lib_string_view should be defined in c++17"
+#  endif
+#  if __cpp_lib_string_view != 201606L
+#    error "__cpp_lib_string_view should have the value 201606L in c++17"
+#  endif
+
+#  ifdef __cpp_lib_to_string
+#    error "__cpp_lib_to_string should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifndef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++20"
+#  endif
+#  if __cpp_lib_allocator_traits_is_always_equal != 201411L
+#    error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++20"
+#  endif
+
+#  if defined(__cpp_char8_t)
+#    ifndef __cpp_lib_char8_t
+#      error "__cpp_lib_char8_t should be defined in c++20"
+#    endif
+#    if __cpp_lib_char8_t != 201907L
+#      error "__cpp_lib_char8_t should have the value 201907L in c++20"
+#    endif
+#  else
+#    ifdef __cpp_lib_char8_t
+#      error "__cpp_lib_char8_t should not be defined when the requirement 'defined(__cpp_char8_t)' is not met!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_constexpr_string
+#    error "__cpp_lib_constexpr_string should be defined in c++20"
+#  endif
+#  if __cpp_lib_constexpr_string != 201907L
+#    error "__cpp_lib_constexpr_string should have the value 201907L in c++20"
+#  endif
+
+#  ifdef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_default_template_type_for_algorithm_values
+#    error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26"
+#  endif
+
+#  ifndef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should be defined in c++20"
+#  endif
+#  if __cpp_lib_erase_if != 202002L
+#    error "__cpp_lib_erase_if should have the value 202002L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should be defined in c++20"
+#  endif
+#  if __cpp_lib_nonmember_container_access != 201411L
+#    error "__cpp_lib_nonmember_container_access should have the value 201411L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_starts_ends_with
+#    error "__cpp_lib_starts_ends_with should be defined in c++20"
+#  endif
+#  if __cpp_lib_starts_ends_with != 201711L
+#    error "__cpp_lib_starts_ends_with should have the value 201711L in c++20"
+#  endif
+
+#  ifdef __cpp_lib_string_contains
+#    error "__cpp_lib_string_contains should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_string_resize_and_overwrite
+#    error "__cpp_lib_string_resize_and_overwrite should not be defined before c++23"
+#  endif
+
+#  ifndef __cpp_lib_string_udls
+#    error "__cpp_lib_string_udls should be defined in c++20"
+#  endif
+#  if __cpp_lib_string_udls != 201304L
+#    error "__cpp_lib_string_udls should have the value 201304L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_string_view
+#    error "__cpp_lib_string_view should be defined in c++20"
+#  endif
+#  if __cpp_lib_string_view != 201803L
+#    error "__cpp_lib_string_view should have the value 201803L in c++20"
+#  endif
+
+#  ifdef __cpp_lib_to_string
+#    error "__cpp_lib_to_string should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifndef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++23"
+#  endif
+#  if __cpp_lib_allocator_traits_is_always_equal != 201411L
+#    error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++23"
+#  endif
+
+#  if defined(__cpp_char8_t)
+#    ifndef __cpp_lib_char8_t
+#      error "__cpp_lib_char8_t should be defined in c++23"
+#    endif
+#    if __cpp_lib_char8_t != 201907L
+#      error "__cpp_lib_char8_t should have the value 201907L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_char8_t
+#      error "__cpp_lib_char8_t should not be defined when the requirement 'defined(__cpp_char8_t)' is not met!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_constexpr_string
+#    error "__cpp_lib_constexpr_string should be defined in c++23"
+#  endif
+#  if __cpp_lib_constexpr_string != 201907L
+#    error "__cpp_lib_constexpr_string should have the value 201907L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should be defined in c++23"
+#  endif
+#  if __cpp_lib_containers_ranges != 202202L
+#    error "__cpp_lib_containers_ranges should have the value 202202L in c++23"
+#  endif
+
+#  ifdef __cpp_lib_default_template_type_for_algorithm_values
+#    error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26"
+#  endif
+
+#  ifndef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should be defined in c++23"
+#  endif
+#  if __cpp_lib_erase_if != 202002L
+#    error "__cpp_lib_erase_if should have the value 202002L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should be defined in c++23"
+#  endif
+#  if __cpp_lib_nonmember_container_access != 201411L
+#    error "__cpp_lib_nonmember_container_access should have the value 201411L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_starts_ends_with
+#    error "__cpp_lib_starts_ends_with should be defined in c++23"
+#  endif
+#  if __cpp_lib_starts_ends_with != 201711L
+#    error "__cpp_lib_starts_ends_with should have the value 201711L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_string_contains
+#    error "__cpp_lib_string_contains should be defined in c++23"
+#  endif
+#  if __cpp_lib_string_contains != 202011L
+#    error "__cpp_lib_string_contains should have the value 202011L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_string_resize_and_overwrite
+#    error "__cpp_lib_string_resize_and_overwrite should be defined in c++23"
+#  endif
+#  if __cpp_lib_string_resize_and_overwrite != 202110L
+#    error "__cpp_lib_string_resize_and_overwrite should have the value 202110L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_string_udls
+#    error "__cpp_lib_string_udls should be defined in c++23"
+#  endif
+#  if __cpp_lib_string_udls != 201304L
+#    error "__cpp_lib_string_udls should have the value 201304L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_string_view
+#    error "__cpp_lib_string_view should be defined in c++23"
+#  endif
+#  if __cpp_lib_string_view != 201803L
+#    error "__cpp_lib_string_view should have the value 201803L in c++23"
+#  endif
+
+#  ifdef __cpp_lib_to_string
+#    error "__cpp_lib_to_string should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  ifndef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++26"
+#  endif
+#  if __cpp_lib_allocator_traits_is_always_equal != 201411L
+#    error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++26"
+#  endif
+
+#  if defined(__cpp_char8_t)
+#    ifndef __cpp_lib_char8_t
+#      error "__cpp_lib_char8_t should be defined in c++26"
+#    endif
+#    if __cpp_lib_char8_t != 201907L
+#      error "__cpp_lib_char8_t should have the value 201907L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_char8_t
+#      error "__cpp_lib_char8_t should not be defined when the requirement 'defined(__cpp_char8_t)' is not met!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_constexpr_string
+#    error "__cpp_lib_constexpr_string should be defined in c++26"
+#  endif
+#  if __cpp_lib_constexpr_string != 201907L
+#    error "__cpp_lib_constexpr_string should have the value 201907L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should be defined in c++26"
+#  endif
+#  if __cpp_lib_containers_ranges != 202202L
+#    error "__cpp_lib_containers_ranges should have the value 202202L in c++26"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_default_template_type_for_algorithm_values
+#      error "__cpp_lib_default_template_type_for_algorithm_values should be defined in c++26"
+#    endif
+#    if __cpp_lib_default_template_type_for_algorithm_values != 202403L
+#      error "__cpp_lib_default_template_type_for_algorithm_values should have the value 202403L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_default_template_type_for_algorithm_values
+#      error "__cpp_lib_default_template_type_for_algorithm_values should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should be defined in c++26"
+#  endif
+#  if __cpp_lib_erase_if != 202002L
+#    error "__cpp_lib_erase_if should have the value 202002L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should be defined in c++26"
+#  endif
+#  if __cpp_lib_nonmember_container_access != 201411L
+#    error "__cpp_lib_nonmember_container_access should have the value 201411L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_starts_ends_with
+#    error "__cpp_lib_starts_ends_with should be defined in c++26"
+#  endif
+#  if __cpp_lib_starts_ends_with != 201711L
+#    error "__cpp_lib_starts_ends_with should have the value 201711L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_string_contains
+#    error "__cpp_lib_string_contains should be defined in c++26"
+#  endif
+#  if __cpp_lib_string_contains != 202011L
+#    error "__cpp_lib_string_contains should have the value 202011L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_string_resize_and_overwrite
+#    error "__cpp_lib_string_resize_and_overwrite should be defined in c++26"
+#  endif
+#  if __cpp_lib_string_resize_and_overwrite != 202110L
+#    error "__cpp_lib_string_resize_and_overwrite should have the value 202110L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_string_udls
+#    error "__cpp_lib_string_udls should be defined in c++26"
+#  endif
+#  if __cpp_lib_string_udls != 201304L
+#    error "__cpp_lib_string_udls should have the value 201304L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_string_view
+#    error "__cpp_lib_string_view should be defined in c++26"
+#  endif
+#  if __cpp_lib_string_view != 202403L
+#    error "__cpp_lib_string_view should have the value 202403L in c++26"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_to_string
+#      error "__cpp_lib_to_string should be defined in c++26"
+#    endif
+#    if __cpp_lib_to_string != 202306L
+#      error "__cpp_lib_to_string should have the value 202306L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_to_string
+#      error "__cpp_lib_to_string should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/string_view.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/string_view.version.compile.pass.cpp
new file mode 100644
index 0000000000000..86f14fd26c3e3
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/string_view.version.compile.pass.cpp
@@ -0,0 +1,253 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <string_view>
+
+// Test the feature test macros defined by <string_view>
+
+// clang-format off
+
+#include <string_view>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_char8_t
+#    error "__cpp_lib_char8_t should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_constexpr_string_view
+#    error "__cpp_lib_constexpr_string_view should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_freestanding_string_view
+#    error "__cpp_lib_freestanding_string_view should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_starts_ends_with
+#    error "__cpp_lib_starts_ends_with should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_string_contains
+#    error "__cpp_lib_string_contains should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_string_view
+#    error "__cpp_lib_string_view should not be defined before c++17"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_char8_t
+#    error "__cpp_lib_char8_t should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_constexpr_string_view
+#    error "__cpp_lib_constexpr_string_view should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_freestanding_string_view
+#    error "__cpp_lib_freestanding_string_view should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_starts_ends_with
+#    error "__cpp_lib_starts_ends_with should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_string_contains
+#    error "__cpp_lib_string_contains should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_string_view
+#    error "__cpp_lib_string_view should not be defined before c++17"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_char8_t
+#    error "__cpp_lib_char8_t should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_constexpr_string_view
+#    error "__cpp_lib_constexpr_string_view should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_freestanding_string_view
+#    error "__cpp_lib_freestanding_string_view should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_starts_ends_with
+#    error "__cpp_lib_starts_ends_with should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_string_contains
+#    error "__cpp_lib_string_contains should not be defined before c++23"
+#  endif
+
+#  ifndef __cpp_lib_string_view
+#    error "__cpp_lib_string_view should be defined in c++17"
+#  endif
+#  if __cpp_lib_string_view != 201606L
+#    error "__cpp_lib_string_view should have the value 201606L in c++17"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  if defined(__cpp_char8_t)
+#    ifndef __cpp_lib_char8_t
+#      error "__cpp_lib_char8_t should be defined in c++20"
+#    endif
+#    if __cpp_lib_char8_t != 201907L
+#      error "__cpp_lib_char8_t should have the value 201907L in c++20"
+#    endif
+#  else
+#    ifdef __cpp_lib_char8_t
+#      error "__cpp_lib_char8_t should not be defined when the requirement 'defined(__cpp_char8_t)' is not met!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_constexpr_string_view
+#    error "__cpp_lib_constexpr_string_view should be defined in c++20"
+#  endif
+#  if __cpp_lib_constexpr_string_view != 201811L
+#    error "__cpp_lib_constexpr_string_view should have the value 201811L in c++20"
+#  endif
+
+#  ifdef __cpp_lib_freestanding_string_view
+#    error "__cpp_lib_freestanding_string_view should not be defined before c++26"
+#  endif
+
+#  ifndef __cpp_lib_starts_ends_with
+#    error "__cpp_lib_starts_ends_with should be defined in c++20"
+#  endif
+#  if __cpp_lib_starts_ends_with != 201711L
+#    error "__cpp_lib_starts_ends_with should have the value 201711L in c++20"
+#  endif
+
+#  ifdef __cpp_lib_string_contains
+#    error "__cpp_lib_string_contains should not be defined before c++23"
+#  endif
+
+#  ifndef __cpp_lib_string_view
+#    error "__cpp_lib_string_view should be defined in c++20"
+#  endif
+#  if __cpp_lib_string_view != 201803L
+#    error "__cpp_lib_string_view should have the value 201803L in c++20"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  if defined(__cpp_char8_t)
+#    ifndef __cpp_lib_char8_t
+#      error "__cpp_lib_char8_t should be defined in c++23"
+#    endif
+#    if __cpp_lib_char8_t != 201907L
+#      error "__cpp_lib_char8_t should have the value 201907L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_char8_t
+#      error "__cpp_lib_char8_t should not be defined when the requirement 'defined(__cpp_char8_t)' is not met!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_constexpr_string_view
+#    error "__cpp_lib_constexpr_string_view should be defined in c++23"
+#  endif
+#  if __cpp_lib_constexpr_string_view != 201811L
+#    error "__cpp_lib_constexpr_string_view should have the value 201811L in c++23"
+#  endif
+
+#  ifdef __cpp_lib_freestanding_string_view
+#    error "__cpp_lib_freestanding_string_view should not be defined before c++26"
+#  endif
+
+#  ifndef __cpp_lib_starts_ends_with
+#    error "__cpp_lib_starts_ends_with should be defined in c++23"
+#  endif
+#  if __cpp_lib_starts_ends_with != 201711L
+#    error "__cpp_lib_starts_ends_with should have the value 201711L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_string_contains
+#    error "__cpp_lib_string_contains should be defined in c++23"
+#  endif
+#  if __cpp_lib_string_contains != 202011L
+#    error "__cpp_lib_string_contains should have the value 202011L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_string_view
+#    error "__cpp_lib_string_view should be defined in c++23"
+#  endif
+#  if __cpp_lib_string_view != 201803L
+#    error "__cpp_lib_string_view should have the value 201803L in c++23"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  if defined(__cpp_char8_t)
+#    ifndef __cpp_lib_char8_t
+#      error "__cpp_lib_char8_t should be defined in c++26"
+#    endif
+#    if __cpp_lib_char8_t != 201907L
+#      error "__cpp_lib_char8_t should have the value 201907L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_char8_t
+#      error "__cpp_lib_char8_t should not be defined when the requirement 'defined(__cpp_char8_t)' is not met!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_constexpr_string_view
+#    error "__cpp_lib_constexpr_string_view should be defined in c++26"
+#  endif
+#  if __cpp_lib_constexpr_string_view != 201811L
+#    error "__cpp_lib_constexpr_string_view should have the value 201811L in c++26"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_freestanding_string_view
+#      error "__cpp_lib_freestanding_string_view should be defined in c++26"
+#    endif
+#    if __cpp_lib_freestanding_string_view != 202311L
+#      error "__cpp_lib_freestanding_string_view should have the value 202311L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_freestanding_string_view
+#      error "__cpp_lib_freestanding_string_view should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_starts_ends_with
+#    error "__cpp_lib_starts_ends_with should be defined in c++26"
+#  endif
+#  if __cpp_lib_starts_ends_with != 201711L
+#    error "__cpp_lib_starts_ends_with should have the value 201711L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_string_contains
+#    error "__cpp_lib_string_contains should be defined in c++26"
+#  endif
+#  if __cpp_lib_string_contains != 202011L
+#    error "__cpp_lib_string_contains should have the value 202011L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_string_view
+#    error "__cpp_lib_string_view should be defined in c++26"
+#  endif
+#  if __cpp_lib_string_view != 202403L
+#    error "__cpp_lib_string_view should have the value 202403L in c++26"
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/syncstream.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/syncstream.version.compile.pass.cpp
new file mode 100644
index 0000000000000..0bc809344050e
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/syncstream.version.compile.pass.cpp
@@ -0,0 +1,90 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// UNSUPPORTED: no-localization
+
+// <syncstream>
+
+// Test the feature test macros defined by <syncstream>
+
+// clang-format off
+
+#include <syncstream>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_syncbuf
+#    error "__cpp_lib_syncbuf should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_syncbuf
+#    error "__cpp_lib_syncbuf should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_syncbuf
+#    error "__cpp_lib_syncbuf should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  if !defined(_LIBCPP_VERSION) || _LIBCPP_HAS_EXPERIMENTAL_SYNCSTREAM
+#    ifndef __cpp_lib_syncbuf
+#      error "__cpp_lib_syncbuf should be defined in c++20"
+#    endif
+#    if __cpp_lib_syncbuf != 201803L
+#      error "__cpp_lib_syncbuf should have the value 201803L in c++20"
+#    endif
+#  else
+#    ifdef __cpp_lib_syncbuf
+#      error "__cpp_lib_syncbuf should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_HAS_EXPERIMENTAL_SYNCSTREAM' is not met!"
+#    endif
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  if !defined(_LIBCPP_VERSION) || _LIBCPP_HAS_EXPERIMENTAL_SYNCSTREAM
+#    ifndef __cpp_lib_syncbuf
+#      error "__cpp_lib_syncbuf should be defined in c++23"
+#    endif
+#    if __cpp_lib_syncbuf != 201803L
+#      error "__cpp_lib_syncbuf should have the value 201803L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_syncbuf
+#      error "__cpp_lib_syncbuf should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_HAS_EXPERIMENTAL_SYNCSTREAM' is not met!"
+#    endif
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  if !defined(_LIBCPP_VERSION) || _LIBCPP_HAS_EXPERIMENTAL_SYNCSTREAM
+#    ifndef __cpp_lib_syncbuf
+#      error "__cpp_lib_syncbuf should be defined in c++26"
+#    endif
+#    if __cpp_lib_syncbuf != 201803L
+#      error "__cpp_lib_syncbuf should have the value 201803L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_syncbuf
+#      error "__cpp_lib_syncbuf should not be defined when the requirement '!defined(_LIBCPP_VERSION) || _LIBCPP_HAS_EXPERIMENTAL_SYNCSTREAM' is not met!"
+#    endif
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/text_encoding.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/text_encoding.version.compile.pass.cpp
new file mode 100644
index 0000000000000..24582ff0cad79
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/text_encoding.version.compile.pass.cpp
@@ -0,0 +1,72 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <text_encoding>
+
+// Test the feature test macros defined by <text_encoding>
+
+// clang-format off
+
+#if __has_include(<text_encoding>)
+#  include <text_encoding>
+#endif
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_text_encoding
+#    error "__cpp_lib_text_encoding should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_text_encoding
+#    error "__cpp_lib_text_encoding should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_text_encoding
+#    error "__cpp_lib_text_encoding should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifdef __cpp_lib_text_encoding
+#    error "__cpp_lib_text_encoding should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifdef __cpp_lib_text_encoding
+#    error "__cpp_lib_text_encoding should not be defined before c++26"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_text_encoding
+#      error "__cpp_lib_text_encoding should be defined in c++26"
+#    endif
+#    if __cpp_lib_text_encoding != 202306L
+#      error "__cpp_lib_text_encoding should have the value 202306L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_text_encoding
+#      error "__cpp_lib_text_encoding should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/thread.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/thread.version.compile.pass.cpp
new file mode 100644
index 0000000000000..8d8a760d4c7c6
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/thread.version.compile.pass.cpp
@@ -0,0 +1,132 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// UNSUPPORTED: no-threads
+
+// <thread>
+
+// Test the feature test macros defined by <thread>
+
+// clang-format off
+
+#include <thread>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_formatters
+#    error "__cpp_lib_formatters should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_jthread
+#    error "__cpp_lib_jthread should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_formatters
+#    error "__cpp_lib_formatters should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_jthread
+#    error "__cpp_lib_jthread should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_formatters
+#    error "__cpp_lib_formatters should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_jthread
+#    error "__cpp_lib_jthread should not be defined before c++20"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifdef __cpp_lib_formatters
+#    error "__cpp_lib_formatters should not be defined before c++23"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)
+#    ifndef __cpp_lib_jthread
+#      error "__cpp_lib_jthread should be defined in c++20"
+#    endif
+#    if __cpp_lib_jthread != 201911L
+#      error "__cpp_lib_jthread should have the value 201911L in c++20"
+#    endif
+#  else
+#    ifdef __cpp_lib_jthread
+#      error "__cpp_lib_jthread should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)' is not met!"
+#    endif
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_formatters
+#      error "__cpp_lib_formatters should be defined in c++23"
+#    endif
+#    if __cpp_lib_formatters != 202302L
+#      error "__cpp_lib_formatters should have the value 202302L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_formatters
+#      error "__cpp_lib_formatters should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)
+#    ifndef __cpp_lib_jthread
+#      error "__cpp_lib_jthread should be defined in c++23"
+#    endif
+#    if __cpp_lib_jthread != 201911L
+#      error "__cpp_lib_jthread should have the value 201911L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_jthread
+#      error "__cpp_lib_jthread should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)' is not met!"
+#    endif
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_formatters
+#      error "__cpp_lib_formatters should be defined in c++26"
+#    endif
+#    if __cpp_lib_formatters != 202302L
+#      error "__cpp_lib_formatters should have the value 202302L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_formatters
+#      error "__cpp_lib_formatters should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  if !defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)
+#    ifndef __cpp_lib_jthread
+#      error "__cpp_lib_jthread should be defined in c++26"
+#    endif
+#    if __cpp_lib_jthread != 201911L
+#      error "__cpp_lib_jthread should have the value 201911L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_jthread
+#      error "__cpp_lib_jthread should not be defined when the requirement '!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)' is not met!"
+#    endif
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/tuple.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/tuple.version.compile.pass.cpp
new file mode 100644
index 0000000000000..c61a1914d2d42
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/tuple.version.compile.pass.cpp
@@ -0,0 +1,337 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <tuple>
+
+// Test the feature test macros defined by <tuple>
+
+// clang-format off
+
+#include <tuple>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_apply
+#    error "__cpp_lib_apply should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_constexpr_tuple
+#    error "__cpp_lib_constexpr_tuple should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_constrained_equality
+#    error "__cpp_lib_constrained_equality should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_make_from_tuple
+#    error "__cpp_lib_make_from_tuple should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_ranges_zip
+#    error "__cpp_lib_ranges_zip should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_tuple_element_t
+#    error "__cpp_lib_tuple_element_t should not be defined before c++14"
+#  endif
+
+#  ifdef __cpp_lib_tuple_like
+#    error "__cpp_lib_tuple_like should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_tuples_by_type
+#    error "__cpp_lib_tuples_by_type should not be defined before c++14"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_apply
+#    error "__cpp_lib_apply should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_constexpr_tuple
+#    error "__cpp_lib_constexpr_tuple should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_constrained_equality
+#    error "__cpp_lib_constrained_equality should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_make_from_tuple
+#    error "__cpp_lib_make_from_tuple should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_ranges_zip
+#    error "__cpp_lib_ranges_zip should not be defined before c++23"
+#  endif
+
+#  ifndef __cpp_lib_tuple_element_t
+#    error "__cpp_lib_tuple_element_t should be defined in c++14"
+#  endif
+#  if __cpp_lib_tuple_element_t != 201402L
+#    error "__cpp_lib_tuple_element_t should have the value 201402L in c++14"
+#  endif
+
+#  ifdef __cpp_lib_tuple_like
+#    error "__cpp_lib_tuple_like should not be defined before c++23"
+#  endif
+
+#  ifndef __cpp_lib_tuples_by_type
+#    error "__cpp_lib_tuples_by_type should be defined in c++14"
+#  endif
+#  if __cpp_lib_tuples_by_type != 201304L
+#    error "__cpp_lib_tuples_by_type should have the value 201304L in c++14"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifndef __cpp_lib_apply
+#    error "__cpp_lib_apply should be defined in c++17"
+#  endif
+#  if __cpp_lib_apply != 201603L
+#    error "__cpp_lib_apply should have the value 201603L in c++17"
+#  endif
+
+#  ifdef __cpp_lib_constexpr_tuple
+#    error "__cpp_lib_constexpr_tuple should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_constrained_equality
+#    error "__cpp_lib_constrained_equality should not be defined before c++26"
+#  endif
+
+#  ifndef __cpp_lib_make_from_tuple
+#    error "__cpp_lib_make_from_tuple should be defined in c++17"
+#  endif
+#  if __cpp_lib_make_from_tuple != 201606L
+#    error "__cpp_lib_make_from_tuple should have the value 201606L in c++17"
+#  endif
+
+#  ifdef __cpp_lib_ranges_zip
+#    error "__cpp_lib_ranges_zip should not be defined before c++23"
+#  endif
+
+#  ifndef __cpp_lib_tuple_element_t
+#    error "__cpp_lib_tuple_element_t should be defined in c++17"
+#  endif
+#  if __cpp_lib_tuple_element_t != 201402L
+#    error "__cpp_lib_tuple_element_t should have the value 201402L in c++17"
+#  endif
+
+#  ifdef __cpp_lib_tuple_like
+#    error "__cpp_lib_tuple_like should not be defined before c++23"
+#  endif
+
+#  ifndef __cpp_lib_tuples_by_type
+#    error "__cpp_lib_tuples_by_type should be defined in c++17"
+#  endif
+#  if __cpp_lib_tuples_by_type != 201304L
+#    error "__cpp_lib_tuples_by_type should have the value 201304L in c++17"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifndef __cpp_lib_apply
+#    error "__cpp_lib_apply should be defined in c++20"
+#  endif
+#  if __cpp_lib_apply != 201603L
+#    error "__cpp_lib_apply should have the value 201603L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_constexpr_tuple
+#    error "__cpp_lib_constexpr_tuple should be defined in c++20"
+#  endif
+#  if __cpp_lib_constexpr_tuple != 201811L
+#    error "__cpp_lib_constexpr_tuple should have the value 201811L in c++20"
+#  endif
+
+#  ifdef __cpp_lib_constrained_equality
+#    error "__cpp_lib_constrained_equality should not be defined before c++26"
+#  endif
+
+#  ifndef __cpp_lib_make_from_tuple
+#    error "__cpp_lib_make_from_tuple should be defined in c++20"
+#  endif
+#  if __cpp_lib_make_from_tuple != 201606L
+#    error "__cpp_lib_make_from_tuple should have the value 201606L in c++20"
+#  endif
+
+#  ifdef __cpp_lib_ranges_zip
+#    error "__cpp_lib_ranges_zip should not be defined before c++23"
+#  endif
+
+#  ifndef __cpp_lib_tuple_element_t
+#    error "__cpp_lib_tuple_element_t should be defined in c++20"
+#  endif
+#  if __cpp_lib_tuple_element_t != 201402L
+#    error "__cpp_lib_tuple_element_t should have the value 201402L in c++20"
+#  endif
+
+#  ifdef __cpp_lib_tuple_like
+#    error "__cpp_lib_tuple_like should not be defined before c++23"
+#  endif
+
+#  ifndef __cpp_lib_tuples_by_type
+#    error "__cpp_lib_tuples_by_type should be defined in c++20"
+#  endif
+#  if __cpp_lib_tuples_by_type != 201304L
+#    error "__cpp_lib_tuples_by_type should have the value 201304L in c++20"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifndef __cpp_lib_apply
+#    error "__cpp_lib_apply should be defined in c++23"
+#  endif
+#  if __cpp_lib_apply != 201603L
+#    error "__cpp_lib_apply should have the value 201603L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_constexpr_tuple
+#    error "__cpp_lib_constexpr_tuple should be defined in c++23"
+#  endif
+#  if __cpp_lib_constexpr_tuple != 201811L
+#    error "__cpp_lib_constexpr_tuple should have the value 201811L in c++23"
+#  endif
+
+#  ifdef __cpp_lib_constrained_equality
+#    error "__cpp_lib_constrained_equality should not be defined before c++26"
+#  endif
+
+#  ifndef __cpp_lib_make_from_tuple
+#    error "__cpp_lib_make_from_tuple should be defined in c++23"
+#  endif
+#  if __cpp_lib_make_from_tuple != 201606L
+#    error "__cpp_lib_make_from_tuple should have the value 201606L in c++23"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_ranges_zip
+#      error "__cpp_lib_ranges_zip should be defined in c++23"
+#    endif
+#    if __cpp_lib_ranges_zip != 202110L
+#      error "__cpp_lib_ranges_zip should have the value 202110L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_ranges_zip
+#      error "__cpp_lib_ranges_zip should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_tuple_element_t
+#    error "__cpp_lib_tuple_element_t should be defined in c++23"
+#  endif
+#  if __cpp_lib_tuple_element_t != 201402L
+#    error "__cpp_lib_tuple_element_t should have the value 201402L in c++23"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_tuple_like
+#      error "__cpp_lib_tuple_like should be defined in c++23"
+#    endif
+#    if __cpp_lib_tuple_like != 202207L
+#      error "__cpp_lib_tuple_like should have the value 202207L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_tuple_like
+#      error "__cpp_lib_tuple_like should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_tuples_by_type
+#    error "__cpp_lib_tuples_by_type should be defined in c++23"
+#  endif
+#  if __cpp_lib_tuples_by_type != 201304L
+#    error "__cpp_lib_tuples_by_type should have the value 201304L in c++23"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  ifndef __cpp_lib_apply
+#    error "__cpp_lib_apply should be defined in c++26"
+#  endif
+#  if __cpp_lib_apply != 201603L
+#    error "__cpp_lib_apply should have the value 201603L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_constexpr_tuple
+#    error "__cpp_lib_constexpr_tuple should be defined in c++26"
+#  endif
+#  if __cpp_lib_constexpr_tuple != 201811L
+#    error "__cpp_lib_constexpr_tuple should have the value 201811L in c++26"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_constrained_equality
+#      error "__cpp_lib_constrained_equality should be defined in c++26"
+#    endif
+#    if __cpp_lib_constrained_equality != 202403L
+#      error "__cpp_lib_constrained_equality should have the value 202403L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_constrained_equality
+#      error "__cpp_lib_constrained_equality should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_make_from_tuple
+#    error "__cpp_lib_make_from_tuple should be defined in c++26"
+#  endif
+#  if __cpp_lib_make_from_tuple != 201606L
+#    error "__cpp_lib_make_from_tuple should have the value 201606L in c++26"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_ranges_zip
+#      error "__cpp_lib_ranges_zip should be defined in c++26"
+#    endif
+#    if __cpp_lib_ranges_zip != 202110L
+#      error "__cpp_lib_ranges_zip should have the value 202110L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_ranges_zip
+#      error "__cpp_lib_ranges_zip should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_tuple_element_t
+#    error "__cpp_lib_tuple_element_t should be defined in c++26"
+#  endif
+#  if __cpp_lib_tuple_element_t != 201402L
+#    error "__cpp_lib_tuple_element_t should have the value 201402L in c++26"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_tuple_like
+#      error "__cpp_lib_tuple_like should be defined in c++26"
+#    endif
+#    if __cpp_lib_tuple_like != 202311L
+#      error "__cpp_lib_tuple_like should have the value 202311L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_tuple_like
+#      error "__cpp_lib_tuple_like should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_tuples_by_type
+#    error "__cpp_lib_tuples_by_type should be defined in c++26"
+#  endif
+#  if __cpp_lib_tuples_by_type != 201304L
+#    error "__cpp_lib_tuples_by_type should have the value 201304L in c++26"
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/type_traits.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/type_traits.version.compile.pass.cpp
new file mode 100644
index 0000000000000..7b6c601d70d15
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/type_traits.version.compile.pass.cpp
@@ -0,0 +1,967 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <type_traits>
+
+// Test the feature test macros defined by <type_traits>
+
+// clang-format off
+
+#include <type_traits>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_bool_constant
+#    error "__cpp_lib_bool_constant should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_bounded_array_traits
+#    error "__cpp_lib_bounded_array_traits should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_has_unique_object_representations
+#    error "__cpp_lib_has_unique_object_representations should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_integral_constant_callable
+#    error "__cpp_lib_integral_constant_callable should not be defined before c++14"
+#  endif
+
+#  ifdef __cpp_lib_is_aggregate
+#    error "__cpp_lib_is_aggregate should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_is_constant_evaluated
+#    error "__cpp_lib_is_constant_evaluated should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_is_final
+#    error "__cpp_lib_is_final should not be defined before c++14"
+#  endif
+
+#  ifdef __cpp_lib_is_implicit_lifetime
+#    error "__cpp_lib_is_implicit_lifetime should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_is_invocable
+#    error "__cpp_lib_is_invocable should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_is_layout_compatible
+#    error "__cpp_lib_is_layout_compatible should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_is_nothrow_convertible
+#    error "__cpp_lib_is_nothrow_convertible should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_is_null_pointer
+#    error "__cpp_lib_is_null_pointer should not be defined before c++14"
+#  endif
+
+#  ifdef __cpp_lib_is_pointer_interconvertible
+#    error "__cpp_lib_is_pointer_interconvertible should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_is_scoped_enum
+#    error "__cpp_lib_is_scoped_enum should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_is_swappable
+#    error "__cpp_lib_is_swappable should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_is_virtual_base_of
+#    error "__cpp_lib_is_virtual_base_of should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_is_within_lifetime
+#    error "__cpp_lib_is_within_lifetime should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_logical_traits
+#    error "__cpp_lib_logical_traits should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_reference_from_temporary
+#    error "__cpp_lib_reference_from_temporary should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_remove_cvref
+#    error "__cpp_lib_remove_cvref should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_result_of_sfinae
+#    error "__cpp_lib_result_of_sfinae should not be defined before c++14"
+#  endif
+
+#  ifdef __cpp_lib_transformation_trait_aliases
+#    error "__cpp_lib_transformation_trait_aliases should not be defined before c++14"
+#  endif
+
+#  ifdef __cpp_lib_type_identity
+#    error "__cpp_lib_type_identity should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_type_trait_variable_templates
+#    error "__cpp_lib_type_trait_variable_templates should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_void_t
+#    error "__cpp_lib_void_t should not be defined before c++17"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_bool_constant
+#    error "__cpp_lib_bool_constant should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_bounded_array_traits
+#    error "__cpp_lib_bounded_array_traits should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_has_unique_object_representations
+#    error "__cpp_lib_has_unique_object_representations should not be defined before c++17"
+#  endif
+
+#  ifndef __cpp_lib_integral_constant_callable
+#    error "__cpp_lib_integral_constant_callable should be defined in c++14"
+#  endif
+#  if __cpp_lib_integral_constant_callable != 201304L
+#    error "__cpp_lib_integral_constant_callable should have the value 201304L in c++14"
+#  endif
+
+#  ifdef __cpp_lib_is_aggregate
+#    error "__cpp_lib_is_aggregate should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_is_constant_evaluated
+#    error "__cpp_lib_is_constant_evaluated should not be defined before c++20"
+#  endif
+
+#  ifndef __cpp_lib_is_final
+#    error "__cpp_lib_is_final should be defined in c++14"
+#  endif
+#  if __cpp_lib_is_final != 201402L
+#    error "__cpp_lib_is_final should have the value 201402L in c++14"
+#  endif
+
+#  ifdef __cpp_lib_is_implicit_lifetime
+#    error "__cpp_lib_is_implicit_lifetime should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_is_invocable
+#    error "__cpp_lib_is_invocable should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_is_layout_compatible
+#    error "__cpp_lib_is_layout_compatible should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_is_nothrow_convertible
+#    error "__cpp_lib_is_nothrow_convertible should not be defined before c++20"
+#  endif
+
+#  ifndef __cpp_lib_is_null_pointer
+#    error "__cpp_lib_is_null_pointer should be defined in c++14"
+#  endif
+#  if __cpp_lib_is_null_pointer != 201309L
+#    error "__cpp_lib_is_null_pointer should have the value 201309L in c++14"
+#  endif
+
+#  ifdef __cpp_lib_is_pointer_interconvertible
+#    error "__cpp_lib_is_pointer_interconvertible should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_is_scoped_enum
+#    error "__cpp_lib_is_scoped_enum should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_is_swappable
+#    error "__cpp_lib_is_swappable should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_is_virtual_base_of
+#    error "__cpp_lib_is_virtual_base_of should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_is_within_lifetime
+#    error "__cpp_lib_is_within_lifetime should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_logical_traits
+#    error "__cpp_lib_logical_traits should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_reference_from_temporary
+#    error "__cpp_lib_reference_from_temporary should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_remove_cvref
+#    error "__cpp_lib_remove_cvref should not be defined before c++20"
+#  endif
+
+#  ifndef __cpp_lib_result_of_sfinae
+#    error "__cpp_lib_result_of_sfinae should be defined in c++14"
+#  endif
+#  if __cpp_lib_result_of_sfinae != 201210L
+#    error "__cpp_lib_result_of_sfinae should have the value 201210L in c++14"
+#  endif
+
+#  ifndef __cpp_lib_transformation_trait_aliases
+#    error "__cpp_lib_transformation_trait_aliases should be defined in c++14"
+#  endif
+#  if __cpp_lib_transformation_trait_aliases != 201304L
+#    error "__cpp_lib_transformation_trait_aliases should have the value 201304L in c++14"
+#  endif
+
+#  ifdef __cpp_lib_type_identity
+#    error "__cpp_lib_type_identity should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_type_trait_variable_templates
+#    error "__cpp_lib_type_trait_variable_templates should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_void_t
+#    error "__cpp_lib_void_t should not be defined before c++17"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifndef __cpp_lib_bool_constant
+#    error "__cpp_lib_bool_constant should be defined in c++17"
+#  endif
+#  if __cpp_lib_bool_constant != 201505L
+#    error "__cpp_lib_bool_constant should have the value 201505L in c++17"
+#  endif
+
+#  ifdef __cpp_lib_bounded_array_traits
+#    error "__cpp_lib_bounded_array_traits should not be defined before c++20"
+#  endif
+
+#  ifndef __cpp_lib_has_unique_object_representations
+#    error "__cpp_lib_has_unique_object_representations should be defined in c++17"
+#  endif
+#  if __cpp_lib_has_unique_object_representations != 201606L
+#    error "__cpp_lib_has_unique_object_representations should have the value 201606L in c++17"
+#  endif
+
+#  ifndef __cpp_lib_integral_constant_callable
+#    error "__cpp_lib_integral_constant_callable should be defined in c++17"
+#  endif
+#  if __cpp_lib_integral_constant_callable != 201304L
+#    error "__cpp_lib_integral_constant_callable should have the value 201304L in c++17"
+#  endif
+
+#  ifndef __cpp_lib_is_aggregate
+#    error "__cpp_lib_is_aggregate should be defined in c++17"
+#  endif
+#  if __cpp_lib_is_aggregate != 201703L
+#    error "__cpp_lib_is_aggregate should have the value 201703L in c++17"
+#  endif
+
+#  ifdef __cpp_lib_is_constant_evaluated
+#    error "__cpp_lib_is_constant_evaluated should not be defined before c++20"
+#  endif
+
+#  ifndef __cpp_lib_is_final
+#    error "__cpp_lib_is_final should be defined in c++17"
+#  endif
+#  if __cpp_lib_is_final != 201402L
+#    error "__cpp_lib_is_final should have the value 201402L in c++17"
+#  endif
+
+#  ifdef __cpp_lib_is_implicit_lifetime
+#    error "__cpp_lib_is_implicit_lifetime should not be defined before c++23"
+#  endif
+
+#  ifndef __cpp_lib_is_invocable
+#    error "__cpp_lib_is_invocable should be defined in c++17"
+#  endif
+#  if __cpp_lib_is_invocable != 201703L
+#    error "__cpp_lib_is_invocable should have the value 201703L in c++17"
+#  endif
+
+#  ifdef __cpp_lib_is_layout_compatible
+#    error "__cpp_lib_is_layout_compatible should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_is_nothrow_convertible
+#    error "__cpp_lib_is_nothrow_convertible should not be defined before c++20"
+#  endif
+
+#  ifndef __cpp_lib_is_null_pointer
+#    error "__cpp_lib_is_null_pointer should be defined in c++17"
+#  endif
+#  if __cpp_lib_is_null_pointer != 201309L
+#    error "__cpp_lib_is_null_pointer should have the value 201309L in c++17"
+#  endif
+
+#  ifdef __cpp_lib_is_pointer_interconvertible
+#    error "__cpp_lib_is_pointer_interconvertible should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_is_scoped_enum
+#    error "__cpp_lib_is_scoped_enum should not be defined before c++23"
+#  endif
+
+#  ifndef __cpp_lib_is_swappable
+#    error "__cpp_lib_is_swappable should be defined in c++17"
+#  endif
+#  if __cpp_lib_is_swappable != 201603L
+#    error "__cpp_lib_is_swappable should have the value 201603L in c++17"
+#  endif
+
+#  ifdef __cpp_lib_is_virtual_base_of
+#    error "__cpp_lib_is_virtual_base_of should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_is_within_lifetime
+#    error "__cpp_lib_is_within_lifetime should not be defined before c++26"
+#  endif
+
+#  ifndef __cpp_lib_logical_traits
+#    error "__cpp_lib_logical_traits should be defined in c++17"
+#  endif
+#  if __cpp_lib_logical_traits != 201510L
+#    error "__cpp_lib_logical_traits should have the value 201510L in c++17"
+#  endif
+
+#  ifdef __cpp_lib_reference_from_temporary
+#    error "__cpp_lib_reference_from_temporary should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_remove_cvref
+#    error "__cpp_lib_remove_cvref should not be defined before c++20"
+#  endif
+
+#  ifndef __cpp_lib_result_of_sfinae
+#    error "__cpp_lib_result_of_sfinae should be defined in c++17"
+#  endif
+#  if __cpp_lib_result_of_sfinae != 201210L
+#    error "__cpp_lib_result_of_sfinae should have the value 201210L in c++17"
+#  endif
+
+#  ifndef __cpp_lib_transformation_trait_aliases
+#    error "__cpp_lib_transformation_trait_aliases should be defined in c++17"
+#  endif
+#  if __cpp_lib_transformation_trait_aliases != 201304L
+#    error "__cpp_lib_transformation_trait_aliases should have the value 201304L in c++17"
+#  endif
+
+#  ifdef __cpp_lib_type_identity
+#    error "__cpp_lib_type_identity should not be defined before c++20"
+#  endif
+
+#  ifndef __cpp_lib_type_trait_variable_templates
+#    error "__cpp_lib_type_trait_variable_templates should be defined in c++17"
+#  endif
+#  if __cpp_lib_type_trait_variable_templates != 201510L
+#    error "__cpp_lib_type_trait_variable_templates should have the value 201510L in c++17"
+#  endif
+
+#  ifndef __cpp_lib_void_t
+#    error "__cpp_lib_void_t should be defined in c++17"
+#  endif
+#  if __cpp_lib_void_t != 201411L
+#    error "__cpp_lib_void_t should have the value 201411L in c++17"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifndef __cpp_lib_bool_constant
+#    error "__cpp_lib_bool_constant should be defined in c++20"
+#  endif
+#  if __cpp_lib_bool_constant != 201505L
+#    error "__cpp_lib_bool_constant should have the value 201505L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_bounded_array_traits
+#    error "__cpp_lib_bounded_array_traits should be defined in c++20"
+#  endif
+#  if __cpp_lib_bounded_array_traits != 201902L
+#    error "__cpp_lib_bounded_array_traits should have the value 201902L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_has_unique_object_representations
+#    error "__cpp_lib_has_unique_object_representations should be defined in c++20"
+#  endif
+#  if __cpp_lib_has_unique_object_representations != 201606L
+#    error "__cpp_lib_has_unique_object_representations should have the value 201606L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_integral_constant_callable
+#    error "__cpp_lib_integral_constant_callable should be defined in c++20"
+#  endif
+#  if __cpp_lib_integral_constant_callable != 201304L
+#    error "__cpp_lib_integral_constant_callable should have the value 201304L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_is_aggregate
+#    error "__cpp_lib_is_aggregate should be defined in c++20"
+#  endif
+#  if __cpp_lib_is_aggregate != 201703L
+#    error "__cpp_lib_is_aggregate should have the value 201703L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_is_constant_evaluated
+#    error "__cpp_lib_is_constant_evaluated should be defined in c++20"
+#  endif
+#  if __cpp_lib_is_constant_evaluated != 201811L
+#    error "__cpp_lib_is_constant_evaluated should have the value 201811L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_is_final
+#    error "__cpp_lib_is_final should be defined in c++20"
+#  endif
+#  if __cpp_lib_is_final != 201402L
+#    error "__cpp_lib_is_final should have the value 201402L in c++20"
+#  endif
+
+#  ifdef __cpp_lib_is_implicit_lifetime
+#    error "__cpp_lib_is_implicit_lifetime should not be defined before c++23"
+#  endif
+
+#  ifndef __cpp_lib_is_invocable
+#    error "__cpp_lib_is_invocable should be defined in c++20"
+#  endif
+#  if __cpp_lib_is_invocable != 201703L
+#    error "__cpp_lib_is_invocable should have the value 201703L in c++20"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_is_layout_compatible
+#      error "__cpp_lib_is_layout_compatible should be defined in c++20"
+#    endif
+#    if __cpp_lib_is_layout_compatible != 201907L
+#      error "__cpp_lib_is_layout_compatible should have the value 201907L in c++20"
+#    endif
+#  else
+#    ifdef __cpp_lib_is_layout_compatible
+#      error "__cpp_lib_is_layout_compatible should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_is_nothrow_convertible
+#    error "__cpp_lib_is_nothrow_convertible should be defined in c++20"
+#  endif
+#  if __cpp_lib_is_nothrow_convertible != 201806L
+#    error "__cpp_lib_is_nothrow_convertible should have the value 201806L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_is_null_pointer
+#    error "__cpp_lib_is_null_pointer should be defined in c++20"
+#  endif
+#  if __cpp_lib_is_null_pointer != 201309L
+#    error "__cpp_lib_is_null_pointer should have the value 201309L in c++20"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_is_pointer_interconvertible
+#      error "__cpp_lib_is_pointer_interconvertible should be defined in c++20"
+#    endif
+#    if __cpp_lib_is_pointer_interconvertible != 201907L
+#      error "__cpp_lib_is_pointer_interconvertible should have the value 201907L in c++20"
+#    endif
+#  else
+#    ifdef __cpp_lib_is_pointer_interconvertible
+#      error "__cpp_lib_is_pointer_interconvertible should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifdef __cpp_lib_is_scoped_enum
+#    error "__cpp_lib_is_scoped_enum should not be defined before c++23"
+#  endif
+
+#  ifndef __cpp_lib_is_swappable
+#    error "__cpp_lib_is_swappable should be defined in c++20"
+#  endif
+#  if __cpp_lib_is_swappable != 201603L
+#    error "__cpp_lib_is_swappable should have the value 201603L in c++20"
+#  endif
+
+#  ifdef __cpp_lib_is_virtual_base_of
+#    error "__cpp_lib_is_virtual_base_of should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_is_within_lifetime
+#    error "__cpp_lib_is_within_lifetime should not be defined before c++26"
+#  endif
+
+#  ifndef __cpp_lib_logical_traits
+#    error "__cpp_lib_logical_traits should be defined in c++20"
+#  endif
+#  if __cpp_lib_logical_traits != 201510L
+#    error "__cpp_lib_logical_traits should have the value 201510L in c++20"
+#  endif
+
+#  ifdef __cpp_lib_reference_from_temporary
+#    error "__cpp_lib_reference_from_temporary should not be defined before c++23"
+#  endif
+
+#  ifndef __cpp_lib_remove_cvref
+#    error "__cpp_lib_remove_cvref should be defined in c++20"
+#  endif
+#  if __cpp_lib_remove_cvref != 201711L
+#    error "__cpp_lib_remove_cvref should have the value 201711L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_result_of_sfinae
+#    error "__cpp_lib_result_of_sfinae should be defined in c++20"
+#  endif
+#  if __cpp_lib_result_of_sfinae != 201210L
+#    error "__cpp_lib_result_of_sfinae should have the value 201210L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_transformation_trait_aliases
+#    error "__cpp_lib_transformation_trait_aliases should be defined in c++20"
+#  endif
+#  if __cpp_lib_transformation_trait_aliases != 201304L
+#    error "__cpp_lib_transformation_trait_aliases should have the value 201304L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_type_identity
+#    error "__cpp_lib_type_identity should be defined in c++20"
+#  endif
+#  if __cpp_lib_type_identity != 201806L
+#    error "__cpp_lib_type_identity should have the value 201806L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_type_trait_variable_templates
+#    error "__cpp_lib_type_trait_variable_templates should be defined in c++20"
+#  endif
+#  if __cpp_lib_type_trait_variable_templates != 201510L
+#    error "__cpp_lib_type_trait_variable_templates should have the value 201510L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_void_t
+#    error "__cpp_lib_void_t should be defined in c++20"
+#  endif
+#  if __cpp_lib_void_t != 201411L
+#    error "__cpp_lib_void_t should have the value 201411L in c++20"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifndef __cpp_lib_bool_constant
+#    error "__cpp_lib_bool_constant should be defined in c++23"
+#  endif
+#  if __cpp_lib_bool_constant != 201505L
+#    error "__cpp_lib_bool_constant should have the value 201505L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_bounded_array_traits
+#    error "__cpp_lib_bounded_array_traits should be defined in c++23"
+#  endif
+#  if __cpp_lib_bounded_array_traits != 201902L
+#    error "__cpp_lib_bounded_array_traits should have the value 201902L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_has_unique_object_representations
+#    error "__cpp_lib_has_unique_object_representations should be defined in c++23"
+#  endif
+#  if __cpp_lib_has_unique_object_representations != 201606L
+#    error "__cpp_lib_has_unique_object_representations should have the value 201606L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_integral_constant_callable
+#    error "__cpp_lib_integral_constant_callable should be defined in c++23"
+#  endif
+#  if __cpp_lib_integral_constant_callable != 201304L
+#    error "__cpp_lib_integral_constant_callable should have the value 201304L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_is_aggregate
+#    error "__cpp_lib_is_aggregate should be defined in c++23"
+#  endif
+#  if __cpp_lib_is_aggregate != 201703L
+#    error "__cpp_lib_is_aggregate should have the value 201703L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_is_constant_evaluated
+#    error "__cpp_lib_is_constant_evaluated should be defined in c++23"
+#  endif
+#  if __cpp_lib_is_constant_evaluated != 201811L
+#    error "__cpp_lib_is_constant_evaluated should have the value 201811L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_is_final
+#    error "__cpp_lib_is_final should be defined in c++23"
+#  endif
+#  if __cpp_lib_is_final != 201402L
+#    error "__cpp_lib_is_final should have the value 201402L in c++23"
+#  endif
+
+#  if __has_builtin(__builtin_is_implicit_lifetime)
+#    ifndef __cpp_lib_is_implicit_lifetime
+#      error "__cpp_lib_is_implicit_lifetime should be defined in c++23"
+#    endif
+#    if __cpp_lib_is_implicit_lifetime != 202302L
+#      error "__cpp_lib_is_implicit_lifetime should have the value 202302L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_is_implicit_lifetime
+#      error "__cpp_lib_is_implicit_lifetime should not be defined when the requirement '__has_builtin(__builtin_is_implicit_lifetime)' is not met!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_is_invocable
+#    error "__cpp_lib_is_invocable should be defined in c++23"
+#  endif
+#  if __cpp_lib_is_invocable != 201703L
+#    error "__cpp_lib_is_invocable should have the value 201703L in c++23"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_is_layout_compatible
+#      error "__cpp_lib_is_layout_compatible should be defined in c++23"
+#    endif
+#    if __cpp_lib_is_layout_compatible != 201907L
+#      error "__cpp_lib_is_layout_compatible should have the value 201907L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_is_layout_compatible
+#      error "__cpp_lib_is_layout_compatible should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_is_nothrow_convertible
+#    error "__cpp_lib_is_nothrow_convertible should be defined in c++23"
+#  endif
+#  if __cpp_lib_is_nothrow_convertible != 201806L
+#    error "__cpp_lib_is_nothrow_convertible should have the value 201806L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_is_null_pointer
+#    error "__cpp_lib_is_null_pointer should be defined in c++23"
+#  endif
+#  if __cpp_lib_is_null_pointer != 201309L
+#    error "__cpp_lib_is_null_pointer should have the value 201309L in c++23"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_is_pointer_interconvertible
+#      error "__cpp_lib_is_pointer_interconvertible should be defined in c++23"
+#    endif
+#    if __cpp_lib_is_pointer_interconvertible != 201907L
+#      error "__cpp_lib_is_pointer_interconvertible should have the value 201907L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_is_pointer_interconvertible
+#      error "__cpp_lib_is_pointer_interconvertible should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_is_scoped_enum
+#    error "__cpp_lib_is_scoped_enum should be defined in c++23"
+#  endif
+#  if __cpp_lib_is_scoped_enum != 202011L
+#    error "__cpp_lib_is_scoped_enum should have the value 202011L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_is_swappable
+#    error "__cpp_lib_is_swappable should be defined in c++23"
+#  endif
+#  if __cpp_lib_is_swappable != 201603L
+#    error "__cpp_lib_is_swappable should have the value 201603L in c++23"
+#  endif
+
+#  ifdef __cpp_lib_is_virtual_base_of
+#    error "__cpp_lib_is_virtual_base_of should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_is_within_lifetime
+#    error "__cpp_lib_is_within_lifetime should not be defined before c++26"
+#  endif
+
+#  ifndef __cpp_lib_logical_traits
+#    error "__cpp_lib_logical_traits should be defined in c++23"
+#  endif
+#  if __cpp_lib_logical_traits != 201510L
+#    error "__cpp_lib_logical_traits should have the value 201510L in c++23"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_reference_from_temporary
+#      error "__cpp_lib_reference_from_temporary should be defined in c++23"
+#    endif
+#    if __cpp_lib_reference_from_temporary != 202202L
+#      error "__cpp_lib_reference_from_temporary should have the value 202202L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_reference_from_temporary
+#      error "__cpp_lib_reference_from_temporary should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_remove_cvref
+#    error "__cpp_lib_remove_cvref should be defined in c++23"
+#  endif
+#  if __cpp_lib_remove_cvref != 201711L
+#    error "__cpp_lib_remove_cvref should have the value 201711L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_result_of_sfinae
+#    error "__cpp_lib_result_of_sfinae should be defined in c++23"
+#  endif
+#  if __cpp_lib_result_of_sfinae != 201210L
+#    error "__cpp_lib_result_of_sfinae should have the value 201210L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_transformation_trait_aliases
+#    error "__cpp_lib_transformation_trait_aliases should be defined in c++23"
+#  endif
+#  if __cpp_lib_transformation_trait_aliases != 201304L
+#    error "__cpp_lib_transformation_trait_aliases should have the value 201304L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_type_identity
+#    error "__cpp_lib_type_identity should be defined in c++23"
+#  endif
+#  if __cpp_lib_type_identity != 201806L
+#    error "__cpp_lib_type_identity should have the value 201806L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_type_trait_variable_templates
+#    error "__cpp_lib_type_trait_variable_templates should be defined in c++23"
+#  endif
+#  if __cpp_lib_type_trait_variable_templates != 201510L
+#    error "__cpp_lib_type_trait_variable_templates should have the value 201510L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_void_t
+#    error "__cpp_lib_void_t should be defined in c++23"
+#  endif
+#  if __cpp_lib_void_t != 201411L
+#    error "__cpp_lib_void_t should have the value 201411L in c++23"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  ifndef __cpp_lib_bool_constant
+#    error "__cpp_lib_bool_constant should be defined in c++26"
+#  endif
+#  if __cpp_lib_bool_constant != 201505L
+#    error "__cpp_lib_bool_constant should have the value 201505L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_bounded_array_traits
+#    error "__cpp_lib_bounded_array_traits should be defined in c++26"
+#  endif
+#  if __cpp_lib_bounded_array_traits != 201902L
+#    error "__cpp_lib_bounded_array_traits should have the value 201902L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_has_unique_object_representations
+#    error "__cpp_lib_has_unique_object_representations should be defined in c++26"
+#  endif
+#  if __cpp_lib_has_unique_object_representations != 201606L
+#    error "__cpp_lib_has_unique_object_representations should have the value 201606L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_integral_constant_callable
+#    error "__cpp_lib_integral_constant_callable should be defined in c++26"
+#  endif
+#  if __cpp_lib_integral_constant_callable != 201304L
+#    error "__cpp_lib_integral_constant_callable should have the value 201304L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_is_aggregate
+#    error "__cpp_lib_is_aggregate should be defined in c++26"
+#  endif
+#  if __cpp_lib_is_aggregate != 201703L
+#    error "__cpp_lib_is_aggregate should have the value 201703L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_is_constant_evaluated
+#    error "__cpp_lib_is_constant_evaluated should be defined in c++26"
+#  endif
+#  if __cpp_lib_is_constant_evaluated != 201811L
+#    error "__cpp_lib_is_constant_evaluated should have the value 201811L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_is_final
+#    error "__cpp_lib_is_final should be defined in c++26"
+#  endif
+#  if __cpp_lib_is_final != 201402L
+#    error "__cpp_lib_is_final should have the value 201402L in c++26"
+#  endif
+
+#  if __has_builtin(__builtin_is_implicit_lifetime)
+#    ifndef __cpp_lib_is_implicit_lifetime
+#      error "__cpp_lib_is_implicit_lifetime should be defined in c++26"
+#    endif
+#    if __cpp_lib_is_implicit_lifetime != 202302L
+#      error "__cpp_lib_is_implicit_lifetime should have the value 202302L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_is_implicit_lifetime
+#      error "__cpp_lib_is_implicit_lifetime should not be defined when the requirement '__has_builtin(__builtin_is_implicit_lifetime)' is not met!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_is_invocable
+#    error "__cpp_lib_is_invocable should be defined in c++26"
+#  endif
+#  if __cpp_lib_is_invocable != 201703L
+#    error "__cpp_lib_is_invocable should have the value 201703L in c++26"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_is_layout_compatible
+#      error "__cpp_lib_is_layout_compatible should be defined in c++26"
+#    endif
+#    if __cpp_lib_is_layout_compatible != 201907L
+#      error "__cpp_lib_is_layout_compatible should have the value 201907L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_is_layout_compatible
+#      error "__cpp_lib_is_layout_compatible should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_is_nothrow_convertible
+#    error "__cpp_lib_is_nothrow_convertible should be defined in c++26"
+#  endif
+#  if __cpp_lib_is_nothrow_convertible != 201806L
+#    error "__cpp_lib_is_nothrow_convertible should have the value 201806L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_is_null_pointer
+#    error "__cpp_lib_is_null_pointer should be defined in c++26"
+#  endif
+#  if __cpp_lib_is_null_pointer != 201309L
+#    error "__cpp_lib_is_null_pointer should have the value 201309L in c++26"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_is_pointer_interconvertible
+#      error "__cpp_lib_is_pointer_interconvertible should be defined in c++26"
+#    endif
+#    if __cpp_lib_is_pointer_interconvertible != 201907L
+#      error "__cpp_lib_is_pointer_interconvertible should have the value 201907L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_is_pointer_interconvertible
+#      error "__cpp_lib_is_pointer_interconvertible should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_is_scoped_enum
+#    error "__cpp_lib_is_scoped_enum should be defined in c++26"
+#  endif
+#  if __cpp_lib_is_scoped_enum != 202011L
+#    error "__cpp_lib_is_scoped_enum should have the value 202011L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_is_swappable
+#    error "__cpp_lib_is_swappable should be defined in c++26"
+#  endif
+#  if __cpp_lib_is_swappable != 201603L
+#    error "__cpp_lib_is_swappable should have the value 201603L in c++26"
+#  endif
+
+#  if __has_builtin(__builtin_is_virtual_base_of)
+#    ifndef __cpp_lib_is_virtual_base_of
+#      error "__cpp_lib_is_virtual_base_of should be defined in c++26"
+#    endif
+#    if __cpp_lib_is_virtual_base_of != 202406L
+#      error "__cpp_lib_is_virtual_base_of should have the value 202406L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_is_virtual_base_of
+#      error "__cpp_lib_is_virtual_base_of should not be defined when the requirement '__has_builtin(__builtin_is_virtual_base_of)' is not met!"
+#    endif
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_is_within_lifetime
+#      error "__cpp_lib_is_within_lifetime should be defined in c++26"
+#    endif
+#    if __cpp_lib_is_within_lifetime != 202306L
+#      error "__cpp_lib_is_within_lifetime should have the value 202306L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_is_within_lifetime
+#      error "__cpp_lib_is_within_lifetime should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_logical_traits
+#    error "__cpp_lib_logical_traits should be defined in c++26"
+#  endif
+#  if __cpp_lib_logical_traits != 201510L
+#    error "__cpp_lib_logical_traits should have the value 201510L in c++26"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_reference_from_temporary
+#      error "__cpp_lib_reference_from_temporary should be defined in c++26"
+#    endif
+#    if __cpp_lib_reference_from_temporary != 202202L
+#      error "__cpp_lib_reference_from_temporary should have the value 202202L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_reference_from_temporary
+#      error "__cpp_lib_reference_from_temporary should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_remove_cvref
+#    error "__cpp_lib_remove_cvref should be defined in c++26"
+#  endif
+#  if __cpp_lib_remove_cvref != 201711L
+#    error "__cpp_lib_remove_cvref should have the value 201711L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_result_of_sfinae
+#    error "__cpp_lib_result_of_sfinae should be defined in c++26"
+#  endif
+#  if __cpp_lib_result_of_sfinae != 201210L
+#    error "__cpp_lib_result_of_sfinae should have the value 201210L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_transformation_trait_aliases
+#    error "__cpp_lib_transformation_trait_aliases should be defined in c++26"
+#  endif
+#  if __cpp_lib_transformation_trait_aliases != 201304L
+#    error "__cpp_lib_transformation_trait_aliases should have the value 201304L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_type_identity
+#    error "__cpp_lib_type_identity should be defined in c++26"
+#  endif
+#  if __cpp_lib_type_identity != 201806L
+#    error "__cpp_lib_type_identity should have the value 201806L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_type_trait_variable_templates
+#    error "__cpp_lib_type_trait_variable_templates should be defined in c++26"
+#  endif
+#  if __cpp_lib_type_trait_variable_templates != 201510L
+#    error "__cpp_lib_type_trait_variable_templates should have the value 201510L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_void_t
+#    error "__cpp_lib_void_t should be defined in c++26"
+#  endif
+#  if __cpp_lib_void_t != 201411L
+#    error "__cpp_lib_void_t should have the value 201411L in c++26"
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/typeinfo.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/typeinfo.version.compile.pass.cpp
new file mode 100644
index 0000000000000..75dfd3e159822
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/typeinfo.version.compile.pass.cpp
@@ -0,0 +1,67 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <typeinfo>
+
+// Test the feature test macros defined by <typeinfo>
+
+// clang-format off
+
+#include <typeinfo>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_constexpr_typeinfo
+#    error "__cpp_lib_constexpr_typeinfo should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_constexpr_typeinfo
+#    error "__cpp_lib_constexpr_typeinfo should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_constexpr_typeinfo
+#    error "__cpp_lib_constexpr_typeinfo should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifdef __cpp_lib_constexpr_typeinfo
+#    error "__cpp_lib_constexpr_typeinfo should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifndef __cpp_lib_constexpr_typeinfo
+#    error "__cpp_lib_constexpr_typeinfo should be defined in c++23"
+#  endif
+#  if __cpp_lib_constexpr_typeinfo != 202106L
+#    error "__cpp_lib_constexpr_typeinfo should have the value 202106L in c++23"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  ifndef __cpp_lib_constexpr_typeinfo
+#    error "__cpp_lib_constexpr_typeinfo should be defined in c++26"
+#  endif
+#  if __cpp_lib_constexpr_typeinfo != 202106L
+#    error "__cpp_lib_constexpr_typeinfo should have the value 202106L in c++26"
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/unordered_map.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/unordered_map.version.compile.pass.cpp
new file mode 100644
index 0000000000000..189436beaa681
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/unordered_map.version.compile.pass.cpp
@@ -0,0 +1,394 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <unordered_map>
+
+// Test the feature test macros defined by <unordered_map>
+
+// clang-format off
+
+#include <unordered_map>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_associative_heterogeneous_erasure
+#    error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_associative_heterogeneous_insertion
+#    error "__cpp_lib_associative_heterogeneous_insertion should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_generic_unordered_lookup
+#    error "__cpp_lib_generic_unordered_lookup should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_node_extract
+#    error "__cpp_lib_node_extract should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_tuple_like
+#    error "__cpp_lib_tuple_like should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_unordered_map_try_emplace
+#    error "__cpp_lib_unordered_map_try_emplace should not be defined before c++17"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_associative_heterogeneous_erasure
+#    error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_associative_heterogeneous_insertion
+#    error "__cpp_lib_associative_heterogeneous_insertion should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_generic_unordered_lookup
+#    error "__cpp_lib_generic_unordered_lookup should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_node_extract
+#    error "__cpp_lib_node_extract should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_tuple_like
+#    error "__cpp_lib_tuple_like should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_unordered_map_try_emplace
+#    error "__cpp_lib_unordered_map_try_emplace should not be defined before c++17"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifndef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++17"
+#  endif
+#  if __cpp_lib_allocator_traits_is_always_equal != 201411L
+#    error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++17"
+#  endif
+
+#  ifdef __cpp_lib_associative_heterogeneous_erasure
+#    error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_associative_heterogeneous_insertion
+#    error "__cpp_lib_associative_heterogeneous_insertion should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_generic_unordered_lookup
+#    error "__cpp_lib_generic_unordered_lookup should not be defined before c++20"
+#  endif
+
+#  ifndef __cpp_lib_node_extract
+#    error "__cpp_lib_node_extract should be defined in c++17"
+#  endif
+#  if __cpp_lib_node_extract != 201606L
+#    error "__cpp_lib_node_extract should have the value 201606L in c++17"
+#  endif
+
+#  ifndef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should be defined in c++17"
+#  endif
+#  if __cpp_lib_nonmember_container_access != 201411L
+#    error "__cpp_lib_nonmember_container_access should have the value 201411L in c++17"
+#  endif
+
+#  ifdef __cpp_lib_tuple_like
+#    error "__cpp_lib_tuple_like should not be defined before c++23"
+#  endif
+
+#  ifndef __cpp_lib_unordered_map_try_emplace
+#    error "__cpp_lib_unordered_map_try_emplace should be defined in c++17"
+#  endif
+#  if __cpp_lib_unordered_map_try_emplace != 201411L
+#    error "__cpp_lib_unordered_map_try_emplace should have the value 201411L in c++17"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifndef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++20"
+#  endif
+#  if __cpp_lib_allocator_traits_is_always_equal != 201411L
+#    error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++20"
+#  endif
+
+#  ifdef __cpp_lib_associative_heterogeneous_erasure
+#    error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_associative_heterogeneous_insertion
+#    error "__cpp_lib_associative_heterogeneous_insertion should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should not be defined before c++23"
+#  endif
+
+#  ifndef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should be defined in c++20"
+#  endif
+#  if __cpp_lib_erase_if != 202002L
+#    error "__cpp_lib_erase_if should have the value 202002L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_generic_unordered_lookup
+#    error "__cpp_lib_generic_unordered_lookup should be defined in c++20"
+#  endif
+#  if __cpp_lib_generic_unordered_lookup != 201811L
+#    error "__cpp_lib_generic_unordered_lookup should have the value 201811L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_node_extract
+#    error "__cpp_lib_node_extract should be defined in c++20"
+#  endif
+#  if __cpp_lib_node_extract != 201606L
+#    error "__cpp_lib_node_extract should have the value 201606L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should be defined in c++20"
+#  endif
+#  if __cpp_lib_nonmember_container_access != 201411L
+#    error "__cpp_lib_nonmember_container_access should have the value 201411L in c++20"
+#  endif
+
+#  ifdef __cpp_lib_tuple_like
+#    error "__cpp_lib_tuple_like should not be defined before c++23"
+#  endif
+
+#  ifndef __cpp_lib_unordered_map_try_emplace
+#    error "__cpp_lib_unordered_map_try_emplace should be defined in c++20"
+#  endif
+#  if __cpp_lib_unordered_map_try_emplace != 201411L
+#    error "__cpp_lib_unordered_map_try_emplace should have the value 201411L in c++20"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifndef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++23"
+#  endif
+#  if __cpp_lib_allocator_traits_is_always_equal != 201411L
+#    error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++23"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_associative_heterogeneous_erasure
+#      error "__cpp_lib_associative_heterogeneous_erasure should be defined in c++23"
+#    endif
+#    if __cpp_lib_associative_heterogeneous_erasure != 202110L
+#      error "__cpp_lib_associative_heterogeneous_erasure should have the value 202110L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_associative_heterogeneous_erasure
+#      error "__cpp_lib_associative_heterogeneous_erasure should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifdef __cpp_lib_associative_heterogeneous_insertion
+#    error "__cpp_lib_associative_heterogeneous_insertion should not be defined before c++26"
+#  endif
+
+#  ifndef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should be defined in c++23"
+#  endif
+#  if __cpp_lib_containers_ranges != 202202L
+#    error "__cpp_lib_containers_ranges should have the value 202202L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should be defined in c++23"
+#  endif
+#  if __cpp_lib_erase_if != 202002L
+#    error "__cpp_lib_erase_if should have the value 202002L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_generic_unordered_lookup
+#    error "__cpp_lib_generic_unordered_lookup should be defined in c++23"
+#  endif
+#  if __cpp_lib_generic_unordered_lookup != 201811L
+#    error "__cpp_lib_generic_unordered_lookup should have the value 201811L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_node_extract
+#    error "__cpp_lib_node_extract should be defined in c++23"
+#  endif
+#  if __cpp_lib_node_extract != 201606L
+#    error "__cpp_lib_node_extract should have the value 201606L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should be defined in c++23"
+#  endif
+#  if __cpp_lib_nonmember_container_access != 201411L
+#    error "__cpp_lib_nonmember_container_access should have the value 201411L in c++23"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_tuple_like
+#      error "__cpp_lib_tuple_like should be defined in c++23"
+#    endif
+#    if __cpp_lib_tuple_like != 202207L
+#      error "__cpp_lib_tuple_like should have the value 202207L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_tuple_like
+#      error "__cpp_lib_tuple_like should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_unordered_map_try_emplace
+#    error "__cpp_lib_unordered_map_try_emplace should be defined in c++23"
+#  endif
+#  if __cpp_lib_unordered_map_try_emplace != 201411L
+#    error "__cpp_lib_unordered_map_try_emplace should have the value 201411L in c++23"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  ifndef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++26"
+#  endif
+#  if __cpp_lib_allocator_traits_is_always_equal != 201411L
+#    error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++26"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_associative_heterogeneous_erasure
+#      error "__cpp_lib_associative_heterogeneous_erasure should be defined in c++26"
+#    endif
+#    if __cpp_lib_associative_heterogeneous_erasure != 202110L
+#      error "__cpp_lib_associative_heterogeneous_erasure should have the value 202110L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_associative_heterogeneous_erasure
+#      error "__cpp_lib_associative_heterogeneous_erasure should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_associative_heterogeneous_insertion
+#      error "__cpp_lib_associative_heterogeneous_insertion should be defined in c++26"
+#    endif
+#    if __cpp_lib_associative_heterogeneous_insertion != 202306L
+#      error "__cpp_lib_associative_heterogeneous_insertion should have the value 202306L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_associative_heterogeneous_insertion
+#      error "__cpp_lib_associative_heterogeneous_insertion should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should be defined in c++26"
+#  endif
+#  if __cpp_lib_containers_ranges != 202202L
+#    error "__cpp_lib_containers_ranges should have the value 202202L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should be defined in c++26"
+#  endif
+#  if __cpp_lib_erase_if != 202002L
+#    error "__cpp_lib_erase_if should have the value 202002L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_generic_unordered_lookup
+#    error "__cpp_lib_generic_unordered_lookup should be defined in c++26"
+#  endif
+#  if __cpp_lib_generic_unordered_lookup != 201811L
+#    error "__cpp_lib_generic_unordered_lookup should have the value 201811L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_node_extract
+#    error "__cpp_lib_node_extract should be defined in c++26"
+#  endif
+#  if __cpp_lib_node_extract != 201606L
+#    error "__cpp_lib_node_extract should have the value 201606L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should be defined in c++26"
+#  endif
+#  if __cpp_lib_nonmember_container_access != 201411L
+#    error "__cpp_lib_nonmember_container_access should have the value 201411L in c++26"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_tuple_like
+#      error "__cpp_lib_tuple_like should be defined in c++26"
+#    endif
+#    if __cpp_lib_tuple_like != 202311L
+#      error "__cpp_lib_tuple_like should have the value 202311L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_tuple_like
+#      error "__cpp_lib_tuple_like should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_unordered_map_try_emplace
+#    error "__cpp_lib_unordered_map_try_emplace should be defined in c++26"
+#  endif
+#  if __cpp_lib_unordered_map_try_emplace != 201411L
+#    error "__cpp_lib_unordered_map_try_emplace should have the value 201411L in c++26"
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/unordered_set.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/unordered_set.version.compile.pass.cpp
new file mode 100644
index 0000000000000..9eac6de8bae50
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/unordered_set.version.compile.pass.cpp
@@ -0,0 +1,316 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <unordered_set>
+
+// Test the feature test macros defined by <unordered_set>
+
+// clang-format off
+
+#include <unordered_set>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_associative_heterogeneous_erasure
+#    error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_associative_heterogeneous_insertion
+#    error "__cpp_lib_associative_heterogeneous_insertion should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_generic_unordered_lookup
+#    error "__cpp_lib_generic_unordered_lookup should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_node_extract
+#    error "__cpp_lib_node_extract should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should not be defined before c++17"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_associative_heterogeneous_erasure
+#    error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_associative_heterogeneous_insertion
+#    error "__cpp_lib_associative_heterogeneous_insertion should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_generic_unordered_lookup
+#    error "__cpp_lib_generic_unordered_lookup should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_node_extract
+#    error "__cpp_lib_node_extract should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should not be defined before c++17"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifndef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++17"
+#  endif
+#  if __cpp_lib_allocator_traits_is_always_equal != 201411L
+#    error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++17"
+#  endif
+
+#  ifdef __cpp_lib_associative_heterogeneous_erasure
+#    error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_associative_heterogeneous_insertion
+#    error "__cpp_lib_associative_heterogeneous_insertion should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_generic_unordered_lookup
+#    error "__cpp_lib_generic_unordered_lookup should not be defined before c++20"
+#  endif
+
+#  ifndef __cpp_lib_node_extract
+#    error "__cpp_lib_node_extract should be defined in c++17"
+#  endif
+#  if __cpp_lib_node_extract != 201606L
+#    error "__cpp_lib_node_extract should have the value 201606L in c++17"
+#  endif
+
+#  ifndef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should be defined in c++17"
+#  endif
+#  if __cpp_lib_nonmember_container_access != 201411L
+#    error "__cpp_lib_nonmember_container_access should have the value 201411L in c++17"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifndef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++20"
+#  endif
+#  if __cpp_lib_allocator_traits_is_always_equal != 201411L
+#    error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++20"
+#  endif
+
+#  ifdef __cpp_lib_associative_heterogeneous_erasure
+#    error "__cpp_lib_associative_heterogeneous_erasure should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_associative_heterogeneous_insertion
+#    error "__cpp_lib_associative_heterogeneous_insertion should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should not be defined before c++23"
+#  endif
+
+#  ifndef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should be defined in c++20"
+#  endif
+#  if __cpp_lib_erase_if != 202002L
+#    error "__cpp_lib_erase_if should have the value 202002L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_generic_unordered_lookup
+#    error "__cpp_lib_generic_unordered_lookup should be defined in c++20"
+#  endif
+#  if __cpp_lib_generic_unordered_lookup != 201811L
+#    error "__cpp_lib_generic_unordered_lookup should have the value 201811L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_node_extract
+#    error "__cpp_lib_node_extract should be defined in c++20"
+#  endif
+#  if __cpp_lib_node_extract != 201606L
+#    error "__cpp_lib_node_extract should have the value 201606L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should be defined in c++20"
+#  endif
+#  if __cpp_lib_nonmember_container_access != 201411L
+#    error "__cpp_lib_nonmember_container_access should have the value 201411L in c++20"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifndef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++23"
+#  endif
+#  if __cpp_lib_allocator_traits_is_always_equal != 201411L
+#    error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++23"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_associative_heterogeneous_erasure
+#      error "__cpp_lib_associative_heterogeneous_erasure should be defined in c++23"
+#    endif
+#    if __cpp_lib_associative_heterogeneous_erasure != 202110L
+#      error "__cpp_lib_associative_heterogeneous_erasure should have the value 202110L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_associative_heterogeneous_erasure
+#      error "__cpp_lib_associative_heterogeneous_erasure should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifdef __cpp_lib_associative_heterogeneous_insertion
+#    error "__cpp_lib_associative_heterogeneous_insertion should not be defined before c++26"
+#  endif
+
+#  ifndef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should be defined in c++23"
+#  endif
+#  if __cpp_lib_containers_ranges != 202202L
+#    error "__cpp_lib_containers_ranges should have the value 202202L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should be defined in c++23"
+#  endif
+#  if __cpp_lib_erase_if != 202002L
+#    error "__cpp_lib_erase_if should have the value 202002L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_generic_unordered_lookup
+#    error "__cpp_lib_generic_unordered_lookup should be defined in c++23"
+#  endif
+#  if __cpp_lib_generic_unordered_lookup != 201811L
+#    error "__cpp_lib_generic_unordered_lookup should have the value 201811L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_node_extract
+#    error "__cpp_lib_node_extract should be defined in c++23"
+#  endif
+#  if __cpp_lib_node_extract != 201606L
+#    error "__cpp_lib_node_extract should have the value 201606L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should be defined in c++23"
+#  endif
+#  if __cpp_lib_nonmember_container_access != 201411L
+#    error "__cpp_lib_nonmember_container_access should have the value 201411L in c++23"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  ifndef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++26"
+#  endif
+#  if __cpp_lib_allocator_traits_is_always_equal != 201411L
+#    error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++26"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_associative_heterogeneous_erasure
+#      error "__cpp_lib_associative_heterogeneous_erasure should be defined in c++26"
+#    endif
+#    if __cpp_lib_associative_heterogeneous_erasure != 202110L
+#      error "__cpp_lib_associative_heterogeneous_erasure should have the value 202110L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_associative_heterogeneous_erasure
+#      error "__cpp_lib_associative_heterogeneous_erasure should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_associative_heterogeneous_insertion
+#      error "__cpp_lib_associative_heterogeneous_insertion should be defined in c++26"
+#    endif
+#    if __cpp_lib_associative_heterogeneous_insertion != 202306L
+#      error "__cpp_lib_associative_heterogeneous_insertion should have the value 202306L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_associative_heterogeneous_insertion
+#      error "__cpp_lib_associative_heterogeneous_insertion should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should be defined in c++26"
+#  endif
+#  if __cpp_lib_containers_ranges != 202202L
+#    error "__cpp_lib_containers_ranges should have the value 202202L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should be defined in c++26"
+#  endif
+#  if __cpp_lib_erase_if != 202002L
+#    error "__cpp_lib_erase_if should have the value 202002L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_generic_unordered_lookup
+#    error "__cpp_lib_generic_unordered_lookup should be defined in c++26"
+#  endif
+#  if __cpp_lib_generic_unordered_lookup != 201811L
+#    error "__cpp_lib_generic_unordered_lookup should have the value 201811L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_node_extract
+#    error "__cpp_lib_node_extract should be defined in c++26"
+#  endif
+#  if __cpp_lib_node_extract != 201606L
+#    error "__cpp_lib_node_extract should have the value 201606L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should be defined in c++26"
+#  endif
+#  if __cpp_lib_nonmember_container_access != 201411L
+#    error "__cpp_lib_nonmember_container_access should have the value 201411L in c++26"
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/utility.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/utility.version.compile.pass.cpp
new file mode 100644
index 0000000000000..de463f5e0c9e8
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/utility.version.compile.pass.cpp
@@ -0,0 +1,496 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <utility>
+
+// Test the feature test macros defined by <utility>
+
+// clang-format off
+
+#include <utility>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_as_const
+#    error "__cpp_lib_as_const should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_constexpr_algorithms
+#    error "__cpp_lib_constexpr_algorithms should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_constexpr_utility
+#    error "__cpp_lib_constexpr_utility should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_constrained_equality
+#    error "__cpp_lib_constrained_equality should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_exchange_function
+#    error "__cpp_lib_exchange_function should not be defined before c++14"
+#  endif
+
+#  ifdef __cpp_lib_forward_like
+#    error "__cpp_lib_forward_like should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_integer_comparison_functions
+#    error "__cpp_lib_integer_comparison_functions should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_integer_sequence
+#    error "__cpp_lib_integer_sequence should not be defined before c++14"
+#  endif
+
+#  ifdef __cpp_lib_ranges_zip
+#    error "__cpp_lib_ranges_zip should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_to_underlying
+#    error "__cpp_lib_to_underlying should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_tuple_like
+#    error "__cpp_lib_tuple_like should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_tuples_by_type
+#    error "__cpp_lib_tuples_by_type should not be defined before c++14"
+#  endif
+
+#  ifdef __cpp_lib_unreachable
+#    error "__cpp_lib_unreachable should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_as_const
+#    error "__cpp_lib_as_const should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_constexpr_algorithms
+#    error "__cpp_lib_constexpr_algorithms should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_constexpr_utility
+#    error "__cpp_lib_constexpr_utility should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_constrained_equality
+#    error "__cpp_lib_constrained_equality should not be defined before c++26"
+#  endif
+
+#  ifndef __cpp_lib_exchange_function
+#    error "__cpp_lib_exchange_function should be defined in c++14"
+#  endif
+#  if __cpp_lib_exchange_function != 201304L
+#    error "__cpp_lib_exchange_function should have the value 201304L in c++14"
+#  endif
+
+#  ifdef __cpp_lib_forward_like
+#    error "__cpp_lib_forward_like should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_integer_comparison_functions
+#    error "__cpp_lib_integer_comparison_functions should not be defined before c++20"
+#  endif
+
+#  ifndef __cpp_lib_integer_sequence
+#    error "__cpp_lib_integer_sequence should be defined in c++14"
+#  endif
+#  if __cpp_lib_integer_sequence != 201304L
+#    error "__cpp_lib_integer_sequence should have the value 201304L in c++14"
+#  endif
+
+#  ifdef __cpp_lib_ranges_zip
+#    error "__cpp_lib_ranges_zip should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_to_underlying
+#    error "__cpp_lib_to_underlying should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_tuple_like
+#    error "__cpp_lib_tuple_like should not be defined before c++23"
+#  endif
+
+#  ifndef __cpp_lib_tuples_by_type
+#    error "__cpp_lib_tuples_by_type should be defined in c++14"
+#  endif
+#  if __cpp_lib_tuples_by_type != 201304L
+#    error "__cpp_lib_tuples_by_type should have the value 201304L in c++14"
+#  endif
+
+#  ifdef __cpp_lib_unreachable
+#    error "__cpp_lib_unreachable should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifndef __cpp_lib_as_const
+#    error "__cpp_lib_as_const should be defined in c++17"
+#  endif
+#  if __cpp_lib_as_const != 201510L
+#    error "__cpp_lib_as_const should have the value 201510L in c++17"
+#  endif
+
+#  ifdef __cpp_lib_constexpr_algorithms
+#    error "__cpp_lib_constexpr_algorithms should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_constexpr_utility
+#    error "__cpp_lib_constexpr_utility should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_constrained_equality
+#    error "__cpp_lib_constrained_equality should not be defined before c++26"
+#  endif
+
+#  ifndef __cpp_lib_exchange_function
+#    error "__cpp_lib_exchange_function should be defined in c++17"
+#  endif
+#  if __cpp_lib_exchange_function != 201304L
+#    error "__cpp_lib_exchange_function should have the value 201304L in c++17"
+#  endif
+
+#  ifdef __cpp_lib_forward_like
+#    error "__cpp_lib_forward_like should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_integer_comparison_functions
+#    error "__cpp_lib_integer_comparison_functions should not be defined before c++20"
+#  endif
+
+#  ifndef __cpp_lib_integer_sequence
+#    error "__cpp_lib_integer_sequence should be defined in c++17"
+#  endif
+#  if __cpp_lib_integer_sequence != 201304L
+#    error "__cpp_lib_integer_sequence should have the value 201304L in c++17"
+#  endif
+
+#  ifdef __cpp_lib_ranges_zip
+#    error "__cpp_lib_ranges_zip should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_to_underlying
+#    error "__cpp_lib_to_underlying should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_tuple_like
+#    error "__cpp_lib_tuple_like should not be defined before c++23"
+#  endif
+
+#  ifndef __cpp_lib_tuples_by_type
+#    error "__cpp_lib_tuples_by_type should be defined in c++17"
+#  endif
+#  if __cpp_lib_tuples_by_type != 201304L
+#    error "__cpp_lib_tuples_by_type should have the value 201304L in c++17"
+#  endif
+
+#  ifdef __cpp_lib_unreachable
+#    error "__cpp_lib_unreachable should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifndef __cpp_lib_as_const
+#    error "__cpp_lib_as_const should be defined in c++20"
+#  endif
+#  if __cpp_lib_as_const != 201510L
+#    error "__cpp_lib_as_const should have the value 201510L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_constexpr_algorithms
+#    error "__cpp_lib_constexpr_algorithms should be defined in c++20"
+#  endif
+#  if __cpp_lib_constexpr_algorithms != 201806L
+#    error "__cpp_lib_constexpr_algorithms should have the value 201806L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_constexpr_utility
+#    error "__cpp_lib_constexpr_utility should be defined in c++20"
+#  endif
+#  if __cpp_lib_constexpr_utility != 201811L
+#    error "__cpp_lib_constexpr_utility should have the value 201811L in c++20"
+#  endif
+
+#  ifdef __cpp_lib_constrained_equality
+#    error "__cpp_lib_constrained_equality should not be defined before c++26"
+#  endif
+
+#  ifndef __cpp_lib_exchange_function
+#    error "__cpp_lib_exchange_function should be defined in c++20"
+#  endif
+#  if __cpp_lib_exchange_function != 201304L
+#    error "__cpp_lib_exchange_function should have the value 201304L in c++20"
+#  endif
+
+#  ifdef __cpp_lib_forward_like
+#    error "__cpp_lib_forward_like should not be defined before c++23"
+#  endif
+
+#  ifndef __cpp_lib_integer_comparison_functions
+#    error "__cpp_lib_integer_comparison_functions should be defined in c++20"
+#  endif
+#  if __cpp_lib_integer_comparison_functions != 202002L
+#    error "__cpp_lib_integer_comparison_functions should have the value 202002L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_integer_sequence
+#    error "__cpp_lib_integer_sequence should be defined in c++20"
+#  endif
+#  if __cpp_lib_integer_sequence != 201304L
+#    error "__cpp_lib_integer_sequence should have the value 201304L in c++20"
+#  endif
+
+#  ifdef __cpp_lib_ranges_zip
+#    error "__cpp_lib_ranges_zip should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_to_underlying
+#    error "__cpp_lib_to_underlying should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_tuple_like
+#    error "__cpp_lib_tuple_like should not be defined before c++23"
+#  endif
+
+#  ifndef __cpp_lib_tuples_by_type
+#    error "__cpp_lib_tuples_by_type should be defined in c++20"
+#  endif
+#  if __cpp_lib_tuples_by_type != 201304L
+#    error "__cpp_lib_tuples_by_type should have the value 201304L in c++20"
+#  endif
+
+#  ifdef __cpp_lib_unreachable
+#    error "__cpp_lib_unreachable should not be defined before c++23"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifndef __cpp_lib_as_const
+#    error "__cpp_lib_as_const should be defined in c++23"
+#  endif
+#  if __cpp_lib_as_const != 201510L
+#    error "__cpp_lib_as_const should have the value 201510L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_constexpr_algorithms
+#    error "__cpp_lib_constexpr_algorithms should be defined in c++23"
+#  endif
+#  if __cpp_lib_constexpr_algorithms != 201806L
+#    error "__cpp_lib_constexpr_algorithms should have the value 201806L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_constexpr_utility
+#    error "__cpp_lib_constexpr_utility should be defined in c++23"
+#  endif
+#  if __cpp_lib_constexpr_utility != 201811L
+#    error "__cpp_lib_constexpr_utility should have the value 201811L in c++23"
+#  endif
+
+#  ifdef __cpp_lib_constrained_equality
+#    error "__cpp_lib_constrained_equality should not be defined before c++26"
+#  endif
+
+#  ifndef __cpp_lib_exchange_function
+#    error "__cpp_lib_exchange_function should be defined in c++23"
+#  endif
+#  if __cpp_lib_exchange_function != 201304L
+#    error "__cpp_lib_exchange_function should have the value 201304L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_forward_like
+#    error "__cpp_lib_forward_like should be defined in c++23"
+#  endif
+#  if __cpp_lib_forward_like != 202207L
+#    error "__cpp_lib_forward_like should have the value 202207L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_integer_comparison_functions
+#    error "__cpp_lib_integer_comparison_functions should be defined in c++23"
+#  endif
+#  if __cpp_lib_integer_comparison_functions != 202002L
+#    error "__cpp_lib_integer_comparison_functions should have the value 202002L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_integer_sequence
+#    error "__cpp_lib_integer_sequence should be defined in c++23"
+#  endif
+#  if __cpp_lib_integer_sequence != 201304L
+#    error "__cpp_lib_integer_sequence should have the value 201304L in c++23"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_ranges_zip
+#      error "__cpp_lib_ranges_zip should be defined in c++23"
+#    endif
+#    if __cpp_lib_ranges_zip != 202110L
+#      error "__cpp_lib_ranges_zip should have the value 202110L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_ranges_zip
+#      error "__cpp_lib_ranges_zip should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_to_underlying
+#    error "__cpp_lib_to_underlying should be defined in c++23"
+#  endif
+#  if __cpp_lib_to_underlying != 202102L
+#    error "__cpp_lib_to_underlying should have the value 202102L in c++23"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_tuple_like
+#      error "__cpp_lib_tuple_like should be defined in c++23"
+#    endif
+#    if __cpp_lib_tuple_like != 202207L
+#      error "__cpp_lib_tuple_like should have the value 202207L in c++23"
+#    endif
+#  else
+#    ifdef __cpp_lib_tuple_like
+#      error "__cpp_lib_tuple_like should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_tuples_by_type
+#    error "__cpp_lib_tuples_by_type should be defined in c++23"
+#  endif
+#  if __cpp_lib_tuples_by_type != 201304L
+#    error "__cpp_lib_tuples_by_type should have the value 201304L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_unreachable
+#    error "__cpp_lib_unreachable should be defined in c++23"
+#  endif
+#  if __cpp_lib_unreachable != 202202L
+#    error "__cpp_lib_unreachable should have the value 202202L in c++23"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  ifndef __cpp_lib_as_const
+#    error "__cpp_lib_as_const should be defined in c++26"
+#  endif
+#  if __cpp_lib_as_const != 201510L
+#    error "__cpp_lib_as_const should have the value 201510L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_constexpr_algorithms
+#    error "__cpp_lib_constexpr_algorithms should be defined in c++26"
+#  endif
+#  if __cpp_lib_constexpr_algorithms != 202306L
+#    error "__cpp_lib_constexpr_algorithms should have the value 202306L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_constexpr_utility
+#    error "__cpp_lib_constexpr_utility should be defined in c++26"
+#  endif
+#  if __cpp_lib_constexpr_utility != 201811L
+#    error "__cpp_lib_constexpr_utility should have the value 201811L in c++26"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_constrained_equality
+#      error "__cpp_lib_constrained_equality should be defined in c++26"
+#    endif
+#    if __cpp_lib_constrained_equality != 202403L
+#      error "__cpp_lib_constrained_equality should have the value 202403L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_constrained_equality
+#      error "__cpp_lib_constrained_equality should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_exchange_function
+#    error "__cpp_lib_exchange_function should be defined in c++26"
+#  endif
+#  if __cpp_lib_exchange_function != 201304L
+#    error "__cpp_lib_exchange_function should have the value 201304L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_forward_like
+#    error "__cpp_lib_forward_like should be defined in c++26"
+#  endif
+#  if __cpp_lib_forward_like != 202207L
+#    error "__cpp_lib_forward_like should have the value 202207L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_integer_comparison_functions
+#    error "__cpp_lib_integer_comparison_functions should be defined in c++26"
+#  endif
+#  if __cpp_lib_integer_comparison_functions != 202002L
+#    error "__cpp_lib_integer_comparison_functions should have the value 202002L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_integer_sequence
+#    error "__cpp_lib_integer_sequence should be defined in c++26"
+#  endif
+#  if __cpp_lib_integer_sequence != 201304L
+#    error "__cpp_lib_integer_sequence should have the value 201304L in c++26"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_ranges_zip
+#      error "__cpp_lib_ranges_zip should be defined in c++26"
+#    endif
+#    if __cpp_lib_ranges_zip != 202110L
+#      error "__cpp_lib_ranges_zip should have the value 202110L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_ranges_zip
+#      error "__cpp_lib_ranges_zip should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_to_underlying
+#    error "__cpp_lib_to_underlying should be defined in c++26"
+#  endif
+#  if __cpp_lib_to_underlying != 202102L
+#    error "__cpp_lib_to_underlying should have the value 202102L in c++26"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_tuple_like
+#      error "__cpp_lib_tuple_like should be defined in c++26"
+#    endif
+#    if __cpp_lib_tuple_like != 202311L
+#      error "__cpp_lib_tuple_like should have the value 202311L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_tuple_like
+#      error "__cpp_lib_tuple_like should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_tuples_by_type
+#    error "__cpp_lib_tuples_by_type should be defined in c++26"
+#  endif
+#  if __cpp_lib_tuples_by_type != 201304L
+#    error "__cpp_lib_tuples_by_type should have the value 201304L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_unreachable
+#    error "__cpp_lib_unreachable should be defined in c++26"
+#  endif
+#  if __cpp_lib_unreachable != 202202L
+#    error "__cpp_lib_unreachable should have the value 202202L in c++26"
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/variant.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/variant.version.compile.pass.cpp
new file mode 100644
index 0000000000000..3c901facca1bb
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/variant.version.compile.pass.cpp
@@ -0,0 +1,139 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <variant>
+
+// Test the feature test macros defined by <variant>
+
+// clang-format off
+
+#include <variant>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_constrained_equality
+#    error "__cpp_lib_constrained_equality should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_freestanding_variant
+#    error "__cpp_lib_freestanding_variant should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_variant
+#    error "__cpp_lib_variant should not be defined before c++17"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_constrained_equality
+#    error "__cpp_lib_constrained_equality should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_freestanding_variant
+#    error "__cpp_lib_freestanding_variant should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_variant
+#    error "__cpp_lib_variant should not be defined before c++17"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifdef __cpp_lib_constrained_equality
+#    error "__cpp_lib_constrained_equality should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_freestanding_variant
+#    error "__cpp_lib_freestanding_variant should not be defined before c++26"
+#  endif
+
+#  ifndef __cpp_lib_variant
+#    error "__cpp_lib_variant should be defined in c++17"
+#  endif
+#  if __cpp_lib_variant != 202102L
+#    error "__cpp_lib_variant should have the value 202102L in c++17"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifdef __cpp_lib_constrained_equality
+#    error "__cpp_lib_constrained_equality should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_freestanding_variant
+#    error "__cpp_lib_freestanding_variant should not be defined before c++26"
+#  endif
+
+#  ifndef __cpp_lib_variant
+#    error "__cpp_lib_variant should be defined in c++20"
+#  endif
+#  if __cpp_lib_variant != 202106L
+#    error "__cpp_lib_variant should have the value 202106L in c++20"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifdef __cpp_lib_constrained_equality
+#    error "__cpp_lib_constrained_equality should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_freestanding_variant
+#    error "__cpp_lib_freestanding_variant should not be defined before c++26"
+#  endif
+
+#  ifndef __cpp_lib_variant
+#    error "__cpp_lib_variant should be defined in c++23"
+#  endif
+#  if __cpp_lib_variant != 202106L
+#    error "__cpp_lib_variant should have the value 202106L in c++23"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_constrained_equality
+#      error "__cpp_lib_constrained_equality should be defined in c++26"
+#    endif
+#    if __cpp_lib_constrained_equality != 202403L
+#      error "__cpp_lib_constrained_equality should have the value 202403L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_constrained_equality
+#      error "__cpp_lib_constrained_equality should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_freestanding_variant
+#      error "__cpp_lib_freestanding_variant should be defined in c++26"
+#    endif
+#    if __cpp_lib_freestanding_variant != 202311L
+#      error "__cpp_lib_freestanding_variant should have the value 202311L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_freestanding_variant
+#      error "__cpp_lib_freestanding_variant should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_variant
+#    error "__cpp_lib_variant should be defined in c++26"
+#  endif
+#  if __cpp_lib_variant != 202306L
+#    error "__cpp_lib_variant should have the value 202306L in c++26"
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/v2/vector.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/vector.version.compile.pass.cpp
new file mode 100644
index 0000000000000..16b7f1db9134f
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/v2/vector.version.compile.pass.cpp
@@ -0,0 +1,274 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// WARNING: This test was generated by
+// generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// <vector>
+
+// Test the feature test macros defined by <vector>
+
+// clang-format off
+
+#include <vector>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+#  ifdef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_constexpr_vector
+#    error "__cpp_lib_constexpr_vector should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_default_template_type_for_algorithm_values
+#    error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_incomplete_container_elements
+#    error "__cpp_lib_incomplete_container_elements should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should not be defined before c++17"
+#  endif
+
+#elif TEST_STD_VER == 14
+
+#  ifdef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_constexpr_vector
+#    error "__cpp_lib_constexpr_vector should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_default_template_type_for_algorithm_values
+#    error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_incomplete_container_elements
+#    error "__cpp_lib_incomplete_container_elements should not be defined before c++17"
+#  endif
+
+#  ifdef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should not be defined before c++17"
+#  endif
+
+#elif TEST_STD_VER == 17
+
+#  ifndef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++17"
+#  endif
+#  if __cpp_lib_allocator_traits_is_always_equal != 201411L
+#    error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++17"
+#  endif
+
+#  ifdef __cpp_lib_constexpr_vector
+#    error "__cpp_lib_constexpr_vector should not be defined before c++20"
+#  endif
+
+#  ifdef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_default_template_type_for_algorithm_values
+#    error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26"
+#  endif
+
+#  ifdef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should not be defined before c++20"
+#  endif
+
+#  ifndef __cpp_lib_incomplete_container_elements
+#    error "__cpp_lib_incomplete_container_elements should be defined in c++17"
+#  endif
+#  if __cpp_lib_incomplete_container_elements != 201505L
+#    error "__cpp_lib_incomplete_container_elements should have the value 201505L in c++17"
+#  endif
+
+#  ifndef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should be defined in c++17"
+#  endif
+#  if __cpp_lib_nonmember_container_access != 201411L
+#    error "__cpp_lib_nonmember_container_access should have the value 201411L in c++17"
+#  endif
+
+#elif TEST_STD_VER == 20
+
+#  ifndef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++20"
+#  endif
+#  if __cpp_lib_allocator_traits_is_always_equal != 201411L
+#    error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_constexpr_vector
+#    error "__cpp_lib_constexpr_vector should be defined in c++20"
+#  endif
+#  if __cpp_lib_constexpr_vector != 201907L
+#    error "__cpp_lib_constexpr_vector should have the value 201907L in c++20"
+#  endif
+
+#  ifdef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should not be defined before c++23"
+#  endif
+
+#  ifdef __cpp_lib_default_template_type_for_algorithm_values
+#    error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26"
+#  endif
+
+#  ifndef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should be defined in c++20"
+#  endif
+#  if __cpp_lib_erase_if != 202002L
+#    error "__cpp_lib_erase_if should have the value 202002L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_incomplete_container_elements
+#    error "__cpp_lib_incomplete_container_elements should be defined in c++20"
+#  endif
+#  if __cpp_lib_incomplete_container_elements != 201505L
+#    error "__cpp_lib_incomplete_container_elements should have the value 201505L in c++20"
+#  endif
+
+#  ifndef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should be defined in c++20"
+#  endif
+#  if __cpp_lib_nonmember_container_access != 201411L
+#    error "__cpp_lib_nonmember_container_access should have the value 201411L in c++20"
+#  endif
+
+#elif TEST_STD_VER == 23
+
+#  ifndef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++23"
+#  endif
+#  if __cpp_lib_allocator_traits_is_always_equal != 201411L
+#    error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_constexpr_vector
+#    error "__cpp_lib_constexpr_vector should be defined in c++23"
+#  endif
+#  if __cpp_lib_constexpr_vector != 201907L
+#    error "__cpp_lib_constexpr_vector should have the value 201907L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should be defined in c++23"
+#  endif
+#  if __cpp_lib_containers_ranges != 202202L
+#    error "__cpp_lib_containers_ranges should have the value 202202L in c++23"
+#  endif
+
+#  ifdef __cpp_lib_default_template_type_for_algorithm_values
+#    error "__cpp_lib_default_template_type_for_algorithm_values should not be defined before c++26"
+#  endif
+
+#  ifndef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should be defined in c++23"
+#  endif
+#  if __cpp_lib_erase_if != 202002L
+#    error "__cpp_lib_erase_if should have the value 202002L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_incomplete_container_elements
+#    error "__cpp_lib_incomplete_container_elements should be defined in c++23"
+#  endif
+#  if __cpp_lib_incomplete_container_elements != 201505L
+#    error "__cpp_lib_incomplete_container_elements should have the value 201505L in c++23"
+#  endif
+
+#  ifndef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should be defined in c++23"
+#  endif
+#  if __cpp_lib_nonmember_container_access != 201411L
+#    error "__cpp_lib_nonmember_container_access should have the value 201411L in c++23"
+#  endif
+
+#elif TEST_STD_VER > 23
+
+#  ifndef __cpp_lib_allocator_traits_is_always_equal
+#    error "__cpp_lib_allocator_traits_is_always_equal should be defined in c++26"
+#  endif
+#  if __cpp_lib_allocator_traits_is_always_equal != 201411L
+#    error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_constexpr_vector
+#    error "__cpp_lib_constexpr_vector should be defined in c++26"
+#  endif
+#  if __cpp_lib_constexpr_vector != 201907L
+#    error "__cpp_lib_constexpr_vector should have the value 201907L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_containers_ranges
+#    error "__cpp_lib_containers_ranges should be defined in c++26"
+#  endif
+#  if __cpp_lib_containers_ranges != 202202L
+#    error "__cpp_lib_containers_ranges should have the value 202202L in c++26"
+#  endif
+
+#  if !defined(_LIBCPP_VERSION)
+#    ifndef __cpp_lib_default_template_type_for_algorithm_values
+#      error "__cpp_lib_default_template_type_for_algorithm_values should be defined in c++26"
+#    endif
+#    if __cpp_lib_default_template_type_for_algorithm_values != 202403L
+#      error "__cpp_lib_default_template_type_for_algorithm_values should have the value 202403L in c++26"
+#    endif
+#  else
+#    ifdef __cpp_lib_default_template_type_for_algorithm_values
+#      error "__cpp_lib_default_template_type_for_algorithm_values should not be defined because it is unimplemented in libc++!"
+#    endif
+#  endif
+
+#  ifndef __cpp_lib_erase_if
+#    error "__cpp_lib_erase_if should be defined in c++26"
+#  endif
+#  if __cpp_lib_erase_if != 202002L
+#    error "__cpp_lib_erase_if should have the value 202002L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_incomplete_container_elements
+#    error "__cpp_lib_incomplete_container_elements should be defined in c++26"
+#  endif
+#  if __cpp_lib_incomplete_container_elements != 201505L
+#    error "__cpp_lib_incomplete_container_elements should have the value 201505L in c++26"
+#  endif
+
+#  ifndef __cpp_lib_nonmember_container_access
+#    error "__cpp_lib_nonmember_container_access should be defined in c++26"
+#  endif
+#  if __cpp_lib_nonmember_container_access != 201411L
+#    error "__cpp_lib_nonmember_container_access should have the value 201411L in c++26"
+#  endif
+
+#endif // TEST_STD_VER > 23
+
+// clang-format on
+
diff --git a/libcxx/utils/data/feature_test_macro/data.json b/libcxx/utils/data/feature_test_macro/data.json
new file mode 100644
index 0000000000000..bf802c2fbdaae
--- /dev/null
+++ b/libcxx/utils/data/feature_test_macro/data.json
@@ -0,0 +1,3000 @@
+[
+  {
+    "name": "__cpp_lib_adaptor_iterator_pair_constructor",
+    "values": {
+      "c++23": {
+        "202106": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["queue", "stack"]
+  },
+  {
+    "name": "__cpp_lib_addressof_constexpr",
+    "values": {
+      "c++17": {
+        "201603": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["memory"]
+  },
+  {
+    "name": "__cpp_lib_allocate_at_least",
+    "values": {
+      "c++23": {
+        "202302": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["memory"]
+  },
+  {
+    "name": "__cpp_lib_allocator_traits_is_always_equal",
+    "values": {
+      "c++17": {
+        "201411": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["deque", "forward_list", "list", "map", "memory", "scoped_allocator", "set", "string", "unordered_map", "unordered_set", "vector"]
+  },
+  {
+    "name": "__cpp_lib_any",
+    "values": {
+      "c++17": {
+        "201606": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["any"]
+  },
+  {
+    "name": "__cpp_lib_apply",
+    "values": {
+      "c++17": {
+        "201603": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["tuple"]
+  },
+  {
+    "name": "__cpp_lib_array_constexpr",
+    "values": {
+      "c++17": {
+        "201603": [
+          {
+            "implemented": true
+          }
+        ]
+      },
+      "c++20": {
+        "201811": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["array", "iterator"]
+  },
+  {
+    "name": "__cpp_lib_as_const",
+    "values": {
+      "c++17": {
+        "201510": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["utility"]
+  },
+  {
+    "name": "__cpp_lib_associative_heterogeneous_erasure",
+    "values": {
+      "c++23": {
+        "202110": [
+          {
+            "implemented": false
+          }
+        ]
+      }
+    },
+    "headers": ["map", "set", "unordered_map", "unordered_set"]
+  },
+  {
+    "name": "__cpp_lib_associative_heterogeneous_insertion",
+    "values": {
+      "c++26": {
+        "202306": [
+          {
+            "implemented": false
+          }
+        ]
+      }
+    },
+    "headers": ["map", "set", "unordered_map", "unordered_set"]
+  },
+  {
+    "name": "__cpp_lib_assume_aligned",
+    "values": {
+      "c++20": {
+        "201811": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["memory"]
+  },
+  {
+    "name": "__cpp_lib_atomic_flag_test",
+    "values": {
+      "c++20": {
+        "201907": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["atomic"]
+  },
+  {
+    "name": "__cpp_lib_atomic_float",
+    "values": {
+      "c++20": {
+        "201711": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["atomic"]
+  },
+  {
+    "name": "__cpp_lib_atomic_is_always_lock_free",
+    "values": {
+      "c++17": {
+        "201603": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["atomic"]
+  },
+  {
+    "name": "__cpp_lib_atomic_lock_free_type_aliases",
+    "values": {
+      "c++20": {
+        "201907": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["atomic"]
+  },
+  {
+    "name": "__cpp_lib_atomic_min_max",
+    "values": {
+      "c++26": {
+        "202403": [
+          {
+            "implemented": false
+          }
+        ]
+      }
+    },
+    "headers": ["atomic"]
+  },
+  {
+    "name": "__cpp_lib_atomic_ref",
+    "values": {
+      "c++20": {
+        "201806": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["atomic"]
+  },
+  {
+    "name": "__cpp_lib_atomic_shared_ptr",
+    "values": {
+      "c++20": {
+        "201711": [
+          {
+            "implemented": false
+          }
+        ]
+      }
+    },
+    "headers": ["atomic"]
+  },
+  {
+    "name": "__cpp_lib_atomic_value_initialization",
+    "values": {
+      "c++20": {
+        "201911": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["atomic", "memory"]
+  },
+  {
+    "name": "__cpp_lib_atomic_wait",
+    "values": {
+      "c++20": {
+        "201907": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["atomic"],
+    "test_suite_guard": "!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_SYNC",
+    "libcxx_guard": "_LIBCPP_AVAILABILITY_HAS_SYNC"
+  },
+  {
+    "name": "__cpp_lib_barrier",
+    "values": {
+      "c++20": {
+        "201907": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["barrier"],
+    "test_suite_guard": "!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)",
+    "libcxx_guard": "_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC"
+  },
+  {
+    "name": "__cpp_lib_bind_back",
+    "values": {
+      "c++23": {
+        "202202": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["functional"]
+  },
+  {
+    "name": "__cpp_lib_bind_front",
+    "values": {
+      "c++20": {
+        "201907": [
+          {
+            "implemented": true
+          }
+        ]
+      },
+      "c++26": {
+        "202306": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["functional"]
+  },
+  {
+    "name": "__cpp_lib_bit_cast",
+    "values": {
+      "c++20": {
+        "201806": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["bit"]
+  },
+  {
+    "name": "__cpp_lib_bitops",
+    "values": {
+      "c++20": {
+        "201907": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["bit"]
+  },
+  {
+    "name": "__cpp_lib_bitset",
+    "values": {
+      "c++26": {
+        "202306": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["bitset"]
+  },
+  {
+    "name": "__cpp_lib_bool_constant",
+    "values": {
+      "c++17": {
+        "201505": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["type_traits"]
+  },
+  {
+    "name": "__cpp_lib_bounded_array_traits",
+    "values": {
+      "c++20": {
+        "201902": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["type_traits"]
+  },
+  {
+    "name": "__cpp_lib_boyer_moore_searcher",
+    "values": {
+      "c++17": {
+        "201603": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["functional"]
+  },
+  {
+    "name": "__cpp_lib_byte",
+    "values": {
+      "c++17": {
+        "201603": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["cstddef"]
+  },
+  {
+    "name": "__cpp_lib_byteswap",
+    "values": {
+      "c++23": {
+        "202110": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["bit"]
+  },
+  {
+    "name": "__cpp_lib_char8_t",
+    "values": {
+      "c++20": {
+        "201907": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["atomic", "filesystem", "istream", "limits", "locale", "ostream", "string", "string_view"],
+    "test_suite_guard": "defined(__cpp_char8_t)",
+    "libcxx_guard": "_LIBCPP_HAS_CHAR8_T"
+  },
+  {
+    "name": "__cpp_lib_chrono",
+    "values": {
+      "c++17": {
+        "201611": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["chrono"]
+  },
+  {
+    "name": "__cpp_lib_chrono_udls",
+    "values": {
+      "c++14": {
+        "201304": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["chrono"]
+  },
+  {
+    "name": "__cpp_lib_clamp",
+    "values": {
+      "c++17": {
+        "201603": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["algorithm"]
+  },
+  {
+    "name": "__cpp_lib_complex_udls",
+    "values": {
+      "c++14": {
+        "201309": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["complex"]
+  },
+  {
+    "name": "__cpp_lib_concepts",
+    "values": {
+      "c++20": {
+        "202002": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["concepts"]
+  },
+  {
+    "name": "__cpp_lib_constexpr_algorithms",
+    "values": {
+      "c++20": {
+        "201806": [
+          {
+            "implemented": true
+          }
+        ]
+      },
+      "c++26": {
+        "202306": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["algorithm", "utility"]
+  },
+  {
+    "name": "__cpp_lib_constexpr_bitset",
+    "values": {
+      "c++23": {
+        "202207": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["bitset"]
+  },
+  {
+    "name": "__cpp_lib_constexpr_charconv",
+    "values": {
+      "c++23": {
+        "202207": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["charconv"]
+  },
+  {
+    "name": "__cpp_lib_constexpr_cmath",
+    "values": {
+      "c++23": {
+        "202202": [
+          {
+            "implemented": false
+          }
+        ]
+      }
+    },
+    "headers": ["cmath", "cstdlib"]
+  },
+  {
+    "name": "__cpp_lib_constexpr_complex",
+    "values": {
+      "c++20": {
+        "201711": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["complex"]
+  },
+  {
+    "name": "__cpp_lib_constexpr_dynamic_alloc",
+    "values": {
+      "c++20": {
+        "201907": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["memory"]
+  },
+  {
+    "name": "__cpp_lib_constexpr_functional",
+    "values": {
+      "c++20": {
+        "201907": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["functional"]
+  },
+  {
+    "name": "__cpp_lib_constexpr_iterator",
+    "values": {
+      "c++20": {
+        "201811": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["iterator"]
+  },
+  {
+    "name": "__cpp_lib_constexpr_memory",
+    "values": {
+      "c++20": {
+        "201811": [
+          {
+            "implemented": true
+          }
+        ]
+      },
+      "c++23": {
+        "202202": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["memory"]
+  },
+  {
+    "name": "__cpp_lib_constexpr_new",
+    "values": {
+      "c++26": {
+        "202406": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["new"],
+    "test_suite_guard": "!defined(_LIBCPP_ABI_VCRUNTIME)",
+    "libcxx_guard": "!defined(_LIBCPP_ABI_VCRUNTIME)"
+  },
+  {
+    "name": "__cpp_lib_constexpr_numeric",
+    "values": {
+      "c++20": {
+        "201911": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["numeric"]
+  },
+  {
+    "name": "__cpp_lib_constexpr_string",
+    "values": {
+      "c++20": {
+        "201907": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["string"]
+  },
+  {
+    "name": "__cpp_lib_constexpr_string_view",
+    "values": {
+      "c++20": {
+        "201811": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["string_view"]
+  },
+  {
+    "name": "__cpp_lib_constexpr_tuple",
+    "values": {
+      "c++20": {
+        "201811": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["tuple"]
+  },
+  {
+    "name": "__cpp_lib_constexpr_typeinfo",
+    "values": {
+      "c++23": {
+        "202106": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["typeinfo"]
+  },
+  {
+    "name": "__cpp_lib_constexpr_utility",
+    "values": {
+      "c++20": {
+        "201811": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["utility"]
+  },
+  {
+    "name": "__cpp_lib_constexpr_vector",
+    "values": {
+      "c++20": {
+        "201907": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["vector"]
+  },
+  {
+    "name": "__cpp_lib_constrained_equality",
+    "values": {
+      "c++26": {
+        "202403": [
+          {
+            "implemented": false
+          }
+        ]
+      }
+    },
+    "headers": ["optional", "tuple", "utility", "variant"]
+  },
+  {
+    "name": "__cpp_lib_containers_ranges",
+    "values": {
+      "c++23": {
+        "202202": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["deque", "forward_list", "list", "map", "queue", "set", "stack", "string", "unordered_map", "unordered_set", "vector"]
+  },
+  {
+    "name": "__cpp_lib_copyable_function",
+    "values": {
+      "c++26": {
+        "202306": [
+          {
+            "implemented": false
+          }
+        ]
+      }
+    },
+    "headers": ["functional"]
+  },
+  {
+    "name": "__cpp_lib_coroutine",
+    "values": {
+      "c++20": {
+        "201902": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["coroutine"]
+  },
+  {
+    "name": "__cpp_lib_debugging",
+    "values": {
+      "c++26": {
+        "202311": [
+          {
+            "implemented": false
+          }
+        ]
+      }
+    },
+    "headers": ["debugging"]
+  },
+  {
+    "name": "__cpp_lib_default_template_type_for_algorithm_values",
+    "values": {
+      "c++26": {
+        "202403": [
+          {
+            "implemented": false
+          }
+        ]
+      }
+    },
+    "headers": ["algorithm", "deque", "forward_list", "list", "ranges", "string", "vector"]
+  },
+  {
+    "name": "__cpp_lib_destroying_delete",
+    "values": {
+      "c++20": {
+        "201806": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["new"],
+    "test_suite_guard": "TEST_STD_VER > 17 && defined(__cpp_impl_destroying_delete) && __cpp_impl_destroying_delete >= 201806L",
+    "libcxx_guard": "_LIBCPP_STD_VER >= 20 && defined(__cpp_impl_destroying_delete) && __cpp_impl_destroying_delete >= 201806L"
+  },
+  {
+    "name": "__cpp_lib_enable_shared_from_this",
+    "values": {
+      "c++17": {
+        "201603": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["memory"]
+  },
+  {
+    "name": "__cpp_lib_endian",
+    "values": {
+      "c++20": {
+        "201907": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["bit"]
+  },
+  {
+    "name": "__cpp_lib_erase_if",
+    "values": {
+      "c++20": {
+        "202002": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["deque", "forward_list", "list", "map", "set", "string", "unordered_map", "unordered_set", "vector"]
+  },
+  {
+    "name": "__cpp_lib_exchange_function",
+    "values": {
+      "c++14": {
+        "201304": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["utility"]
+  },
+  {
+    "name": "__cpp_lib_execution",
+    "values": {
+      "c++17": {
+        "201603": [
+          {
+            "implemented": false
+          }
+        ]
+      },
+      "c++20": {
+        "201902": [
+          {
+            "implemented": false
+          }
+        ]
+      }
+    },
+    "headers": ["execution"]
+  },
+  {
+    "name": "__cpp_lib_expected",
+    "values": {
+      "c++23": {
+        "202211": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["expected"]
+  },
+  {
+    "name": "__cpp_lib_filesystem",
+    "values": {
+      "c++17": {
+        "201703": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["filesystem"],
+    "test_suite_guard": "!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_FILESYSTEM && _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_LIBRARY)",
+    "libcxx_guard": "_LIBCPP_HAS_FILESYSTEM && _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_LIBRARY"
+  },
+  {
+    "name": "__cpp_lib_flat_map",
+    "values": {
+      "c++23": {
+        "202207": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["flat_map"]
+  },
+  {
+    "name": "__cpp_lib_flat_set",
+    "values": {
+      "c++23": {
+        "202207": [
+          {
+            "implemented": false
+          }
+        ]
+      }
+    },
+    "headers": ["flat_set"]
+  },
+  {
+    "name": "__cpp_lib_format",
+    "values": {
+      "c++20": {
+        "202110": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["format"],
+    "test_suite_guard": "!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT",
+    "libcxx_guard": "_LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT"
+  },
+  {
+    "name": "__cpp_lib_format_path",
+    "values": {
+      "c++26": {
+        "202403": [
+          {
+            "implemented": false
+          }
+        ]
+      }
+    },
+    "headers": ["filesystem"]
+  },
+  {
+    "name": "__cpp_lib_format_ranges",
+    "values": {
+      "c++23": {
+        "202207": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["format"]
+  },
+  {
+    "name": "__cpp_lib_format_uchar",
+    "values": {
+      "c++20": {
+        "202311": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["format"]
+  },
+  {
+    "name": "__cpp_lib_formatters",
+    "values": {
+      "c++23": {
+        "202302": [
+          {
+            "implemented": false
+          }
+        ]
+      }
+    },
+    "headers": ["stacktrace", "thread"]
+  },
+  {
+    "name": "__cpp_lib_forward_like",
+    "values": {
+      "c++23": {
+        "202207": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["utility"]
+  },
+  {
+    "name": "__cpp_lib_freestanding_algorithm",
+    "values": {
+      "c++26": {
+        "202311": [
+          {
+            "implemented": false
+          }
+        ]
+      }
+    },
+    "headers": ["algorithm"]
+  },
+  {
+    "name": "__cpp_lib_freestanding_array",
+    "values": {
+      "c++26": {
+        "202311": [
+          {
+            "implemented": false
+          }
+        ]
+      }
+    },
+    "headers": ["array"]
+  },
+  {
+    "name": "__cpp_lib_freestanding_cstring",
+    "values": {
+      "c++26": {
+        "202306": [
+          {
+            "implemented": false
+          }
+        ]
+      }
+    },
+    "headers": ["cstring"]
+  },
+  {
+    "name": "__cpp_lib_freestanding_expected",
+    "values": {
+      "c++26": {
+        "202311": [
+          {
+            "implemented": false
+          }
+        ]
+      }
+    },
+    "headers": ["expected"]
+  },
+  {
+    "name": "__cpp_lib_freestanding_mdspan",
+    "values": {
+      "c++26": {
+        "202311": [
+          {
+            "implemented": false
+          }
+        ]
+      }
+    },
+    "headers": ["mdspan"]
+  },
+  {
+    "name": "__cpp_lib_freestanding_optional",
+    "values": {
+      "c++26": {
+        "202311": [
+          {
+            "implemented": false
+          }
+        ]
+      }
+    },
+    "headers": ["optional"]
+  },
+  {
+    "name": "__cpp_lib_freestanding_string_view",
+    "values": {
+      "c++26": {
+        "202311": [
+          {
+            "implemented": false
+          }
+        ]
+      }
+    },
+    "headers": ["string_view"]
+  },
+  {
+    "name": "__cpp_lib_freestanding_variant",
+    "values": {
+      "c++26": {
+        "202311": [
+          {
+            "implemented": false
+          }
+        ]
+      }
+    },
+    "headers": ["variant"]
+  },
+  {
+    "name": "__cpp_lib_fstream_native_handle",
+    "values": {
+      "c++26": {
+        "202306": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["fstream"],
+    "test_suite_guard": "!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_FILESYSTEM && _LIBCPP_HAS_LOCALIZATION)",
+    "libcxx_guard": "_LIBCPP_HAS_FILESYSTEM && _LIBCPP_HAS_LOCALIZATION"
+  },
+  {
+    "name": "__cpp_lib_function_ref",
+    "values": {
+      "c++26": {
+        "202306": [
+          {
+            "implemented": false
+          }
+        ]
+      }
+    },
+    "headers": ["functional"]
+  },
+  {
+    "name": "__cpp_lib_gcd_lcm",
+    "values": {
+      "c++17": {
+        "201606": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["numeric"]
+  },
+  {
+    "name": "__cpp_lib_generate_random",
+    "values": {
+      "c++26": {
+        "202403": [
+          {
+            "implemented": false
+          }
+        ]
+      }
+    },
+    "headers": ["random"]
+  },
+  {
+    "name": "__cpp_lib_generic_associative_lookup",
+    "values": {
+      "c++14": {
+        "201304": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["map", "set"]
+  },
+  {
+    "name": "__cpp_lib_generic_unordered_lookup",
+    "values": {
+      "c++20": {
+        "201811": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["unordered_map", "unordered_set"]
+  },
+  {
+    "name": "__cpp_lib_hardware_interference_size",
+    "values": {
+      "c++17": {
+        "201703": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["new"],
+    "test_suite_guard": "!defined(_LIBCPP_VERSION) || (defined(__GCC_DESTRUCTIVE_SIZE) && defined(__GCC_CONSTRUCTIVE_SIZE))",
+    "libcxx_guard": "defined(__GCC_DESTRUCTIVE_SIZE) && defined(__GCC_CONSTRUCTIVE_SIZE)"
+  },
+  {
+    "name": "__cpp_lib_has_unique_object_representations",
+    "values": {
+      "c++17": {
+        "201606": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["type_traits"]
+  },
+  {
+    "name": "__cpp_lib_hazard_pointer",
+    "values": {
+      "c++26": {
+        "202306": [
+          {
+            "implemented": false
+          }
+        ]
+      }
+    },
+    "headers": ["hazard_pointer"]
+  },
+  {
+    "name": "__cpp_lib_hypot",
+    "values": {
+      "c++17": {
+        "201603": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["cmath"]
+  },
+  {
+    "name": "__cpp_lib_incomplete_container_elements",
+    "values": {
+      "c++17": {
+        "201505": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["forward_list", "list", "vector"]
+  },
+  {
+    "name": "__cpp_lib_inplace_vector",
+    "values": {
+      "c++26": {
+        "202406": [
+          {
+            "implemented": false
+          }
+        ]
+      }
+    },
+    "headers": ["inplace_vector"]
+  },
+  {
+    "name": "__cpp_lib_int_pow2",
+    "values": {
+      "c++20": {
+        "202002": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["bit"]
+  },
+  {
+    "name": "__cpp_lib_integer_comparison_functions",
+    "values": {
+      "c++20": {
+        "202002": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["utility"]
+  },
+  {
+    "name": "__cpp_lib_integer_sequence",
+    "values": {
+      "c++14": {
+        "201304": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["utility"]
+  },
+  {
+    "name": "__cpp_lib_integral_constant_callable",
+    "values": {
+      "c++14": {
+        "201304": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["type_traits"]
+  },
+  {
+    "name": "__cpp_lib_interpolate",
+    "values": {
+      "c++20": {
+        "201902": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["cmath", "numeric"]
+  },
+  {
+    "name": "__cpp_lib_invoke",
+    "values": {
+      "c++17": {
+        "201411": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["functional"]
+  },
+  {
+    "name": "__cpp_lib_invoke_r",
+    "values": {
+      "c++23": {
+        "202106": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["functional"]
+  },
+  {
+    "name": "__cpp_lib_ios_noreplace",
+    "values": {
+      "c++23": {
+        "202207": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["ios"]
+  },
+  {
+    "name": "__cpp_lib_is_aggregate",
+    "values": {
+      "c++17": {
+        "201703": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["type_traits"]
+  },
+  {
+    "name": "__cpp_lib_is_constant_evaluated",
+    "values": {
+      "c++20": {
+        "201811": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["type_traits"]
+  },
+  {
+    "name": "__cpp_lib_is_final",
+    "values": {
+      "c++14": {
+        "201402": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["type_traits"]
+  },
+  {
+    "name": "__cpp_lib_is_implicit_lifetime",
+    "values": {
+      "c++23": {
+        "202302": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["type_traits"],
+    "test_suite_guard": "__has_builtin(__builtin_is_implicit_lifetime)",
+    "libcxx_guard": "__has_builtin(__builtin_is_implicit_lifetime)"
+  },
+  {
+    "name": "__cpp_lib_is_invocable",
+    "values": {
+      "c++17": {
+        "201703": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["type_traits"]
+  },
+  {
+    "name": "__cpp_lib_is_layout_compatible",
+    "values": {
+      "c++20": {
+        "201907": [
+          {
+            "implemented": false
+          }
+        ]
+      }
+    },
+    "headers": ["type_traits"]
+  },
+  {
+    "name": "__cpp_lib_is_nothrow_convertible",
+    "values": {
+      "c++20": {
+        "201806": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["type_traits"]
+  },
+  {
+    "name": "__cpp_lib_is_null_pointer",
+    "values": {
+      "c++14": {
+        "201309": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["type_traits"]
+  },
+  {
+    "name": "__cpp_lib_is_pointer_interconvertible",
+    "values": {
+      "c++20": {
+        "201907": [
+          {
+            "implemented": false
+          }
+        ]
+      }
+    },
+    "headers": ["type_traits"]
+  },
+  {
+    "name": "__cpp_lib_is_scoped_enum",
+    "values": {
+      "c++23": {
+        "202011": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["type_traits"]
+  },
+  {
+    "name": "__cpp_lib_is_swappable",
+    "values": {
+      "c++17": {
+        "201603": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["type_traits"]
+  },
+  {
+    "name": "__cpp_lib_is_virtual_base_of",
+    "values": {
+      "c++26": {
+        "202406": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["type_traits"],
+    "test_suite_guard": "__has_builtin(__builtin_is_virtual_base_of)",
+    "libcxx_guard": "__has_builtin(__builtin_is_virtual_base_of)"
+  },
+  {
+    "name": "__cpp_lib_is_within_lifetime",
+    "values": {
+      "c++26": {
+        "202306": [
+          {
+            "implemented": false
+          }
+        ]
+      }
+    },
+    "headers": ["type_traits"]
+  },
+  {
+    "name": "__cpp_lib_jthread",
+    "values": {
+      "c++20": {
+        "201911": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["stop_token", "thread"],
+    "test_suite_guard": "!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)",
+    "libcxx_guard": "_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC"
+  },
+  {
+    "name": "__cpp_lib_latch",
+    "values": {
+      "c++20": {
+        "201907": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["latch"],
+    "test_suite_guard": "!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)",
+    "libcxx_guard": "_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC"
+  },
+  {
+    "name": "__cpp_lib_launder",
+    "values": {
+      "c++17": {
+        "201606": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["new"]
+  },
+  {
+    "name": "__cpp_lib_linalg",
+    "values": {
+      "c++26": {
+        "202311": [
+          {
+            "implemented": false
+          }
+        ]
+      }
+    },
+    "headers": ["linalg"]
+  },
+  {
+    "name": "__cpp_lib_list_remove_return_type",
+    "values": {
+      "c++20": {
+        "201806": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["forward_list", "list"]
+  },
+  {
+    "name": "__cpp_lib_logical_traits",
+    "values": {
+      "c++17": {
+        "201510": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["type_traits"]
+  },
+  {
+    "name": "__cpp_lib_make_from_tuple",
+    "values": {
+      "c++17": {
+        "201606": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["tuple"]
+  },
+  {
+    "name": "__cpp_lib_make_reverse_iterator",
+    "values": {
+      "c++14": {
+        "201402": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["iterator"]
+  },
+  {
+    "name": "__cpp_lib_make_unique",
+    "values": {
+      "c++14": {
+        "201304": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["memory"]
+  },
+  {
+    "name": "__cpp_lib_map_try_emplace",
+    "values": {
+      "c++17": {
+        "201411": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["map"]
+  },
+  {
+    "name": "__cpp_lib_math_constants",
+    "values": {
+      "c++20": {
+        "201907": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["numbers"]
+  },
+  {
+    "name": "__cpp_lib_math_special_functions",
+    "values": {
+      "c++17": {
+        "201603": [
+          {
+            "implemented": false
+          }
+        ]
+      }
+    },
+    "headers": ["cmath"]
+  },
+  {
+    "name": "__cpp_lib_mdspan",
+    "values": {
+      "c++23": {
+        "202207": [
+          {
+            "implemented": true
+          }
+        ]
+      },
+      "c++26": {
+        "202406": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["mdspan"]
+  },
+  {
+    "name": "__cpp_lib_memory_resource",
+    "values": {
+      "c++17": {
+        "201603": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["memory_resource"],
+    "test_suite_guard": "!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_PMR",
+    "libcxx_guard": "_LIBCPP_AVAILABILITY_HAS_PMR"
+  },
+  {
+    "name": "__cpp_lib_modules",
+    "values": {
+      "c++23": {
+        "202207": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": []
+  },
+  {
+    "name": "__cpp_lib_move_iterator_concept",
+    "values": {
+      "c++20": {
+        "202207": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["iterator"]
+  },
+  {
+    "name": "__cpp_lib_move_only_function",
+    "values": {
+      "c++23": {
+        "202110": [
+          {
+            "implemented": false
+          }
+        ]
+      }
+    },
+    "headers": ["functional"]
+  },
+  {
+    "name": "__cpp_lib_node_extract",
+    "values": {
+      "c++17": {
+        "201606": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["map", "set", "unordered_map", "unordered_set"]
+  },
+  {
+    "name": "__cpp_lib_nonmember_container_access",
+    "values": {
+      "c++17": {
+        "201411": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["array", "deque", "forward_list", "iterator", "list", "map", "regex", "set", "string", "unordered_map", "unordered_set", "vector"]
+  },
+  {
+    "name": "__cpp_lib_not_fn",
+    "values": {
+      "c++17": {
+        "201603": [
+          {
+            "implemented": true
+          }
+        ]
+      },
+      "c++26": {
+        "202306": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["functional"]
+  },
+  {
+    "name": "__cpp_lib_null_iterators",
+    "values": {
+      "c++14": {
+        "201304": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["iterator"]
+  },
+  {
+    "name": "__cpp_lib_optional",
+    "values": {
+      "c++17": {
+        "201606": [
+          {
+            "implemented": true
+          }
+        ]
+      },
+      "c++20": {
+        "202106": [
+          {
+            "implemented": true
+          }
+        ]
+      },
+      "c++23": {
+        "202110": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["optional"]
+  },
+  {
+    "name": "__cpp_lib_optional_range_support",
+    "values": {
+      "c++26": {
+        "202406": [
+          {
+            "implemented": false
+          }
+        ]
+      }
+    },
+    "headers": ["optional"]
+  },
+  {
+    "name": "__cpp_lib_out_ptr",
+    "values": {
+      "c++23": {
+        "202106": [
+          {
+            "implemented": true
+          }
+        ]
+      },
+      "c++26": {
+        "202311": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["memory"]
+  },
+  {
+    "name": "__cpp_lib_parallel_algorithm",
+    "values": {
+      "c++17": {
+        "201603": [
+          {
+            "implemented": false
+          }
+        ]
+      }
+    },
+    "headers": ["algorithm", "numeric"]
+  },
+  {
+    "name": "__cpp_lib_philox_engine",
+    "values": {
+      "c++26": {
+        "202406": [
+          {
+            "implemented": false
+          }
+        ]
+      }
+    },
+    "headers": ["random"]
+  },
+  {
+    "name": "__cpp_lib_polymorphic_allocator",
+    "values": {
+      "c++20": {
+        "201902": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["memory_resource"],
+    "test_suite_guard": "!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_PMR",
+    "libcxx_guard": "_LIBCPP_AVAILABILITY_HAS_PMR"
+  },
+  {
+    "name": "__cpp_lib_print",
+    "values": {
+      "c++23": {
+        "202207": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["ostream", "print"],
+    "test_suite_guard": "!defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT",
+    "libcxx_guard": "_LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT"
+  },
+  {
+    "name": "__cpp_lib_quoted_string_io",
+    "values": {
+      "c++14": {
+        "201304": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["iomanip"],
+    "test_suite_guard": "!defined(_LIBCPP_VERSION) || _LIBCPP_HAS_LOCALIZATION",
+    "libcxx_guard": "_LIBCPP_HAS_LOCALIZATION"
+  },
+  {
+    "name": "__cpp_lib_ranges",
+    "values": {
+      "c++20": {
+        "202110": [
+          {
+            "implemented": true
+          }
+        ]
+      },
+      "c++23": {
+        "202406": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["algorithm", "functional", "iterator", "memory", "ranges"]
+  },
+  {
+    "name": "__cpp_lib_ranges_as_const",
+    "values": {
+      "c++23": {
+        "202207": [
+          {
+            "implemented": false
+          }
+        ]
+      }
+    },
+    "headers": ["ranges"]
+  },
+  {
+    "name": "__cpp_lib_ranges_as_rvalue",
+    "values": {
+      "c++23": {
+        "202207": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["ranges"]
+  },
+  {
+    "name": "__cpp_lib_ranges_chunk",
+    "values": {
+      "c++23": {
+        "202202": [
+          {
+            "implemented": false
+          }
+        ]
+      }
+    },
+    "headers": ["ranges"]
+  },
+  {
+    "name": "__cpp_lib_ranges_chunk_by",
+    "values": {
+      "c++23": {
+        "202202": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["ranges"]
+  },
+  {
+    "name": "__cpp_lib_ranges_concat",
+    "values": {
+      "c++26": {
+        "202403": [
+          {
+            "implemented": false
+          }
+        ]
+      }
+    },
+    "headers": ["ranges"]
+  },
+  {
+    "name": "__cpp_lib_ranges_contains",
+    "values": {
+      "c++23": {
+        "202207": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["algorithm"]
+  },
+  {
+    "name": "__cpp_lib_ranges_find_last",
+    "values": {
+      "c++23": {
+        "202207": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["algorithm"]
+  },
+  {
+    "name": "__cpp_lib_ranges_iota",
+    "values": {
+      "c++23": {
+        "202202": [
+          {
+            "implemented": false
+          }
+        ]
+      }
+    },
+    "headers": ["numeric"]
+  },
+  {
+    "name": "__cpp_lib_ranges_join_with",
+    "values": {
+      "c++23": {
+        "202202": [
+          {
+            "implemented": false
+          }
+        ]
+      }
+    },
+    "headers": ["ranges"]
+  },
+  {
+    "name": "__cpp_lib_ranges_repeat",
+    "values": {
+      "c++23": {
+        "202207": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["ranges"]
+  },
+  {
+    "name": "__cpp_lib_ranges_slide",
+    "values": {
+      "c++23": {
+        "202202": [
+          {
+            "implemented": false
+          }
+        ]
+      }
+    },
+    "headers": ["ranges"]
+  },
+  {
+    "name": "__cpp_lib_ranges_starts_ends_with",
+    "values": {
+      "c++23": {
+        "202106": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["algorithm"]
+  },
+  {
+    "name": "__cpp_lib_ranges_to_container",
+    "values": {
+      "c++23": {
+        "202202": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["ranges"]
+  },
+  {
+    "name": "__cpp_lib_ranges_zip",
+    "values": {
+      "c++23": {
+        "202110": [
+          {
+            "implemented": false
+          }
+        ]
+      }
+    },
+    "headers": ["ranges", "tuple", "utility"]
+  },
+  {
+    "name": "__cpp_lib_ratio",
+    "values": {
+      "c++26": {
+        "202306": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["ratio"]
+  },
+  {
+    "name": "__cpp_lib_raw_memory_algorithms",
+    "values": {
+      "c++17": {
+        "201606": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["memory"]
+  },
+  {
+    "name": "__cpp_lib_rcu",
+    "values": {
+      "c++26": {
+        "202306": [
+          {
+            "implemented": false
+          }
+        ]
+      }
+    },
+    "headers": ["rcu"]
+  },
+  {
+    "name": "__cpp_lib_reference_from_temporary",
+    "values": {
+      "c++23": {
+        "202202": [
+          {
+            "implemented": false
+          }
+        ]
+      }
+    },
+    "headers": ["type_traits"]
+  },
+  {
+    "name": "__cpp_lib_reference_wrapper",
+    "values": {
+      "c++26": {
+        "202403": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["functional"]
+  },
+  {
+    "name": "__cpp_lib_remove_cvref",
+    "values": {
+      "c++20": {
+        "201711": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["type_traits"]
+  },
+  {
+    "name": "__cpp_lib_result_of_sfinae",
+    "values": {
+      "c++14": {
+        "201210": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["functional", "type_traits"]
+  },
+  {
+    "name": "__cpp_lib_robust_nonmodifying_seq_ops",
+    "values": {
+      "c++14": {
+        "201304": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["algorithm"]
+  },
+  {
+    "name": "__cpp_lib_sample",
+    "values": {
+      "c++17": {
+        "201603": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["algorithm"]
+  },
+  {
+    "name": "__cpp_lib_saturation_arithmetic",
+    "values": {
+      "c++26": {
+        "202311": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["numeric"]
+  },
+  {
+    "name": "__cpp_lib_scoped_lock",
+    "values": {
+      "c++17": {
+        "201703": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["mutex"],
+    "test_suite_guard": "!defined(_LIBCPP_VERSION) || _LIBCPP_HAS_THREADS",
+    "libcxx_guard": "_LIBCPP_HAS_THREADS"
+  },
+  {
+    "name": "__cpp_lib_semaphore",
+    "values": {
+      "c++20": {
+        "201907": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["semaphore"],
+    "test_suite_guard": "!defined(_LIBCPP_VERSION) || (_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC)",
+    "libcxx_guard": "_LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_SYNC"
+  },
+  {
+    "name": "__cpp_lib_senders",
+    "values": {
+      "c++26": {
+        "202406": [
+          {
+            "implemented": false
+          }
+        ]
+      }
+    },
+    "headers": ["execution"]
+  },
+  {
+    "name": "__cpp_lib_shared_mutex",
+    "values": {
+      "c++17": {
+        "201505": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["shared_mutex"],
+    "test_suite_guard": "!defined(_LIBCPP_VERSION) || _LIBCPP_HAS_THREADS",
+    "libcxx_guard": "_LIBCPP_HAS_THREADS"
+  },
+  {
+    "name": "__cpp_lib_shared_ptr_arrays",
+    "values": {
+      "c++17": {
+        "201611": [
+          {
+            "implemented": true
+          }
+        ]
+      },
+      "c++20": {
+        "201707": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["memory"]
+  },
+  {
+    "name": "__cpp_lib_shared_ptr_weak_type",
+    "values": {
+      "c++17": {
+        "201606": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["memory"]
+  },
+  {
+    "name": "__cpp_lib_shared_timed_mutex",
+    "values": {
+      "c++14": {
+        "201402": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["shared_mutex"],
+    "test_suite_guard": "!defined(_LIBCPP_VERSION) || _LIBCPP_HAS_THREADS",
+    "libcxx_guard": "_LIBCPP_HAS_THREADS"
+  },
+  {
+    "name": "__cpp_lib_shift",
+    "values": {
+      "c++20": {
+        "201806": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["algorithm"]
+  },
+  {
+    "name": "__cpp_lib_smart_ptr_for_overwrite",
+    "values": {
+      "c++20": {
+        "202002": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["memory"]
+  },
+  {
+    "name": "__cpp_lib_smart_ptr_owner_equality",
+    "values": {
+      "c++26": {
+        "202306": [
+          {
+            "implemented": false
+          }
+        ]
+      }
+    },
+    "headers": ["memory"]
+  },
+  {
+    "name": "__cpp_lib_source_location",
+    "values": {
+      "c++20": {
+        "201907": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["source_location"]
+  },
+  {
+    "name": "__cpp_lib_span",
+    "values": {
+      "c++20": {
+        "202002": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["span"]
+  },
+  {
+    "name": "__cpp_lib_span_at",
+    "values": {
+      "c++26": {
+        "202311": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["span"]
+  },
+  {
+    "name": "__cpp_lib_span_initializer_list",
+    "values": {
+      "c++26": {
+        "202311": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["span"]
+  },
+  {
+    "name": "__cpp_lib_spanstream",
+    "values": {
+      "c++23": {
+        "202106": [
+          {
+            "implemented": false
+          }
+        ]
+      }
+    },
+    "headers": ["spanstream"]
+  },
+  {
+    "name": "__cpp_lib_ssize",
+    "values": {
+      "c++20": {
+        "201902": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["iterator"]
+  },
+  {
+    "name": "__cpp_lib_sstream_from_string_view",
+    "values": {
+      "c++26": {
+        "202306": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["sstream"]
+  },
+  {
+    "name": "__cpp_lib_stacktrace",
+    "values": {
+      "c++23": {
+        "202011": [
+          {
+            "implemented": false
+          }
+        ]
+      }
+    },
+    "headers": ["stacktrace"]
+  },
+  {
+    "name": "__cpp_lib_starts_ends_with",
+    "values": {
+      "c++20": {
+        "201711": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["string", "string_view"]
+  },
+  {
+    "name": "__cpp_lib_stdatomic_h",
+    "values": {
+      "c++23": {
+        "202011": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["stdatomic.h"]
+  },
+  {
+    "name": "__cpp_lib_string_contains",
+    "values": {
+      "c++23": {
+        "202011": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["string", "string_view"]
+  },
+  {
+    "name": "__cpp_lib_string_resize_and_overwrite",
+    "values": {
+      "c++23": {
+        "202110": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["string"]
+  },
+  {
+    "name": "__cpp_lib_string_udls",
+    "values": {
+      "c++14": {
+        "201304": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["string"]
+  },
+  {
+    "name": "__cpp_lib_string_view",
+    "values": {
+      "c++17": {
+        "201606": [
+          {
+            "implemented": true
+          }
+        ]
+      },
+      "c++20": {
+        "201803": [
+          {
+            "implemented": true
+          }
+        ]
+      },
+      "c++26": {
+        "202403": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["string", "string_view"]
+  },
+  {
+    "name": "__cpp_lib_submdspan",
+    "values": {
+      "c++26": {
+        "202306": [
+          {
+            "implemented": false
+          }
+        ]
+      }
+    },
+    "headers": ["mdspan"]
+  },
+  {
+    "name": "__cpp_lib_syncbuf",
+    "values": {
+      "c++20": {
+        "201803": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["syncstream"],
+    "test_suite_guard": "!defined(_LIBCPP_VERSION) || _LIBCPP_HAS_EXPERIMENTAL_SYNCSTREAM",
+    "libcxx_guard": "_LIBCPP_HAS_EXPERIMENTAL_SYNCSTREAM"
+  },
+  {
+    "name": "__cpp_lib_text_encoding",
+    "values": {
+      "c++26": {
+        "202306": [
+          {
+            "implemented": false
+          }
+        ]
+      }
+    },
+    "headers": ["text_encoding"]
+  },
+  {
+    "name": "__cpp_lib_three_way_comparison",
+    "values": {
+      "c++20": {
+        "201907": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["compare"]
+  },
+  {
+    "name": "__cpp_lib_to_address",
+    "values": {
+      "c++20": {
+        "201711": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["memory"]
+  },
+  {
+    "name": "__cpp_lib_to_array",
+    "values": {
+      "c++20": {
+        "201907": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["array"]
+  },
+  {
+    "name": "__cpp_lib_to_chars",
+    "values": {
+      "c++17": {
+        "201611": [
+          {
+            "implemented": false
+          }
+        ]
+      },
+      "c++26": {
+        "202306": [
+          {
+            "implemented": false
+          }
+        ]
+      }
+    },
+    "headers": ["charconv"]
+  },
+  {
+    "name": "__cpp_lib_to_string",
+    "values": {
+      "c++26": {
+        "202306": [
+          {
+            "implemented": false
+          }
+        ]
+      }
+    },
+    "headers": ["string"]
+  },
+  {
+    "name": "__cpp_lib_to_underlying",
+    "values": {
+      "c++23": {
+        "202102": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["utility"]
+  },
+  {
+    "name": "__cpp_lib_transformation_trait_aliases",
+    "values": {
+      "c++14": {
+        "201304": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["type_traits"]
+  },
+  {
+    "name": "__cpp_lib_transparent_operators",
+    "values": {
+      "c++14": {
+        "201210": [
+          {
+            "implemented": true
+          }
+        ]
+      },
+      "c++17": {
+        "201510": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["functional", "memory"]
+  },
+  {
+    "name": "__cpp_lib_tuple_element_t",
+    "values": {
+      "c++14": {
+        "201402": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["tuple"]
+  },
+  {
+    "name": "__cpp_lib_tuple_like",
+    "values": {
+      "c++23": {
+        "202207": [
+          {
+            "implemented": false
+          }
+        ]
+      },
+      "c++26": {
+        "202311": [
+          {
+            "implemented": false
+          }
+        ]
+      }
+    },
+    "headers": ["map", "tuple", "unordered_map", "utility"]
+  },
+  {
+    "name": "__cpp_lib_tuples_by_type",
+    "values": {
+      "c++14": {
+        "201304": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["tuple", "utility"]
+  },
+  {
+    "name": "__cpp_lib_type_identity",
+    "values": {
+      "c++20": {
+        "201806": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["type_traits"]
+  },
+  {
+    "name": "__cpp_lib_type_trait_variable_templates",
+    "values": {
+      "c++17": {
+        "201510": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["type_traits"]
+  },
+  {
+    "name": "__cpp_lib_uncaught_exceptions",
+    "values": {
+      "c++17": {
+        "201411": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["exception"]
+  },
+  {
+    "name": "__cpp_lib_unordered_map_try_emplace",
+    "values": {
+      "c++17": {
+        "201411": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["unordered_map"]
+  },
+  {
+    "name": "__cpp_lib_unreachable",
+    "values": {
+      "c++23": {
+        "202202": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["utility"]
+  },
+  {
+    "name": "__cpp_lib_unwrap_ref",
+    "values": {
+      "c++20": {
+        "201811": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["functional"]
+  },
+  {
+    "name": "__cpp_lib_variant",
+    "values": {
+      "c++17": {
+        "202102": [
+          {
+            "implemented": true
+          }
+        ]
+      },
+      "c++20": {
+        "202106": [
+          {
+            "implemented": true
+          }
+        ]
+      },
+      "c++26": {
+        "202306": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["variant"]
+  },
+  {
+    "name": "__cpp_lib_void_t",
+    "values": {
+      "c++17": {
+        "201411": [
+          {
+            "implemented": true
+          }
+        ]
+      }
+    },
+    "headers": ["type_traits"]
+  }
+]
diff --git a/libcxx/utils/generate_feature_test_macro_components.py b/libcxx/utils/generate_feature_test_macro_components.py
index d3f4f679e4696..6dbb47a4633c5 100755
--- a/libcxx/utils/generate_feature_test_macro_components.py
+++ b/libcxx/utils/generate_feature_test_macro_components.py
@@ -1960,6 +1960,66 @@ def produce_docs():
     with open(table_doc_path, "w", newline="\n") as f:
         f.write(doc_str)
 
+def get_values(tc) -> str:
+    implemented = True if not "unimplemented" in tc.keys() else not tc["unimplemented"]
+
+    return ",\n".join("""\
+      "{std}": {{
+        "{value}": [
+          {{
+            "implemented": {implemented}
+          }}
+        ]
+      }}\
+""".format(std=key, value=tc["values"][key], implemented="true" if implemented else "false") for key in tc["values"].keys())
+
+def get_headers(tc) -> str:
+    headers = tc["headers"]
+    headers.remove("version")
+    return f'{headers}'.replace("'", '"')
+
+def get_test_suite_guard(tc) -> str:
+    if not "test_suite_guard" in tc.keys():
+        return ""
+    return f',\n    "test_suite_guard": "{tc["test_suite_guard"]}"'
+
+def get_libcxx_guard(tc) -> str:
+    if not "libcxx_guard" in tc.keys():
+        return ""
+    return f',\n    "libcxx_guard": "{tc["libcxx_guard"]}"'
+
+def get_ftm_json(tc) -> str:
+    data="""\
+  {{
+    "name": "{ftm}",
+    "values": {{
+{values}
+    }},
+    "headers": {headers}{test_suite_guard}{libcxx_guard}
+  }}\
+""".format(
+        ftm=tc["name"],
+        values=get_values(tc),
+        headers=get_headers(tc),
+        test_suite_guard=get_test_suite_guard(tc),
+        libcxx_guard=get_libcxx_guard(tc),
+    )
+    return data
+
+
+def get_json() -> str:
+    return ",\n".join(get_ftm_json(tc) for tc in feature_test_macros)
+
+
+def produce_json(file: os.path) -> None:
+    contents = """\
+[
+{data}
+]
+""".format(data=get_json())
+    with open(file, "w", newline="\n") as f:
+        f.write(contents)
+
 
 Std = NewType("Std", str)  # Standard version number
 Ftm = NewType("Ftm", str)  # The name of a feature test macro
@@ -2579,11 +2639,32 @@ def generate_header_test_directory(self, path: os.path) -> None:
 
 
 def main():
+    #
+    # Note this generator switches from the data structures in this file (v1)
+    # to data structures in an external json file (v2). This project is in its
+    # transition phase. So currently both data structures are present.
+    #
+
+    # Generation using data structure v1
     produce_version_header()
     produce_tests()
     produce_docs()
 
-    # Example how to use the new generator to generate the output.
+    #
+    # Conversion of the v1 data to v2 data.
+    # This is a temporary solution.
+    #
+    produce_json(
+        os.path.join(source_root, "utils", "data", "feature_test_macro", "data.json")
+    )
+
+    # Generation using data structure v2
+    ftm = FeatureTestMacros(
+        os.path.join(source_root, "utils", "data", "feature_test_macro", "data.json")
+    )
+    ftm.generate_header_test_directory(os.path.join(macro_test_path, "v2"))
+
+    # Example how to use the generator v2 to generate the output.
     if False:
         ftm = FeatureTestMacros(
             os.path.join(



More information about the llvm-branch-commits mailing list