[libcxx-commits] [libcxx] [libc++] Avoid opening namespaces without putting something in them (PR #181136)
Nikolas Klauser via libcxx-commits
libcxx-commits at lists.llvm.org
Fri Feb 13 04:16:19 PST 2026
https://github.com/philnik777 updated https://github.com/llvm/llvm-project/pull/181136
>From 548fb7c0fd8feabea6effa99d616d44c91b9f850 Mon Sep 17 00:00:00 2001
From: Nikolas Klauser <nikolasklauser at berlin.de>
Date: Wed, 28 Jan 2026 11:08:53 +0100
Subject: [PATCH] [libc++] Avoid opening namespaces without putting something
in them
---
libcxx/include/__algorithm/in_out_result.h | 8 +++---
.../lexicographical_compare_three_way.h | 8 +++---
libcxx/include/__algorithm/out_value_result.h | 8 +++---
libcxx/include/__algorithm/radix_sort.h | 8 +++---
libcxx/include/__algorithm/ranges_copy_n.h | 8 +++---
.../__algorithm/three_way_comp_ref_type.h | 8 +++---
libcxx/include/__atomic/atomic_sync.h | 7 +++--
libcxx/include/__atomic/atomic_sync_timed.h | 13 +++++----
.../include/__atomic/atomic_waitable_traits.h | 8 +++---
.../include/__atomic/floating_point_helper.h | 8 +++---
libcxx/include/__bit/bit_cast.h | 12 ++++----
libcxx/include/__bit/bit_ceil.h | 7 +++--
libcxx/include/__charconv/to_chars.h | 4 ---
libcxx/include/__chrono/gps_clock.h | 8 +++---
libcxx/include/__chrono/tai_clock.h | 8 +++---
libcxx/include/__chrono/time_zone.h | 8 +++---
libcxx/include/__chrono/time_zone_link.h | 8 +++---
libcxx/include/__chrono/tzdb.h | 8 +++---
libcxx/include/__chrono/tzdb_list.h | 8 +++---
libcxx/include/__chrono/utc_clock.h | 8 +++---
libcxx/include/__chrono/zoned_time.h | 8 +++---
.../__compare/common_comparison_category.h | 8 +++---
libcxx/include/__compare/compare_three_way.h | 8 +++---
.../__compare/compare_three_way_result.h | 8 +++---
libcxx/include/__compare/ordering.h | 8 +++---
libcxx/include/__compare/synth_three_way.h | 8 +++---
.../include/__compare/three_way_comparable.h | 8 +++---
libcxx/include/__concepts/arithmetic.h | 8 +++---
libcxx/include/__concepts/assignable.h | 8 +++---
libcxx/include/__concepts/boolean_testable.h | 8 +++---
libcxx/include/__concepts/class_or_enum.h | 8 +++---
.../__concepts/common_reference_with.h | 8 +++---
.../__concepts/comparison_common_type.h | 8 +++---
libcxx/include/__concepts/constructible.h | 8 +++---
libcxx/include/__concepts/convertible_to.h | 8 +++---
libcxx/include/__concepts/copyable.h | 8 +++---
libcxx/include/__concepts/derived_from.h | 8 +++---
libcxx/include/__concepts/destructible.h | 8 +++---
libcxx/include/__concepts/different_from.h | 8 +++---
.../include/__concepts/equality_comparable.h | 8 +++---
libcxx/include/__concepts/invocable.h | 8 +++---
libcxx/include/__concepts/movable.h | 8 +++---
libcxx/include/__concepts/predicate.h | 8 +++---
libcxx/include/__concepts/regular.h | 8 +++---
libcxx/include/__concepts/relation.h | 8 +++---
libcxx/include/__concepts/same_as.h | 8 +++---
libcxx/include/__concepts/semiregular.h | 8 +++---
libcxx/include/__concepts/swappable.h | 8 +++---
libcxx/include/__concepts/totally_ordered.h | 8 +++---
libcxx/include/__cstddef/max_align_t.h | 6 ++--
libcxx/include/__format/container_adaptor.h | 8 +++---
libcxx/include/__format/enable_insertable.h | 8 +++---
.../include/__format/escaped_output_table.h | 8 +++---
libcxx/include/__format/fmt_pair_like.h | 8 +++---
libcxx/include/__format/formatter_tuple.h | 8 +++---
.../__format/range_default_formatter.h | 8 +++---
libcxx/include/__format/range_format.h | 8 +++---
libcxx/include/__format/range_formatter.h | 8 +++---
libcxx/include/__functional/binary_negate.h | 8 +++---
libcxx/include/__functional/binder1st.h | 8 +++---
libcxx/include/__functional/binder2nd.h | 8 +++---
libcxx/include/__functional/compose.h | 8 +++---
libcxx/include/__functional/invoke.h | 12 ++++----
libcxx/include/__functional/mem_fun_ref.h | 8 +++---
libcxx/include/__functional/perfect_forward.h | 8 +++---
.../__functional/pointer_to_binary_function.h | 8 +++---
.../__functional/pointer_to_unary_function.h | 8 +++---
.../include/__functional/ranges_operations.h | 8 +++---
libcxx/include/__functional/unary_negate.h | 8 +++---
libcxx/include/__fwd/span.h | 8 +++---
libcxx/include/__fwd/variant.h | 8 +++---
libcxx/include/__iterator/data.h | 8 +++---
libcxx/include/__iterator/default_sentinel.h | 8 +++---
libcxx/include/__iterator/empty.h | 8 +++---
.../include/__iterator/incrementable_traits.h | 8 +++---
libcxx/include/__iterator/iter_move.h | 8 +++---
libcxx/include/__iterator/iter_swap.h | 8 +++---
libcxx/include/__iterator/move_sentinel.h | 8 +++---
.../__iterator/ranges_iterator_traits.h | 8 +++---
libcxx/include/__iterator/readable_traits.h | 8 +++---
libcxx/include/__iterator/reverse_access.h | 8 +++---
libcxx/include/__iterator/size.h | 8 +++---
libcxx/include/__math/special_functions.h | 8 +++---
libcxx/include/__mdspan/aligned_accessor.h | 8 +++---
libcxx/include/__memory/inout_ptr.h | 8 +++---
.../__memory/is_sufficiently_aligned.h | 8 +++---
libcxx/include/__memory/out_ptr.h | 8 +++---
.../include/__memory/raw_storage_iterator.h | 8 +++---
.../__memory/uses_allocator_construction.h | 12 ++++----
libcxx/include/__node_handle | 8 +++---
libcxx/include/__numeric/ranges_iota.h | 7 +++--
.../__random/uniform_random_bit_generator.h | 8 +++---
libcxx/include/__ranges/access.h | 8 +++---
libcxx/include/__ranges/all.h | 8 +++---
libcxx/include/__ranges/concepts.h | 8 +++---
.../__ranges/container_compatible_range.h | 8 +++---
libcxx/include/__ranges/dangling.h | 8 +++---
libcxx/include/__ranges/data.h | 8 +++---
libcxx/include/__ranges/elements_of.h | 8 +++---
libcxx/include/__ranges/empty.h | 8 +++---
.../include/__ranges/enable_borrowed_range.h | 8 +++---
libcxx/include/__ranges/enable_view.h | 8 +++---
libcxx/include/__ranges/from_range.h | 8 +++---
libcxx/include/__ranges/owning_view.h | 8 +++---
libcxx/include/__ranges/range_adaptor.h | 8 +++---
libcxx/include/__ranges/ref_view.h | 8 +++---
libcxx/include/__ranges/repeat_view.h | 8 +++---
libcxx/include/__ranges/size.h | 8 +++---
libcxx/include/__ranges/subrange.h | 8 +++---
libcxx/include/__ranges/view_interface.h | 8 +++---
libcxx/include/__ranges/views.h | 2 +-
.../include/__stop_token/atomic_unique_lock.h | 8 +++---
.../__stop_token/intrusive_list_view.h | 8 +++---
.../__stop_token/intrusive_shared_ptr.h | 8 +++---
libcxx/include/__stop_token/stop_callback.h | 8 +++---
libcxx/include/__stop_token/stop_state.h | 8 +++---
libcxx/include/__stop_token/stop_token.h | 8 +++---
libcxx/include/__tuple/sfinae_helpers.h | 11 ++++----
libcxx/include/__tuple/tuple_like.h | 8 +++---
.../include/__tuple/tuple_like_no_subrange.h | 8 +++---
.../include/__type_traits/common_reference.h | 8 ++++--
.../has_unique_object_representation.h | 8 +++---
.../is_implicitly_default_constructible.h | 6 ++--
.../include/__type_traits/is_literal_type.h | 6 ++--
libcxx/include/__type_traits/result_of.h | 6 ++--
libcxx/include/__utility/exchange.h | 6 ++--
libcxx/include/__utility/forward_like.h | 8 +++---
libcxx/include/__utility/in_place.h | 8 +++---
libcxx/include/__variant/monostate.h | 8 +++---
libcxx/include/__verbose_trap | 4 ---
libcxx/include/any | 8 +++---
libcxx/include/charconv | 4 ---
libcxx/include/cuchar | 8 +++---
libcxx/include/experimental/memory | 10 +++----
libcxx/include/initializer_list | 8 +++---
libcxx/include/scoped_allocator | 8 +++---
libcxx/include/source_location | 8 +++---
libcxx/include/span | 8 +++---
libcxx/include/syncstream | 8 +++---
libcxx/include/tuple | 8 +++---
libcxx/include/variant | 8 +++---
.../tools/clang_tidy_checks/CMakeLists.txt | 1 +
.../clang_tidy_checks/empty_namespaces.cpp | 28 +++++++++++++++++++
.../clang_tidy_checks/empty_namespaces.hpp | 18 ++++++++++++
.../tools/clang_tidy_checks/libcpp_module.cpp | 2 ++
145 files changed, 610 insertions(+), 558 deletions(-)
create mode 100644 libcxx/test/tools/clang_tidy_checks/empty_namespaces.cpp
create mode 100644 libcxx/test/tools/clang_tidy_checks/empty_namespaces.hpp
diff --git a/libcxx/include/__algorithm/in_out_result.h b/libcxx/include/__algorithm/in_out_result.h
index a7a986cf8e6c0..0bb8aacedbd27 100644
--- a/libcxx/include/__algorithm/in_out_result.h
+++ b/libcxx/include/__algorithm/in_out_result.h
@@ -21,10 +21,10 @@
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
namespace ranges {
template <class _InIter1, class _OutIter1>
@@ -47,10 +47,10 @@ struct in_out_result {
} // namespace ranges
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
_LIBCPP_POP_MACROS
#endif // _LIBCPP___ALGORITHM_IN_OUT_RESULT_H
diff --git a/libcxx/include/__algorithm/lexicographical_compare_three_way.h b/libcxx/include/__algorithm/lexicographical_compare_three_way.h
index 442223e79e4ec..5be95c4d51347 100644
--- a/libcxx/include/__algorithm/lexicographical_compare_three_way.h
+++ b/libcxx/include/__algorithm/lexicographical_compare_three_way.h
@@ -27,10 +27,10 @@
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
// Fast path for random access iterators which computes the number of loop iterations up-front and
// then skips the iterator comparisons inside the loop.
template <class _InputIterator1, class _InputIterator2, class _Cmp>
@@ -116,10 +116,10 @@ template <class _InputIterator1, class _InputIterator2>
std::move(__first1), std::move(__last1), std::move(__first2), std::move(__last2), std::compare_three_way());
}
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
_LIBCPP_POP_MACROS
#endif // _LIBCPP___ALGORITHM_LEXICOGRAPHICAL_COMPARE_THREE_WAY_H
diff --git a/libcxx/include/__algorithm/out_value_result.h b/libcxx/include/__algorithm/out_value_result.h
index 9e1e0e07286d4..398328b042069 100644
--- a/libcxx/include/__algorithm/out_value_result.h
+++ b/libcxx/include/__algorithm/out_value_result.h
@@ -21,10 +21,10 @@
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 23
+_LIBCPP_BEGIN_NAMESPACE_STD
+
namespace ranges {
template <class _OutIter1, class _ValType1>
@@ -47,10 +47,10 @@ struct out_value_result {
} // namespace ranges
-#endif // _LIBCPP_STD_VER >= 23
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 23
+
_LIBCPP_POP_MACROS
#endif // _LIBCPP___ALGORITHM_OUT_VALUE_RESULT_H
diff --git a/libcxx/include/__algorithm/radix_sort.h b/libcxx/include/__algorithm/radix_sort.h
index 5549a69f5e220..4f685ea162d55 100644
--- a/libcxx/include/__algorithm/radix_sort.h
+++ b/libcxx/include/__algorithm/radix_sort.h
@@ -67,10 +67,10 @@
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 14
+_LIBCPP_BEGIN_NAMESPACE_STD
+
template <class _InputIterator, class _OutputIterator>
_LIBCPP_HIDE_FROM_ABI constexpr pair<_OutputIterator, __iterator_value_type<_InputIterator>>
__partial_sum_max(_InputIterator __first, _InputIterator __last, _OutputIterator __result) {
@@ -422,10 +422,10 @@ __radix_sort(_RandomAccessIterator1 __first, _RandomAccessIterator1 __last, _Ran
std::__radix_sort(__first, __last, __buffer, __identity{}, __low_byte_fn{});
}
-#endif // _LIBCPP_STD_VER >= 14
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 14
+
_LIBCPP_POP_MACROS
#endif // _LIBCPP___ALGORITHM_RADIX_SORT_H
diff --git a/libcxx/include/__algorithm/ranges_copy_n.h b/libcxx/include/__algorithm/ranges_copy_n.h
index 6bee4c3e7c9e5..09e20561dd95f 100644
--- a/libcxx/include/__algorithm/ranges_copy_n.h
+++ b/libcxx/include/__algorithm/ranges_copy_n.h
@@ -24,10 +24,10 @@
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
namespace ranges {
template <class _Ip, class _Op>
@@ -48,10 +48,10 @@ inline constexpr auto copy_n = __copy_n{};
} // namespace __cpo
} // namespace ranges
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
_LIBCPP_POP_MACROS
#endif // _LIBCPP___ALGORITHM_RANGES_COPY_N_H
diff --git a/libcxx/include/__algorithm/three_way_comp_ref_type.h b/libcxx/include/__algorithm/three_way_comp_ref_type.h
index f6f76455e4664..8df3f1d6e3b2d 100644
--- a/libcxx/include/__algorithm/three_way_comp_ref_type.h
+++ b/libcxx/include/__algorithm/three_way_comp_ref_type.h
@@ -19,10 +19,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
template <class _Comp>
struct __debug_three_way_comp {
_Comp& __comp_;
@@ -67,8 +67,8 @@ template <class _Comp>
using __three_way_comp_ref_type _LIBCPP_NODEBUG = _Comp&;
# endif
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
#endif // _LIBCPP___ALGORITHM_THREE_WAY_COMP_REF_TYPE_H
diff --git a/libcxx/include/__atomic/atomic_sync.h b/libcxx/include/__atomic/atomic_sync.h
index 12bd1b96a0269..2219805e1cd56 100644
--- a/libcxx/include/__atomic/atomic_sync.h
+++ b/libcxx/include/__atomic/atomic_sync.h
@@ -23,9 +23,10 @@
# pragma GCC system_header
#endif
+#if _LIBCPP_STD_VER >= 20
+
_LIBCPP_BEGIN_NAMESPACE_STD
-#if _LIBCPP_STD_VER >= 20
# if _LIBCPP_HAS_THREADS
# if !_LIBCPP_AVAILABILITY_HAS_NEW_SYNC
@@ -254,8 +255,8 @@ _LIBCPP_HIDE_FROM_ABI void __atomic_wait(_AtomicWaitable& __a, _Tp __val, memory
});
}
-#endif // C++20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
#endif // _LIBCPP___ATOMIC_ATOMIC_SYNC_H
diff --git a/libcxx/include/__atomic/atomic_sync_timed.h b/libcxx/include/__atomic/atomic_sync_timed.h
index f3bf780b0e364..372b5fcfde4e4 100644
--- a/libcxx/include/__atomic/atomic_sync_timed.h
+++ b/libcxx/include/__atomic/atomic_sync_timed.h
@@ -25,10 +25,11 @@
# pragma GCC system_header
#endif
+#if _LIBCPP_STD_VER >= 20 && _LIBCPP_HAS_THREADS
+
_LIBCPP_BEGIN_NAMESPACE_STD
-#if _LIBCPP_STD_VER >= 20
-# if _LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_NEW_SYNC
+# if _LIBCPP_AVAILABILITY_HAS_NEW_SYNC
_LIBCPP_AVAILABILITY_NEW_SYNC
_LIBCPP_EXPORTED_FROM_ABI __cxx_contention_t __atomic_monitor_global(void const* __address) _NOEXCEPT;
@@ -108,7 +109,7 @@ _LIBCPP_HIDE_FROM_ABI bool __atomic_wait_unless_with_timeout(
return __poll_result == __poll_with_backoff_results::__poll_success;
}
-# elif _LIBCPP_HAS_THREADS // _LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_NEW_SYNC
+# else // _LIBCPP_AVAILABILITY_HAS_NEW_SYNC
template <class _AtomicWaitable, class _Poll, class _Rep, class _Period>
_LIBCPP_HIDE_FROM_ABI bool __atomic_wait_unless_with_timeout(
@@ -127,10 +128,10 @@ _LIBCPP_HIDE_FROM_ABI bool __atomic_wait_unless_with_timeout(
return __res == __poll_with_backoff_results::__poll_success;
}
-# endif // _LIBCPP_HAS_THREADS && _LIBCPP_AVAILABILITY_HAS_NEW_SYNC
-
-#endif // C++20
+# endif // _LIBCPP_AVAILABILITY_HAS_NEW_SYNC
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20 && _LIBCPP_HAS_THREADS
+
#endif // _LIBCPP___ATOMIC_ATOMIC_SYNC_TIMED_H
diff --git a/libcxx/include/__atomic/atomic_waitable_traits.h b/libcxx/include/__atomic/atomic_waitable_traits.h
index 369cd2c52b83a..ed26a60df982d 100644
--- a/libcxx/include/__atomic/atomic_waitable_traits.h
+++ b/libcxx/include/__atomic/atomic_waitable_traits.h
@@ -22,10 +22,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
// The customisation points to enable the following functions:
// - __atomic_wait
// - __atomic_wait_unless
@@ -94,8 +94,8 @@ concept __has_native_atomic_wait = is_same_v<_Tp, __cxx_contention_t>;
# endif // _LIBCPP_ABI_ATOMIC_WAIT_NATIVE_BY_SIZE
-#endif // C++20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
#endif // _LIBCPP___ATOMIC_ATOMIC_WAITABLE_TRAITS_H
diff --git a/libcxx/include/__atomic/floating_point_helper.h b/libcxx/include/__atomic/floating_point_helper.h
index 8762ec234b189..4f21006dd27dc 100644
--- a/libcxx/include/__atomic/floating_point_helper.h
+++ b/libcxx/include/__atomic/floating_point_helper.h
@@ -17,10 +17,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
template <class _Tp>
_LIBCPP_HIDE_FROM_ABI constexpr bool __is_fp80_long_double() {
// Only x87-fp80 long double has 64-bit mantissa
@@ -48,8 +48,8 @@ _LIBCPP_HIDE_FROM_ABI constexpr bool __has_rmw_builtin() {
# endif
}
-#endif
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
#endif // _LIBCPP___ATOMIC_FLOATING_POINT_HELPER_H
diff --git a/libcxx/include/__bit/bit_cast.h b/libcxx/include/__bit/bit_cast.h
index 735025065a729..72b558f1446c3 100644
--- a/libcxx/include/__bit/bit_cast.h
+++ b/libcxx/include/__bit/bit_cast.h
@@ -17,18 +17,16 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#ifndef _LIBCPP_CXX03_LANG
+_LIBCPP_BEGIN_NAMESPACE_STD
+
template <class _ToType, class _FromType>
[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI constexpr _ToType __bit_cast(const _FromType& __from) noexcept {
return __builtin_bit_cast(_ToType, __from);
}
-#endif // _LIBCPP_CXX03_LANG
-
-#if _LIBCPP_STD_VER >= 20
+# if _LIBCPP_STD_VER >= 20
template <class _ToType, class _FromType>
requires(sizeof(_ToType) == sizeof(_FromType) && is_trivially_copyable_v<_ToType> &&
@@ -37,8 +35,10 @@ template <class _ToType, class _FromType>
return __builtin_bit_cast(_ToType, __from);
}
-#endif // _LIBCPP_STD_VER >= 20
+# endif // _LIBCPP_STD_VER >= 20
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_CXX03_LANG
+
#endif // _LIBCPP___BIT_BIT_CAST_H
diff --git a/libcxx/include/__bit/bit_ceil.h b/libcxx/include/__bit/bit_ceil.h
index 99881a8538290..73238eb2c37d5 100644
--- a/libcxx/include/__bit/bit_ceil.h
+++ b/libcxx/include/__bit/bit_ceil.h
@@ -19,10 +19,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 17
+_LIBCPP_BEGIN_NAMESPACE_STD
+
template <class _Tp>
[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _Tp __bit_ceil(_Tp __t) noexcept {
if (__t < 2)
@@ -47,8 +47,9 @@ template <__unsigned_integer _Tp>
}
# endif // _LIBCPP_STD_VER >= 20
-#endif // _LIBCPP_STD_VER >= 17
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 17
+
#endif // _LIBCPP___BIT_BIT_CEIL_H
diff --git a/libcxx/include/__charconv/to_chars.h b/libcxx/include/__charconv/to_chars.h
index 8ef09af737559..0a94ba14addc1 100644
--- a/libcxx/include/__charconv/to_chars.h
+++ b/libcxx/include/__charconv/to_chars.h
@@ -18,8 +18,4 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-_LIBCPP_END_NAMESPACE_STD
-
#endif // _LIBCPP___CHARCONV_TO_CHARS
diff --git a/libcxx/include/__chrono/gps_clock.h b/libcxx/include/__chrono/gps_clock.h
index 2e220cab946e3..924156ae5b455 100644
--- a/libcxx/include/__chrono/gps_clock.h
+++ b/libcxx/include/__chrono/gps_clock.h
@@ -28,10 +28,10 @@
_LIBCPP_PUSH_MACROS
# include <__undef_macros>
-_LIBCPP_BEGIN_NAMESPACE_STD
-
# if _LIBCPP_STD_VER >= 20 && _LIBCPP_HAS_TIME_ZONE_DATABASE && _LIBCPP_HAS_FILESYSTEM && _LIBCPP_HAS_LOCALIZATION
+_LIBCPP_BEGIN_NAMESPACE_STD
+
namespace chrono {
class gps_clock;
@@ -78,11 +78,11 @@ class gps_clock {
} // namespace chrono
+_LIBCPP_END_NAMESPACE_STD
+
# endif // _LIBCPP_STD_VER >= 20 && _LIBCPP_HAS_TIME_ZONE_DATABASE && _LIBCPP_HAS_FILESYSTEM &&
// _LIBCPP_HAS_LOCALIZATION
-_LIBCPP_END_NAMESPACE_STD
-
_LIBCPP_POP_MACROS
#endif // _LIBCPP_HAS_EXPERIMENTAL_TZDB
diff --git a/libcxx/include/__chrono/tai_clock.h b/libcxx/include/__chrono/tai_clock.h
index 14c8b70a94af5..9c97e379f4b9a 100644
--- a/libcxx/include/__chrono/tai_clock.h
+++ b/libcxx/include/__chrono/tai_clock.h
@@ -28,10 +28,10 @@
_LIBCPP_PUSH_MACROS
# include <__undef_macros>
-_LIBCPP_BEGIN_NAMESPACE_STD
-
# if _LIBCPP_STD_VER >= 20 && _LIBCPP_HAS_TIME_ZONE_DATABASE && _LIBCPP_HAS_FILESYSTEM && _LIBCPP_HAS_LOCALIZATION
+_LIBCPP_BEGIN_NAMESPACE_STD
+
namespace chrono {
class tai_clock;
@@ -96,11 +96,11 @@ class tai_clock {
} // namespace chrono
+_LIBCPP_END_NAMESPACE_STD
+
# endif // _LIBCPP_STD_VER >= 20 && _LIBCPP_HAS_TIME_ZONE_DATABASE && _LIBCPP_HAS_FILESYSTEM &&
// _LIBCPP_HAS_LOCALIZATION
-_LIBCPP_END_NAMESPACE_STD
-
_LIBCPP_POP_MACROS
#endif // _LIBCPP_HAS_EXPERIMENTAL_TZDB
diff --git a/libcxx/include/__chrono/time_zone.h b/libcxx/include/__chrono/time_zone.h
index d18d59d2736bf..894bcbfd58cfc 100644
--- a/libcxx/include/__chrono/time_zone.h
+++ b/libcxx/include/__chrono/time_zone.h
@@ -35,10 +35,10 @@
_LIBCPP_PUSH_MACROS
# include <__undef_macros>
-_LIBCPP_BEGIN_NAMESPACE_STD
-
# if _LIBCPP_STD_VER >= 20 && _LIBCPP_HAS_TIME_ZONE_DATABASE && _LIBCPP_HAS_FILESYSTEM && _LIBCPP_HAS_LOCALIZATION
+_LIBCPP_BEGIN_NAMESPACE_STD
+
namespace chrono {
enum class choose { earliest, latest };
@@ -173,11 +173,11 @@ operator<=>(const time_zone& __x, const time_zone& __y) noexcept {
} // namespace chrono
+_LIBCPP_END_NAMESPACE_STD
+
# endif // _LIBCPP_STD_VER >= 20 && _LIBCPP_HAS_TIME_ZONE_DATABASE && _LIBCPP_HAS_FILESYSTEM &&
// _LIBCPP_HAS_LOCALIZATION
-_LIBCPP_END_NAMESPACE_STD
-
_LIBCPP_POP_MACROS
#endif // _LIBCPP_HAS_EXPERIMENTAL_TZDB
diff --git a/libcxx/include/__chrono/time_zone_link.h b/libcxx/include/__chrono/time_zone_link.h
index cae40b07c2ca6..3c45d953fb7ef 100644
--- a/libcxx/include/__chrono/time_zone_link.h
+++ b/libcxx/include/__chrono/time_zone_link.h
@@ -29,10 +29,10 @@
_LIBCPP_PUSH_MACROS
# include <__undef_macros>
-_LIBCPP_BEGIN_NAMESPACE_STD
-
# if _LIBCPP_STD_VER >= 20 && _LIBCPP_HAS_TIME_ZONE_DATABASE && _LIBCPP_HAS_FILESYSTEM && _LIBCPP_HAS_LOCALIZATION
+_LIBCPP_BEGIN_NAMESPACE_STD
+
namespace chrono {
class time_zone_link {
@@ -67,11 +67,11 @@ operator<=>(const time_zone_link& __x, const time_zone_link& __y) noexcept {
} // namespace chrono
+_LIBCPP_END_NAMESPACE_STD
+
# endif // _LIBCPP_STD_VER >= 20 && _LIBCPP_HAS_TIME_ZONE_DATABASE && _LIBCPP_HAS_FILESYSTEM &&
// _LIBCPP_HAS_LOCALIZATION
-_LIBCPP_END_NAMESPACE_STD
-
_LIBCPP_POP_MACROS
#endif // _LIBCPP_HAS_EXPERIMENTAL_TZDB
diff --git a/libcxx/include/__chrono/tzdb.h b/libcxx/include/__chrono/tzdb.h
index fb85f66b01968..059de9cc215ab 100644
--- a/libcxx/include/__chrono/tzdb.h
+++ b/libcxx/include/__chrono/tzdb.h
@@ -34,10 +34,10 @@
_LIBCPP_PUSH_MACROS
# include <__undef_macros>
-_LIBCPP_BEGIN_NAMESPACE_STD
-
# if _LIBCPP_STD_VER >= 20 && _LIBCPP_HAS_TIME_ZONE_DATABASE && _LIBCPP_HAS_FILESYSTEM && _LIBCPP_HAS_LOCALIZATION
+_LIBCPP_BEGIN_NAMESPACE_STD
+
namespace chrono {
struct tzdb {
@@ -84,11 +84,11 @@ struct tzdb {
} // namespace chrono
+_LIBCPP_END_NAMESPACE_STD
+
# endif // _LIBCPP_STD_VER >= 20 && _LIBCPP_HAS_TIME_ZONE_DATABASE && _LIBCPP_HAS_FILESYSTEM &&
// _LIBCPP_HAS_LOCALIZATION
-_LIBCPP_END_NAMESPACE_STD
-
_LIBCPP_POP_MACROS
#endif // _LIBCPP_HAS_EXPERIMENTAL_TZDB
diff --git a/libcxx/include/__chrono/tzdb_list.h b/libcxx/include/__chrono/tzdb_list.h
index 2b83a6df1daf8..09cb0e93281e9 100644
--- a/libcxx/include/__chrono/tzdb_list.h
+++ b/libcxx/include/__chrono/tzdb_list.h
@@ -27,10 +27,10 @@
# pragma GCC system_header
# endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
# if _LIBCPP_STD_VER >= 20 && _LIBCPP_HAS_TIME_ZONE_DATABASE && _LIBCPP_HAS_FILESYSTEM && _LIBCPP_HAS_LOCALIZATION
+_LIBCPP_BEGIN_NAMESPACE_STD
+
namespace chrono {
// TODO TZDB
@@ -98,11 +98,11 @@ _LIBCPP_AVAILABILITY_TZDB _LIBCPP_EXPORTED_FROM_ABI const tzdb& reload_tzdb();
} // namespace chrono
+_LIBCPP_END_NAMESPACE_STD
+
# endif // _LIBCPP_STD_VER >= 20 && _LIBCPP_HAS_TIME_ZONE_DATABASE && _LIBCPP_HAS_FILESYSTEM &&
// _LIBCPP_HAS_LOCALIZATION
-_LIBCPP_END_NAMESPACE_STD
-
#endif // _LIBCPP_HAS_EXPERIMENTAL_TZDB
#endif // _LIBCPP___CHRONO_TZDB_LIST_H
diff --git a/libcxx/include/__chrono/utc_clock.h b/libcxx/include/__chrono/utc_clock.h
index 2207b89c92c59..42cb41ea9a6f7 100644
--- a/libcxx/include/__chrono/utc_clock.h
+++ b/libcxx/include/__chrono/utc_clock.h
@@ -27,10 +27,10 @@
# pragma GCC system_header
# endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
# if _LIBCPP_STD_VER >= 20 && _LIBCPP_HAS_TIME_ZONE_DATABASE && _LIBCPP_HAS_FILESYSTEM && _LIBCPP_HAS_LOCALIZATION
+_LIBCPP_BEGIN_NAMESPACE_STD
+
namespace chrono {
class utc_clock;
@@ -153,11 +153,11 @@ utc_clock::to_sys(const utc_time<_Duration>& __time) {
} // namespace chrono
+_LIBCPP_END_NAMESPACE_STD
+
# endif // _LIBCPP_STD_VER >= 20 && _LIBCPP_HAS_TIME_ZONE_DATABASE && _LIBCPP_HAS_FILESYSTEM &&
// _LIBCPP_HAS_LOCALIZATION
-_LIBCPP_END_NAMESPACE_STD
-
#endif // _LIBCPP_HAS_EXPERIMENTAL_TZDB
#endif // _LIBCPP___CHRONO_UTC_CLOCK_H
diff --git a/libcxx/include/__chrono/zoned_time.h b/libcxx/include/__chrono/zoned_time.h
index e63528e57d1cc..c1488320775fc 100644
--- a/libcxx/include/__chrono/zoned_time.h
+++ b/libcxx/include/__chrono/zoned_time.h
@@ -40,10 +40,10 @@
_LIBCPP_PUSH_MACROS
# include <__undef_macros>
-_LIBCPP_BEGIN_NAMESPACE_STD
-
# if _LIBCPP_STD_VER >= 20 && _LIBCPP_HAS_TIME_ZONE_DATABASE && _LIBCPP_HAS_FILESYSTEM && _LIBCPP_HAS_LOCALIZATION
+_LIBCPP_BEGIN_NAMESPACE_STD
+
namespace chrono {
template <class>
@@ -232,11 +232,11 @@ struct hash<chrono::zoned_time<_Duration, _TimeZonePtr>> {
# endif // _LIBCPP_STD_VER >= 26
+_LIBCPP_END_NAMESPACE_STD
+
# endif // _LIBCPP_STD_VER >= 20 && _LIBCPP_HAS_TIME_ZONE_DATABASE && _LIBCPP_HAS_FILESYSTEM &&
// _LIBCPP_HAS_LOCALIZATION
-_LIBCPP_END_NAMESPACE_STD
-
_LIBCPP_POP_MACROS
#endif // _LIBCPP_HAS_EXPERIMENTAL_TZDB
diff --git a/libcxx/include/__compare/common_comparison_category.h b/libcxx/include/__compare/common_comparison_category.h
index eae2ef00624be..f785a27fd28e5 100644
--- a/libcxx/include/__compare/common_comparison_category.h
+++ b/libcxx/include/__compare/common_comparison_category.h
@@ -18,10 +18,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
namespace __comp_detail {
enum _ClassifyCompCategory : unsigned { _None, _PartialOrd, _WeakOrd, _StrongOrd, _CCC_Size };
@@ -79,8 +79,8 @@ struct common_comparison_category {
template <class... _Ts>
using common_comparison_category_t = typename common_comparison_category<_Ts...>::type;
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
#endif // _LIBCPP___COMPARE_COMMON_COMPARISON_CATEGORY_H
diff --git a/libcxx/include/__compare/compare_three_way.h b/libcxx/include/__compare/compare_three_way.h
index 852c5874c61ca..6999000e9dcea 100644
--- a/libcxx/include/__compare/compare_three_way.h
+++ b/libcxx/include/__compare/compare_three_way.h
@@ -18,10 +18,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
struct compare_three_way {
template <class _T1, class _T2>
requires three_way_comparable_with<_T1, _T2>
@@ -33,8 +33,8 @@ struct compare_three_way {
using is_transparent = void;
};
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
#endif // _LIBCPP___COMPARE_COMPARE_THREE_WAY_H
diff --git a/libcxx/include/__compare/compare_three_way_result.h b/libcxx/include/__compare/compare_three_way_result.h
index 264a4d603ca44..ab04e03490e25 100644
--- a/libcxx/include/__compare/compare_three_way_result.h
+++ b/libcxx/include/__compare/compare_three_way_result.h
@@ -17,10 +17,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
template <class, class, class>
struct _LIBCPP_HIDE_FROM_ABI __compare_three_way_result {};
@@ -39,8 +39,8 @@ struct _LIBCPP_NO_SPECIALIZATIONS compare_three_way_result : __compare_three_way
template <class _Tp, class _Up = _Tp>
using compare_three_way_result_t = typename compare_three_way_result<_Tp, _Up>::type;
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
#endif // _LIBCPP___COMPARE_COMPARE_THREE_WAY_RESULT_H
diff --git a/libcxx/include/__compare/ordering.h b/libcxx/include/__compare/ordering.h
index 902ef5329dd43..226b513586bb1 100644
--- a/libcxx/include/__compare/ordering.h
+++ b/libcxx/include/__compare/ordering.h
@@ -17,10 +17,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
// exposition only
enum class _OrdResult : signed char { __less = -1, __equiv = 0, __greater = 1 };
@@ -275,8 +275,8 @@ template <class _Tp>
concept __comparison_category =
is_same_v<_Tp, partial_ordering> || is_same_v<_Tp, weak_ordering> || is_same_v<_Tp, strong_ordering>;
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
#endif // _LIBCPP___COMPARE_ORDERING_H
diff --git a/libcxx/include/__compare/synth_three_way.h b/libcxx/include/__compare/synth_three_way.h
index 63bf56d0cf42b..e1c2642fbdf24 100644
--- a/libcxx/include/__compare/synth_three_way.h
+++ b/libcxx/include/__compare/synth_three_way.h
@@ -19,10 +19,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
// [expos.only.func]
_LIBCPP_HIDE_FROM_ABI inline constexpr auto __synth_three_way = []<class _Tp, class _Up>(const _Tp& __t, const _Up& __u)
@@ -46,8 +46,8 @@ template <class _Tp, class _Up = _Tp>
using __synth_three_way_result _LIBCPP_NODEBUG =
decltype(std::__synth_three_way(std::declval<_Tp&>(), std::declval<_Up&>()));
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
#endif // _LIBCPP___COMPARE_SYNTH_THREE_WAY_H
diff --git a/libcxx/include/__compare/three_way_comparable.h b/libcxx/include/__compare/three_way_comparable.h
index ad6d05a681145..5eb0058708fc9 100644
--- a/libcxx/include/__compare/three_way_comparable.h
+++ b/libcxx/include/__compare/three_way_comparable.h
@@ -24,10 +24,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
template <class _Tp, class _Cat>
concept __compares_as = same_as<common_comparison_category_t<_Tp, _Cat>, _Cat>;
@@ -48,8 +48,8 @@ concept three_way_comparable_with =
{ __u <=> __t } -> __compares_as<_Cat>;
};
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
#endif // _LIBCPP___COMPARE_THREE_WAY_COMPARABLE_H
diff --git a/libcxx/include/__concepts/arithmetic.h b/libcxx/include/__concepts/arithmetic.h
index 64c0200783df7..addbefa7e11a6 100644
--- a/libcxx/include/__concepts/arithmetic.h
+++ b/libcxx/include/__concepts/arithmetic.h
@@ -18,10 +18,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
// [concepts.arithmetic], arithmetic concepts
template <class _Tp>
@@ -36,8 +36,8 @@ concept unsigned_integral = integral<_Tp> && !signed_integral<_Tp>;
template <class _Tp>
concept floating_point = is_floating_point_v<_Tp>;
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
#endif // _LIBCPP___CONCEPTS_ARITHMETIC_H
diff --git a/libcxx/include/__concepts/assignable.h b/libcxx/include/__concepts/assignable.h
index 7423daabba780..70f0bc3b0c95a 100644
--- a/libcxx/include/__concepts/assignable.h
+++ b/libcxx/include/__concepts/assignable.h
@@ -20,10 +20,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
// [concept.assignable]
template <class _Lhs, class _Rhs>
@@ -34,8 +34,8 @@ concept assignable_from =
{ __lhs = std::forward<_Rhs>(__rhs) } -> same_as<_Lhs>;
};
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
#endif // _LIBCPP___CONCEPTS_ASSIGNABLE_H
diff --git a/libcxx/include/__concepts/boolean_testable.h b/libcxx/include/__concepts/boolean_testable.h
index b379fe9c5a880..458e4c1da7251 100644
--- a/libcxx/include/__concepts/boolean_testable.h
+++ b/libcxx/include/__concepts/boolean_testable.h
@@ -17,10 +17,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
// [concepts.booleantestable]
template <class _Tp>
@@ -31,8 +31,8 @@ concept __boolean_testable = __boolean_testable_impl<_Tp> && requires(_Tp&& __t)
{ !std::forward<_Tp>(__t) } -> __boolean_testable_impl;
};
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
#endif // _LIBCPP___CONCEPTS_BOOLEAN_TESTABLE_H
diff --git a/libcxx/include/__concepts/class_or_enum.h b/libcxx/include/__concepts/class_or_enum.h
index 9fceed034c468..920bf8a6fa709 100644
--- a/libcxx/include/__concepts/class_or_enum.h
+++ b/libcxx/include/__concepts/class_or_enum.h
@@ -18,17 +18,17 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
// Whether a type is a class type or enumeration type according to the Core wording.
template <class _Tp>
concept __class_or_enum = is_class_v<_Tp> || is_union_v<_Tp> || is_enum_v<_Tp>;
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
#endif // _LIBCPP___CONCEPTS_CLASS_OR_ENUM_H
diff --git a/libcxx/include/__concepts/common_reference_with.h b/libcxx/include/__concepts/common_reference_with.h
index 4eb687e071bc5..613de04b7b5b3 100644
--- a/libcxx/include/__concepts/common_reference_with.h
+++ b/libcxx/include/__concepts/common_reference_with.h
@@ -18,10 +18,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
// [concept.commonref]
template <class _Tp, class _Up>
@@ -29,8 +29,8 @@ concept common_reference_with =
same_as<common_reference_t<_Tp, _Up>, common_reference_t<_Up, _Tp>> &&
convertible_to<_Tp, common_reference_t<_Tp, _Up>> && convertible_to<_Up, common_reference_t<_Tp, _Up>>;
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
#endif // _LIBCPP___CONCEPTS_COMMON_REFERENCE_WITH_H
diff --git a/libcxx/include/__concepts/comparison_common_type.h b/libcxx/include/__concepts/comparison_common_type.h
index 3f0d770511f47..d06a8dc8786f9 100644
--- a/libcxx/include/__concepts/comparison_common_type.h
+++ b/libcxx/include/__concepts/comparison_common_type.h
@@ -19,10 +19,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
template <class _Tp, class _Up, class _CommonRef = common_reference_t<const _Tp&, const _Up&>>
concept __comparison_common_type_with_impl =
same_as<common_reference_t<const _Tp&, const _Up&>, common_reference_t<const _Up&, const _Tp&>> && requires {
@@ -33,8 +33,8 @@ concept __comparison_common_type_with_impl =
template <class _Tp, class _Up>
concept __comparison_common_type_with = __comparison_common_type_with_impl<remove_cvref_t<_Tp>, remove_cvref_t<_Up>>;
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
#endif // _LIBCPP___CONCEPTS_COMPARISON_COMMON_TYPE_H
diff --git a/libcxx/include/__concepts/constructible.h b/libcxx/include/__concepts/constructible.h
index 835a44429c092..7b39c80304bcb 100644
--- a/libcxx/include/__concepts/constructible.h
+++ b/libcxx/include/__concepts/constructible.h
@@ -18,10 +18,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
// [concept.constructible]
template <class _Tp, class... _Args>
concept constructible_from = destructible<_Tp> && is_constructible_v<_Tp, _Args...>;
@@ -48,8 +48,8 @@ concept copy_constructible =
constructible_from<_Tp, const _Tp> && convertible_to<const _Tp, _Tp>;
// clang-format on
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
#endif // _LIBCPP___CONCEPTS_CONSTRUCTIBLE_H
diff --git a/libcxx/include/__concepts/convertible_to.h b/libcxx/include/__concepts/convertible_to.h
index 6d5b6c1268d5d..01e3cfa2a3bf8 100644
--- a/libcxx/include/__concepts/convertible_to.h
+++ b/libcxx/include/__concepts/convertible_to.h
@@ -17,17 +17,17 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
// [concept.convertible]
template <class _From, class _To>
concept convertible_to = is_convertible_v<_From, _To> && requires { static_cast<_To>(std::declval<_From>()); };
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
#endif // _LIBCPP___CONCEPTS_CONVERTIBLE_TO_H
diff --git a/libcxx/include/__concepts/copyable.h b/libcxx/include/__concepts/copyable.h
index 2bf0ad42fc1a8..3bcee3422902a 100644
--- a/libcxx/include/__concepts/copyable.h
+++ b/libcxx/include/__concepts/copyable.h
@@ -18,10 +18,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
// [concepts.object]
// clang-format off
@@ -34,8 +34,8 @@ concept copyable =
assignable_from<_Tp&, const _Tp>;
// clang-format on
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
#endif // _LIBCPP___CONCEPTS_COPYABLE_H
diff --git a/libcxx/include/__concepts/derived_from.h b/libcxx/include/__concepts/derived_from.h
index 9875faee81b90..418f5db8ba9a0 100644
--- a/libcxx/include/__concepts/derived_from.h
+++ b/libcxx/include/__concepts/derived_from.h
@@ -17,17 +17,17 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
// [concept.derived]
template <class _Dp, class _Bp>
concept derived_from = is_base_of_v<_Bp, _Dp> && is_convertible_v<const volatile _Dp*, const volatile _Bp*>;
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
#endif // _LIBCPP___CONCEPTS_DERIVED_FROM_H
diff --git a/libcxx/include/__concepts/destructible.h b/libcxx/include/__concepts/destructible.h
index 28b4b1bc24ec9..1db7f6a0a7c71 100644
--- a/libcxx/include/__concepts/destructible.h
+++ b/libcxx/include/__concepts/destructible.h
@@ -16,17 +16,17 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
// [concept.destructible]
template <class _Tp>
concept destructible = is_nothrow_destructible_v<_Tp>;
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
#endif // _LIBCPP___CONCEPTS_DESTRUCTIBLE_H
diff --git a/libcxx/include/__concepts/different_from.h b/libcxx/include/__concepts/different_from.h
index fd31f6e25805d..f9888c918d7c9 100644
--- a/libcxx/include/__concepts/different_from.h
+++ b/libcxx/include/__concepts/different_from.h
@@ -17,15 +17,15 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
template <class _Tp, class _Up>
concept __different_from = !same_as<remove_cvref_t<_Tp>, remove_cvref_t<_Up>>;
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
#endif // _LIBCPP___CONCEPTS_DIFFERENT_FROM_H
diff --git a/libcxx/include/__concepts/equality_comparable.h b/libcxx/include/__concepts/equality_comparable.h
index 56fc6f8b685c0..411a19c60ddd9 100644
--- a/libcxx/include/__concepts/equality_comparable.h
+++ b/libcxx/include/__concepts/equality_comparable.h
@@ -20,10 +20,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
// [concept.equalitycomparable]
template <class _Tp, class _Up>
@@ -50,8 +50,8 @@ concept equality_comparable_with =
__weakly_equality_comparable_with<_Tp, _Up>;
// clang-format on
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
#endif // _LIBCPP___CONCEPTS_EQUALITY_COMPARABLE_H
diff --git a/libcxx/include/__concepts/invocable.h b/libcxx/include/__concepts/invocable.h
index 8a29398b3a29f..92b2ec56affa4 100644
--- a/libcxx/include/__concepts/invocable.h
+++ b/libcxx/include/__concepts/invocable.h
@@ -17,10 +17,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
// [concept.invocable]
template <class _Fn, class... _Args>
@@ -33,8 +33,8 @@ concept invocable = requires(_Fn&& __fn, _Args&&... __args) {
template <class _Fn, class... _Args>
concept regular_invocable = invocable<_Fn, _Args...>;
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
#endif // _LIBCPP___CONCEPTS_INVOCABLE_H
diff --git a/libcxx/include/__concepts/movable.h b/libcxx/include/__concepts/movable.h
index bc5b9d767c6a5..f38ab37be89a4 100644
--- a/libcxx/include/__concepts/movable.h
+++ b/libcxx/include/__concepts/movable.h
@@ -19,17 +19,17 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
// [concepts.object]
template <class _Tp>
concept movable = is_object_v<_Tp> && move_constructible<_Tp> && assignable_from<_Tp&, _Tp> && swappable<_Tp>;
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
#endif // _LIBCPP___CONCEPTS_MOVABLE_H
diff --git a/libcxx/include/__concepts/predicate.h b/libcxx/include/__concepts/predicate.h
index e0263a878b065..9e903a9efdb22 100644
--- a/libcxx/include/__concepts/predicate.h
+++ b/libcxx/include/__concepts/predicate.h
@@ -18,17 +18,17 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
// [concept.predicate]
template <class _Fn, class... _Args>
concept predicate = regular_invocable<_Fn, _Args...> && __boolean_testable<invoke_result_t<_Fn, _Args...>>;
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
#endif // _LIBCPP___CONCEPTS_PREDICATE_H
diff --git a/libcxx/include/__concepts/regular.h b/libcxx/include/__concepts/regular.h
index 9f3d8bf30be3e..ab4f68e8f4603 100644
--- a/libcxx/include/__concepts/regular.h
+++ b/libcxx/include/__concepts/regular.h
@@ -17,17 +17,17 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
// [concept.object]
template <class _Tp>
concept regular = semiregular<_Tp> && equality_comparable<_Tp>;
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
#endif // _LIBCPP___CONCEPTS_REGULAR_H
diff --git a/libcxx/include/__concepts/relation.h b/libcxx/include/__concepts/relation.h
index 7545a7db93da7..ccd3643e81fc4 100644
--- a/libcxx/include/__concepts/relation.h
+++ b/libcxx/include/__concepts/relation.h
@@ -16,10 +16,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
// [concept.relation]
template <class _Rp, class _Tp, class _Up>
@@ -36,8 +36,8 @@ concept equivalence_relation = relation<_Rp, _Tp, _Up>;
template <class _Rp, class _Tp, class _Up>
concept strict_weak_order = relation<_Rp, _Tp, _Up>;
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
#endif // _LIBCPP___CONCEPTS_RELATION_H
diff --git a/libcxx/include/__concepts/same_as.h b/libcxx/include/__concepts/same_as.h
index 4241131c70c1f..1385e4d84fdf4 100644
--- a/libcxx/include/__concepts/same_as.h
+++ b/libcxx/include/__concepts/same_as.h
@@ -16,10 +16,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
// [concept.same]
template <class _Tp, class _Up>
@@ -28,8 +28,8 @@ concept __same_as_impl = _IsSame<_Tp, _Up>::value;
template <class _Tp, class _Up>
concept same_as = __same_as_impl<_Tp, _Up> && __same_as_impl<_Up, _Tp>;
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
#endif // _LIBCPP___CONCEPTS_SAME_AS_H
diff --git a/libcxx/include/__concepts/semiregular.h b/libcxx/include/__concepts/semiregular.h
index 7a159d17dfc10..d047e8dec122f 100644
--- a/libcxx/include/__concepts/semiregular.h
+++ b/libcxx/include/__concepts/semiregular.h
@@ -17,17 +17,17 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
// [concept.object]
template <class _Tp>
concept semiregular = copyable<_Tp> && default_initializable<_Tp>;
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
#endif // _LIBCPP___CONCEPTS_SEMIREGULAR_H
diff --git a/libcxx/include/__concepts/swappable.h b/libcxx/include/__concepts/swappable.h
index c691d3ab1e12b..5077772781619 100644
--- a/libcxx/include/__concepts/swappable.h
+++ b/libcxx/include/__concepts/swappable.h
@@ -30,10 +30,10 @@
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
// [concept.swappable]
namespace ranges {
@@ -113,10 +113,10 @@ concept swappable_with = common_reference_with<_Tp, _Up> && requires(_Tp&& __t,
ranges::swap(std::forward<_Up>(__u), std::forward<_Tp>(__t));
};
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
_LIBCPP_POP_MACROS
#endif // _LIBCPP___CONCEPTS_SWAPPABLE_H
diff --git a/libcxx/include/__concepts/totally_ordered.h b/libcxx/include/__concepts/totally_ordered.h
index 186c3b430dd54..fc4d564b3b4db 100644
--- a/libcxx/include/__concepts/totally_ordered.h
+++ b/libcxx/include/__concepts/totally_ordered.h
@@ -19,10 +19,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
// [concept.totallyordered]
template <class _Tp, class _Up>
@@ -52,8 +52,8 @@ concept totally_ordered_with =
__partially_ordered_with<_Tp, _Up>;
// clang-format on
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
#endif // _LIBCPP___CONCEPTS_TOTALLY_ORDERED_H
diff --git a/libcxx/include/__cstddef/max_align_t.h b/libcxx/include/__cstddef/max_align_t.h
index 7c09c7e7f3017..e44665ec5ebb4 100644
--- a/libcxx/include/__cstddef/max_align_t.h
+++ b/libcxx/include/__cstddef/max_align_t.h
@@ -16,12 +16,14 @@
# pragma GCC system_header
#endif
+#if !defined(_LIBCPP_CXX03_LANG)
+
_LIBCPP_BEGIN_NAMESPACE_STD
-#if !defined(_LIBCPP_CXX03_LANG)
using ::max_align_t _LIBCPP_USING_IF_EXISTS;
-#endif
_LIBCPP_END_NAMESPACE_STD
+#endif
+
#endif // _LIBCPP___CSTDDEF_MAX_ALIGN_T_H
diff --git a/libcxx/include/__format/container_adaptor.h b/libcxx/include/__format/container_adaptor.h
index 6a99a028615c6..ec8b1dedb190b 100644
--- a/libcxx/include/__format/container_adaptor.h
+++ b/libcxx/include/__format/container_adaptor.h
@@ -24,10 +24,10 @@
#include <__type_traits/is_const.h>
#include <__type_traits/maybe_const.h>
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 23
+_LIBCPP_BEGIN_NAMESPACE_STD
+
// [container.adaptors.format] only specifies the library should provide the
// formatter specializations, not which header should provide them.
// Since <format> includes a lot of headers, add these headers here instead of
@@ -66,8 +66,8 @@ template <class _CharT, class _Tp, formattable<_CharT> _Container>
struct formatter<stack<_Tp, _Container>, _CharT>
: public __formatter_container_adaptor<stack<_Tp, _Container>, _CharT> {};
-#endif // _LIBCPP_STD_VER >= 23
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 23
+
#endif // _LIBCPP___FORMAT_CONTAINER_ADAPTOR_H
diff --git a/libcxx/include/__format/enable_insertable.h b/libcxx/include/__format/enable_insertable.h
index 29fe566ff06a3..d5832021aaf71 100644
--- a/libcxx/include/__format/enable_insertable.h
+++ b/libcxx/include/__format/enable_insertable.h
@@ -16,10 +16,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
namespace __format {
/// Opt-in to enable \ref __insertable for a \a _Container.
@@ -28,8 +28,8 @@ inline constexpr bool __enable_insertable = false;
} // namespace __format
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
#endif // _LIBCPP___FORMAT_ENABLE_INSERTABLE_H
diff --git a/libcxx/include/__format/escaped_output_table.h b/libcxx/include/__format/escaped_output_table.h
index 1401b4637d839..e0e1818d27457 100644
--- a/libcxx/include/__format/escaped_output_table.h
+++ b/libcxx/include/__format/escaped_output_table.h
@@ -70,10 +70,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 23
+_LIBCPP_BEGIN_NAMESPACE_STD
+
namespace __escaped_output_table {
// clang-format off
@@ -880,8 +880,8 @@ _LIBCPP_HIDE_FROM_ABI inline constexpr uint32_t __entries[735] = {
// clang-format on
} // namespace __escaped_output_table
-#endif // _LIBCPP_STD_VER >= 23
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 23
+
#endif // _LIBCPP___FORMAT_ESCAPED_OUTPUT_TABLE_H
diff --git a/libcxx/include/__format/fmt_pair_like.h b/libcxx/include/__format/fmt_pair_like.h
index d2f2f54d5ac0b..e7369bdf2000c 100644
--- a/libcxx/include/__format/fmt_pair_like.h
+++ b/libcxx/include/__format/fmt_pair_like.h
@@ -20,10 +20,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 23
+_LIBCPP_BEGIN_NAMESPACE_STD
+
// [tuple.like] defines a tuple-like exposition only concept. This concept is not related to that. Therefore it uses a
// different name for the concept.
//
@@ -35,8 +35,8 @@ template <class _Tp>
concept __fmt_pair_like =
__is_specialization_v<_Tp, pair> || (__is_specialization_v<_Tp, tuple> && tuple_size_v<_Tp> == 2);
-#endif // _LIBCPP_STD_VER >= 23
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 23
+
#endif // _LIBCPP___FORMAT_FMT_PAIR_LIKE_H
diff --git a/libcxx/include/__format/formatter_tuple.h b/libcxx/include/__format/formatter_tuple.h
index 0b095e6f71af4..c46d02ef381e1 100644
--- a/libcxx/include/__format/formatter_tuple.h
+++ b/libcxx/include/__format/formatter_tuple.h
@@ -31,10 +31,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 23
+_LIBCPP_BEGIN_NAMESPACE_STD
+
template <__fmt_char_type _CharT, class _Tuple, formattable<_CharT>... _Args>
struct __formatter_tuple {
_LIBCPP_HIDE_FROM_ABI constexpr void set_separator(basic_string_view<_CharT> __separator) noexcept {
@@ -141,8 +141,8 @@ struct formatter<pair<_Args...>, _CharT> : public __formatter_tuple<_CharT, pair
template <__fmt_char_type _CharT, formattable<_CharT>... _Args>
struct formatter<tuple<_Args...>, _CharT> : public __formatter_tuple<_CharT, tuple<_Args...>, _Args...> {};
-#endif // _LIBCPP_STD_VER >= 23
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 23
+
#endif // _LIBCPP___FORMAT_FORMATTER_TUPLE_H
diff --git a/libcxx/include/__format/range_default_formatter.h b/libcxx/include/__format/range_default_formatter.h
index 2d2190657b1af..f295712b17793 100644
--- a/libcxx/include/__format/range_default_formatter.h
+++ b/libcxx/include/__format/range_default_formatter.h
@@ -32,10 +32,10 @@
#include <__utility/pair.h>
#include <string_view>
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 23
+_LIBCPP_BEGIN_NAMESPACE_STD
+
template <class _Rp, class _CharT>
concept __const_formattable_range =
ranges::input_range<const _Rp> && formattable<ranges::range_reference_t<const _Rp>, _CharT>;
@@ -168,8 +168,8 @@ template <ranges::input_range _Rp, class _CharT>
requires(format_kind<_Rp> != range_format::disabled && formattable<ranges::range_reference_t<_Rp>, _CharT>)
struct formatter<_Rp, _CharT> : __range_default_formatter<format_kind<_Rp>, _Rp, _CharT> {};
-#endif // _LIBCPP_STD_VER >= 23
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 23
+
#endif // _LIBCPP___FORMAT_RANGE_DEFAULT_FORMATTER_H
diff --git a/libcxx/include/__format/range_format.h b/libcxx/include/__format/range_format.h
index fe43923f9d940..41551e0735c9c 100644
--- a/libcxx/include/__format/range_format.h
+++ b/libcxx/include/__format/range_format.h
@@ -20,10 +20,10 @@
#include <__ranges/concepts.h>
#include <__type_traits/remove_cvref.h>
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 23
+_LIBCPP_BEGIN_NAMESPACE_STD
+
_LIBCPP_DIAGNOSTIC_PUSH
_LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wshadow")
_LIBCPP_GCC_DIAGNOSTIC_IGNORED("-Wshadow")
@@ -64,8 +64,8 @@ inline constexpr range_format format_kind<_Rp> = [] {
return range_format::sequence;
}();
-#endif // _LIBCPP_STD_VER >= 23
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 23
+
#endif
diff --git a/libcxx/include/__format/range_formatter.h b/libcxx/include/__format/range_formatter.h
index 06d2b4cb4b9f4..d0964dce6db81 100644
--- a/libcxx/include/__format/range_formatter.h
+++ b/libcxx/include/__format/range_formatter.h
@@ -34,10 +34,10 @@
#include <__type_traits/remove_cvref.h>
#include <string_view>
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 23
+_LIBCPP_BEGIN_NAMESPACE_STD
+
template <class _Tp, class _CharT = char>
requires same_as<remove_cvref_t<_Tp>, _Tp> && formattable<_Tp, _CharT>
struct range_formatter {
@@ -258,8 +258,8 @@ struct range_formatter {
basic_string_view<_CharT> __closing_bracket_ = _LIBCPP_STATICALLY_WIDEN(_CharT, "]");
};
-#endif // _LIBCPP_STD_VER >= 23
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 23
+
#endif // _LIBCPP___FORMAT_RANGE_FORMATTER_H
diff --git a/libcxx/include/__functional/binary_negate.h b/libcxx/include/__functional/binary_negate.h
index 73acfb37a7ee1..f7784fb1f1f11 100644
--- a/libcxx/include/__functional/binary_negate.h
+++ b/libcxx/include/__functional/binary_negate.h
@@ -17,10 +17,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_NEGATORS)
+_LIBCPP_BEGIN_NAMESPACE_STD
+
template <class _Predicate>
class _LIBCPP_DEPRECATED_IN_CXX17 binary_negate
: public __binary_function<typename _Predicate::first_argument_type,
@@ -44,8 +44,8 @@ not2(const _Predicate& __pred) {
return binary_negate<_Predicate>(__pred);
}
-#endif // _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_NEGATORS)
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_NEGATORS)
+
#endif // _LIBCPP___FUNCTIONAL_BINARY_NEGATE_H
diff --git a/libcxx/include/__functional/binder1st.h b/libcxx/include/__functional/binder1st.h
index 77a032245096b..023c8c6b8c35b 100644
--- a/libcxx/include/__functional/binder1st.h
+++ b/libcxx/include/__functional/binder1st.h
@@ -17,10 +17,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER <= 14 || defined(_LIBCPP_ENABLE_CXX17_REMOVED_BINDERS)
+_LIBCPP_BEGIN_NAMESPACE_STD
+
template <class _Operation>
class _LIBCPP_DEPRECATED_IN_CXX11 binder1st
: public __unary_function<typename _Operation::second_argument_type, typename _Operation::result_type> {
@@ -47,8 +47,8 @@ bind1st(const _Operation& __op, const _Tp& __x) {
return binder1st<_Operation>(__op, __x);
}
-#endif // _LIBCPP_STD_VER <= 14 || defined(_LIBCPP_ENABLE_CXX17_REMOVED_BINDERS)
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER <= 14 || defined(_LIBCPP_ENABLE_CXX17_REMOVED_BINDERS)
+
#endif // _LIBCPP___FUNCTIONAL_BINDER1ST_H
diff --git a/libcxx/include/__functional/binder2nd.h b/libcxx/include/__functional/binder2nd.h
index 8cc644151aff5..e814c5dcbc704 100644
--- a/libcxx/include/__functional/binder2nd.h
+++ b/libcxx/include/__functional/binder2nd.h
@@ -17,10 +17,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER <= 14 || defined(_LIBCPP_ENABLE_CXX17_REMOVED_BINDERS)
+_LIBCPP_BEGIN_NAMESPACE_STD
+
template <class _Operation>
class _LIBCPP_DEPRECATED_IN_CXX11 binder2nd
: public __unary_function<typename _Operation::first_argument_type, typename _Operation::result_type> {
@@ -47,8 +47,8 @@ bind2nd(const _Operation& __op, const _Tp& __x) {
return binder2nd<_Operation>(__op, __x);
}
-#endif // _LIBCPP_STD_VER <= 14 || defined(_LIBCPP_ENABLE_CXX17_REMOVED_BINDERS)
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER <= 14 || defined(_LIBCPP_ENABLE_CXX17_REMOVED_BINDERS)
+
#endif // _LIBCPP___FUNCTIONAL_BINDER2ND_H
diff --git a/libcxx/include/__functional/compose.h b/libcxx/include/__functional/compose.h
index 4b86dd37cd48a..20b30660b507b 100644
--- a/libcxx/include/__functional/compose.h
+++ b/libcxx/include/__functional/compose.h
@@ -20,10 +20,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
struct __compose_op {
template <class _Fn1, class _Fn2, class... _Args>
_LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Fn1&& __f1, _Fn2&& __f2, _Args&&... __args) const noexcept(noexcept(
@@ -46,8 +46,8 @@ _LIBCPP_HIDE_FROM_ABI constexpr auto __compose(_Fn1&& __f1, _Fn2&& __f2) noexcep
return __compose_t<decay_t<_Fn1>, decay_t<_Fn2>>(std::forward<_Fn1>(__f1), std::forward<_Fn2>(__f2));
}
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
#endif // _LIBCPP___FUNCTIONAL_COMPOSE_H
diff --git a/libcxx/include/__functional/invoke.h b/libcxx/include/__functional/invoke.h
index ab201e94206e1..f7d6a23a4e520 100644
--- a/libcxx/include/__functional/invoke.h
+++ b/libcxx/include/__functional/invoke.h
@@ -19,19 +19,17 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 17
+_LIBCPP_BEGIN_NAMESPACE_STD
+
template <class _Fn, class... _Args>
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 invoke_result_t<_Fn, _Args...>
invoke(_Fn&& __f, _Args&&... __args) noexcept(is_nothrow_invocable_v<_Fn, _Args...>) {
return std::__invoke(std::forward<_Fn>(__f), std::forward<_Args>(__args)...);
}
-#endif // _LIBCPP_STD_VER >= 17
-
-#if _LIBCPP_STD_VER >= 23
+# if _LIBCPP_STD_VER >= 23
template <class _Result, class _Fn, class... _Args>
requires is_invocable_r_v<_Result, _Fn, _Args...>
_LIBCPP_HIDE_FROM_ABI constexpr _Result
@@ -48,8 +46,10 @@ invoke_r(_Fn&& __f, _Args&&... __args) noexcept(is_nothrow_invocable_r_v<_Result
return std::invoke(std::forward<_Fn>(__f), std::forward<_Args>(__args)...);
}
}
-#endif
+# endif
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 17
+
#endif // _LIBCPP___FUNCTIONAL_INVOKE_H
diff --git a/libcxx/include/__functional/mem_fun_ref.h b/libcxx/include/__functional/mem_fun_ref.h
index 68223772a1587..bfae51454ec51 100644
--- a/libcxx/include/__functional/mem_fun_ref.h
+++ b/libcxx/include/__functional/mem_fun_ref.h
@@ -18,10 +18,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER <= 14 || defined(_LIBCPP_ENABLE_CXX17_REMOVED_BINDERS)
+_LIBCPP_BEGIN_NAMESPACE_STD
+
template <class _Sp, class _Tp>
class _LIBCPP_DEPRECATED_IN_CXX11 mem_fun_t : public __unary_function<_Tp*, _Sp> {
_Sp (_Tp::*__p_)();
@@ -138,8 +138,8 @@ mem_fun_ref(_Sp (_Tp::*__f)(_Ap) const) {
return const_mem_fun1_ref_t<_Sp, _Tp, _Ap>(__f);
}
-#endif // _LIBCPP_STD_VER <= 14 || defined(_LIBCPP_ENABLE_CXX17_REMOVED_BINDERS)
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER <= 14 || defined(_LIBCPP_ENABLE_CXX17_REMOVED_BINDERS)
+
#endif // _LIBCPP___FUNCTIONAL_MEM_FUN_REF_H
diff --git a/libcxx/include/__functional/perfect_forward.h b/libcxx/include/__functional/perfect_forward.h
index 37c3d15b4bec0..c0408b410e2f9 100644
--- a/libcxx/include/__functional/perfect_forward.h
+++ b/libcxx/include/__functional/perfect_forward.h
@@ -28,10 +28,10 @@
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 17
+_LIBCPP_BEGIN_NAMESPACE_STD
+
template <class _Op, class _Indices, class... _BoundArgs>
struct __perfect_forward_impl;
@@ -96,10 +96,10 @@ struct __perfect_forward_impl<_Op, index_sequence<_Idx...>, _BoundArgs...> {
template <class _Op, class... _Args>
using __perfect_forward _LIBCPP_NODEBUG = __perfect_forward_impl<_Op, index_sequence_for<_Args...>, _Args...>;
-#endif // _LIBCPP_STD_VER >= 17
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 17
+
_LIBCPP_POP_MACROS
#endif // _LIBCPP___FUNCTIONAL_PERFECT_FORWARD_H
diff --git a/libcxx/include/__functional/pointer_to_binary_function.h b/libcxx/include/__functional/pointer_to_binary_function.h
index eb0e7674eea93..89e0fa5fe2ac1 100644
--- a/libcxx/include/__functional/pointer_to_binary_function.h
+++ b/libcxx/include/__functional/pointer_to_binary_function.h
@@ -17,10 +17,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER <= 14 || defined(_LIBCPP_ENABLE_CXX17_REMOVED_BINDERS)
+_LIBCPP_BEGIN_NAMESPACE_STD
+
template <class _Arg1, class _Arg2, class _Result>
class _LIBCPP_DEPRECATED_IN_CXX11 pointer_to_binary_function : public __binary_function<_Arg1, _Arg2, _Result> {
_Result (*__f_)(_Arg1, _Arg2);
@@ -36,8 +36,8 @@ ptr_fun(_Result (*__f)(_Arg1, _Arg2)) {
return pointer_to_binary_function<_Arg1, _Arg2, _Result>(__f);
}
-#endif
-
_LIBCPP_END_NAMESPACE_STD
+#endif
+
#endif // _LIBCPP___FUNCTIONAL_POINTER_TO_BINARY_FUNCTION_H
diff --git a/libcxx/include/__functional/pointer_to_unary_function.h b/libcxx/include/__functional/pointer_to_unary_function.h
index 459d24abdd7e7..b7778e4502dbc 100644
--- a/libcxx/include/__functional/pointer_to_unary_function.h
+++ b/libcxx/include/__functional/pointer_to_unary_function.h
@@ -17,10 +17,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER <= 14 || defined(_LIBCPP_ENABLE_CXX17_REMOVED_BINDERS)
+_LIBCPP_BEGIN_NAMESPACE_STD
+
template <class _Arg, class _Result>
class _LIBCPP_DEPRECATED_IN_CXX11 pointer_to_unary_function : public __unary_function<_Arg, _Result> {
_Result (*__f_)(_Arg);
@@ -36,8 +36,8 @@ ptr_fun(_Result (*__f)(_Arg)) {
return pointer_to_unary_function<_Arg, _Result>(__f);
}
-#endif // _LIBCPP_STD_VER <= 14 || defined(_LIBCPP_ENABLE_CXX17_REMOVED_BINDERS)
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER <= 14 || defined(_LIBCPP_ENABLE_CXX17_REMOVED_BINDERS)
+
#endif // _LIBCPP___FUNCTIONAL_POINTER_TO_UNARY_FUNCTION_H
diff --git a/libcxx/include/__functional/ranges_operations.h b/libcxx/include/__functional/ranges_operations.h
index dc9da061af264..66fe053b15634 100644
--- a/libcxx/include/__functional/ranges_operations.h
+++ b/libcxx/include/__functional/ranges_operations.h
@@ -21,10 +21,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
namespace ranges {
struct equal_to {
@@ -115,8 +115,8 @@ inline const bool __is_generic_transparent_comparator_v<ranges::less> = true;
template <>
inline const bool __is_generic_transparent_comparator_v<ranges::greater> = true;
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
#endif // _LIBCPP___FUNCTIONAL_RANGES_OPERATIONS_H
diff --git a/libcxx/include/__functional/unary_negate.h b/libcxx/include/__functional/unary_negate.h
index a93abc8e6b1c6..761f0be5f8562 100644
--- a/libcxx/include/__functional/unary_negate.h
+++ b/libcxx/include/__functional/unary_negate.h
@@ -17,10 +17,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_NEGATORS)
+_LIBCPP_BEGIN_NAMESPACE_STD
+
template <class _Predicate>
class _LIBCPP_DEPRECATED_IN_CXX17 unary_negate : public __unary_function<typename _Predicate::argument_type, bool> {
_Predicate __pred_;
@@ -40,8 +40,8 @@ not1(const _Predicate& __pred) {
return unary_negate<_Predicate>(__pred);
}
-#endif // _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_NEGATORS)
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_NEGATORS)
+
#endif // _LIBCPP___FUNCTIONAL_UNARY_NEGATE_H
diff --git a/libcxx/include/__fwd/span.h b/libcxx/include/__fwd/span.h
index 5d473ee51c6b7..8610915edd02e 100644
--- a/libcxx/include/__fwd/span.h
+++ b/libcxx/include/__fwd/span.h
@@ -21,18 +21,18 @@
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
inline constexpr size_t dynamic_extent = numeric_limits<size_t>::max();
template <typename _Tp, size_t _Extent = dynamic_extent>
class span;
-#endif
-
_LIBCPP_END_NAMESPACE_STD
+#endif
+
_LIBCPP_POP_MACROS
#endif // _LIBCPP___FWD_SPAN_H
diff --git a/libcxx/include/__fwd/variant.h b/libcxx/include/__fwd/variant.h
index fef7071b32646..a484248fe542c 100644
--- a/libcxx/include/__fwd/variant.h
+++ b/libcxx/include/__fwd/variant.h
@@ -16,10 +16,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 17
+_LIBCPP_BEGIN_NAMESPACE_STD
+
template <class... _Types>
class variant;
@@ -61,8 +61,8 @@ _LIBCPP_HIDE_FROM_ABI constexpr const _Tp& get(const variant<_Types...>&);
template <class _Tp, class... _Types>
_LIBCPP_HIDE_FROM_ABI constexpr const _Tp&& get(const variant<_Types...>&&);
-#endif // _LIBCPP_STD_VER >= 17
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 17
+
#endif // _LIBCPP___FWD_VARIANT_H
diff --git a/libcxx/include/__iterator/data.h b/libcxx/include/__iterator/data.h
index 5f2624c2b819e..08bd8c8399b90 100644
--- a/libcxx/include/__iterator/data.h
+++ b/libcxx/include/__iterator/data.h
@@ -17,10 +17,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 17
+_LIBCPP_BEGIN_NAMESPACE_STD
+
template <class _Cont>
constexpr _LIBCPP_HIDE_FROM_ABI auto data(_Cont& __c) noexcept(noexcept(__c.data())) -> decltype(__c.data()) {
return __c.data();
@@ -41,8 +41,8 @@ _LIBCPP_HIDE_FROM_ABI constexpr const _Ep* data(initializer_list<_Ep> __il) noex
return __il.begin();
}
-#endif
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 17
+
#endif // _LIBCPP___ITERATOR_DATA_H
diff --git a/libcxx/include/__iterator/default_sentinel.h b/libcxx/include/__iterator/default_sentinel.h
index 3b65f442f1a85..84fcf71c0767d 100644
--- a/libcxx/include/__iterator/default_sentinel.h
+++ b/libcxx/include/__iterator/default_sentinel.h
@@ -16,15 +16,15 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
struct default_sentinel_t {};
inline constexpr default_sentinel_t default_sentinel{};
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
#endif // _LIBCPP___ITERATOR_DEFAULT_SENTINEL_H
diff --git a/libcxx/include/__iterator/empty.h b/libcxx/include/__iterator/empty.h
index f2c653bcb329b..b763048f547e5 100644
--- a/libcxx/include/__iterator/empty.h
+++ b/libcxx/include/__iterator/empty.h
@@ -17,10 +17,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 17
+_LIBCPP_BEGIN_NAMESPACE_STD
+
template <class _Cont>
[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr auto
empty(const _Cont& __c) noexcept(noexcept(__c.empty())) -> decltype(__c.empty()) {
@@ -37,8 +37,8 @@ template <class _Ep>
return __il.size() == 0;
}
-#endif // _LIBCPP_STD_VER >= 17
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 17
+
#endif // _LIBCPP___ITERATOR_EMPTY_H
diff --git a/libcxx/include/__iterator/incrementable_traits.h b/libcxx/include/__iterator/incrementable_traits.h
index 37c8daddf8a86..e24b74378f4d8 100644
--- a/libcxx/include/__iterator/incrementable_traits.h
+++ b/libcxx/include/__iterator/incrementable_traits.h
@@ -24,10 +24,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
// [incrementable.traits]
template <class>
struct incrementable_traits {};
@@ -72,8 +72,8 @@ using iter_difference_t =
incrementable_traits<remove_cvref_t<_Ip> >,
iterator_traits<remove_cvref_t<_Ip> > >::difference_type;
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
#endif // _LIBCPP___ITERATOR_INCREMENTABLE_TRAITS_H
diff --git a/libcxx/include/__iterator/iter_move.h b/libcxx/include/__iterator/iter_move.h
index a726b6e329e90..53c2f5529b63a 100644
--- a/libcxx/include/__iterator/iter_move.h
+++ b/libcxx/include/__iterator/iter_move.h
@@ -27,10 +27,10 @@
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
// [iterator.cust.move]
namespace ranges {
@@ -95,10 +95,10 @@ template <__dereferenceable _Tp>
}
using iter_rvalue_reference_t = decltype(ranges::iter_move(std::declval<_Tp&>()));
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
_LIBCPP_POP_MACROS
#endif // _LIBCPP___ITERATOR_ITER_MOVE_H
diff --git a/libcxx/include/__iterator/iter_swap.h b/libcxx/include/__iterator/iter_swap.h
index 01ab1b97d6501..f4a5744a7eddb 100644
--- a/libcxx/include/__iterator/iter_swap.h
+++ b/libcxx/include/__iterator/iter_swap.h
@@ -29,10 +29,10 @@
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
// [iter.cust.swap]
namespace ranges {
@@ -99,10 +99,10 @@ concept indirectly_swappable =
ranges::iter_swap(__i2, __i1);
};
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
_LIBCPP_POP_MACROS
#endif // _LIBCPP___ITERATOR_ITER_SWAP_H
diff --git a/libcxx/include/__iterator/move_sentinel.h b/libcxx/include/__iterator/move_sentinel.h
index c77ca5f1a9142..98e6b94e8332d 100644
--- a/libcxx/include/__iterator/move_sentinel.h
+++ b/libcxx/include/__iterator/move_sentinel.h
@@ -22,10 +22,10 @@
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
template <semiregular _Sent>
class move_sentinel {
public:
@@ -52,10 +52,10 @@ class move_sentinel {
_LIBCPP_CTAD_SUPPORTED_FOR_TYPE(move_sentinel);
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
_LIBCPP_POP_MACROS
#endif // _LIBCPP___ITERATOR_MOVE_SENTINEL_H
diff --git a/libcxx/include/__iterator/ranges_iterator_traits.h b/libcxx/include/__iterator/ranges_iterator_traits.h
index 9a31b651eb5da..b92f45f7a8757 100644
--- a/libcxx/include/__iterator/ranges_iterator_traits.h
+++ b/libcxx/include/__iterator/ranges_iterator_traits.h
@@ -19,10 +19,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 23
+_LIBCPP_BEGIN_NAMESPACE_STD
+
template <ranges::input_range _Range>
using __range_key_type _LIBCPP_NODEBUG = __remove_const_t<typename ranges::range_value_t<_Range>::first_type>;
@@ -33,8 +33,8 @@ template <ranges::input_range _Range>
using __range_to_alloc_type _LIBCPP_NODEBUG =
pair<const typename ranges::range_value_t<_Range>::first_type, typename ranges::range_value_t<_Range>::second_type>;
-#endif
-
_LIBCPP_END_NAMESPACE_STD
+#endif
+
#endif // _LIBCPP___ITERATOR_RANGES_ITERATOR_TRAITS_H
diff --git a/libcxx/include/__iterator/readable_traits.h b/libcxx/include/__iterator/readable_traits.h
index 25e74567fff11..78e60e529d05e 100644
--- a/libcxx/include/__iterator/readable_traits.h
+++ b/libcxx/include/__iterator/readable_traits.h
@@ -24,10 +24,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
// [readable.traits]
template <class>
struct __cond_value_type {};
@@ -74,8 +74,8 @@ template <__has_member_value_type _Tp>
same_as<remove_cv_t<typename _Tp::element_type>, remove_cv_t<typename _Tp::value_type>>
struct indirectly_readable_traits<_Tp> : __cond_value_type<typename _Tp::value_type> {};
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
#endif // _LIBCPP___ITERATOR_READABLE_TRAITS_H
diff --git a/libcxx/include/__iterator/reverse_access.h b/libcxx/include/__iterator/reverse_access.h
index f6e60c3fb75b3..ded26282e0faf 100644
--- a/libcxx/include/__iterator/reverse_access.h
+++ b/libcxx/include/__iterator/reverse_access.h
@@ -18,10 +18,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 14
+_LIBCPP_BEGIN_NAMESPACE_STD
+
template <class _Tp, size_t _Np>
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17 reverse_iterator<_Tp*> rbegin(_Tp (&__array)[_Np]) {
return reverse_iterator<_Tp*>(__array + _Np);
@@ -72,8 +72,8 @@ _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17 auto crend(const _Cp& __c) -
return std::rend(__c);
}
-#endif // _LIBCPP_STD_VER >= 14
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 14
+
#endif // _LIBCPP___ITERATOR_REVERSE_ACCESS_H
diff --git a/libcxx/include/__iterator/size.h b/libcxx/include/__iterator/size.h
index 84e2e3b21f1d5..62f19f41835d8 100644
--- a/libcxx/include/__iterator/size.h
+++ b/libcxx/include/__iterator/size.h
@@ -20,10 +20,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 17
+_LIBCPP_BEGIN_NAMESPACE_STD
+
template <class _Cont>
_LIBCPP_HIDE_FROM_ABI constexpr auto size(const _Cont& __c) noexcept(noexcept(__c.size())) -> decltype(__c.size()) {
return __c.size();
@@ -53,8 +53,8 @@ _LIBCPP_HIDE_FROM_ABI constexpr ptrdiff_t ssize(const _Tp (&)[_Sz]) noexcept {
_LIBCPP_DIAGNOSTIC_POP
# endif
-#endif // _LIBCPP_STD_VER >= 17
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 17
+
#endif // _LIBCPP___ITERATOR_SIZE_H
diff --git a/libcxx/include/__math/special_functions.h b/libcxx/include/__math/special_functions.h
index 6b217852e2f8c..64d16aa88d2ee 100644
--- a/libcxx/include/__math/special_functions.h
+++ b/libcxx/include/__math/special_functions.h
@@ -21,10 +21,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 17
+_LIBCPP_BEGIN_NAMESPACE_STD
+
template <class _Real>
_LIBCPP_HIDE_FROM_ABI _Real __hermite(unsigned __n, _Real __x) {
// The Hermite polynomial H_n(x).
@@ -77,8 +77,8 @@ _LIBCPP_HIDE_FROM_ABI double hermite(unsigned __n, _Integer __x) {
return std::hermite(__n, static_cast<double>(__x));
}
-#endif // _LIBCPP_STD_VER >= 17
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 17
+
#endif // _LIBCPP___MATH_SPECIAL_FUNCTIONS_H
diff --git a/libcxx/include/__mdspan/aligned_accessor.h b/libcxx/include/__mdspan/aligned_accessor.h
index 2b8d4c52d8737..934b0d42abe4d 100644
--- a/libcxx/include/__mdspan/aligned_accessor.h
+++ b/libcxx/include/__mdspan/aligned_accessor.h
@@ -33,10 +33,10 @@
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 26
+_LIBCPP_BEGIN_NAMESPACE_STD
+
template <class _ElementType, size_t _ByteAlignment>
struct aligned_accessor {
static_assert(_ByteAlignment != 0 && (_ByteAlignment & (_ByteAlignment - 1)) == 0,
@@ -78,10 +78,10 @@ struct aligned_accessor {
}
};
-#endif // _LIBCPP_STD_VER >= 26
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 26
+
_LIBCPP_POP_MACROS
#endif // _LIBCPP___MDSPAN_ALIGNED_ACCESSOR_H
diff --git a/libcxx/include/__memory/inout_ptr.h b/libcxx/include/__memory/inout_ptr.h
index f0335cf855fc7..f654b44e03f62 100644
--- a/libcxx/include/__memory/inout_ptr.h
+++ b/libcxx/include/__memory/inout_ptr.h
@@ -29,10 +29,10 @@
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 23
+_LIBCPP_BEGIN_NAMESPACE_STD
+
template <class _Smart, class _Pointer, class... _Args>
class inout_ptr_t {
static_assert(!__is_specialization_v<_Smart, shared_ptr>, "std::shared_ptr<> is not supported with std::inout_ptr.");
@@ -100,10 +100,10 @@ template <class _Pointer = void, class _Smart, class... _Args>
return std::inout_ptr_t<_Smart, _Ptr, _Args&&...>(__s, std::forward<_Args>(__args)...);
}
-#endif // _LIBCPP_STD_VER >= 23
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 23
+
_LIBCPP_POP_MACROS
#endif // _LIBCPP___INOUT_PTR_H
diff --git a/libcxx/include/__memory/is_sufficiently_aligned.h b/libcxx/include/__memory/is_sufficiently_aligned.h
index 93d24aaf78f0b..dcc78c9916164 100644
--- a/libcxx/include/__memory/is_sufficiently_aligned.h
+++ b/libcxx/include/__memory/is_sufficiently_aligned.h
@@ -18,17 +18,17 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 26
+_LIBCPP_BEGIN_NAMESPACE_STD
+
template <size_t _Alignment, class _Tp>
[[nodiscard]] _LIBCPP_HIDE_FROM_ABI bool is_sufficiently_aligned(_Tp* __ptr) {
return reinterpret_cast<uintptr_t>(__ptr) % _Alignment == 0;
}
-#endif // _LIBCPP_STD_VER >= 26
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 26
+
#endif // _LIBCPP___MEMORY_IS_SUFFICIENTLY_ALIGNED_H
diff --git a/libcxx/include/__memory/out_ptr.h b/libcxx/include/__memory/out_ptr.h
index 806c863daeea4..12960b76717db 100644
--- a/libcxx/include/__memory/out_ptr.h
+++ b/libcxx/include/__memory/out_ptr.h
@@ -28,10 +28,10 @@
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 23
+_LIBCPP_BEGIN_NAMESPACE_STD
+
template <class _Smart, class _Pointer, class... _Args>
class out_ptr_t {
static_assert(!__is_specialization_v<_Smart, shared_ptr> || sizeof...(_Args) > 0,
@@ -92,10 +92,10 @@ template <class _Pointer = void, class _Smart, class... _Args>
return std::out_ptr_t<_Smart, _Ptr, _Args&&...>(__s, std::forward<_Args>(__args)...);
}
-#endif // _LIBCPP_STD_VER >= 23
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 23
+
_LIBCPP_POP_MACROS
#endif // _LIBCPP___OUT_PTR_H
diff --git a/libcxx/include/__memory/raw_storage_iterator.h b/libcxx/include/__memory/raw_storage_iterator.h
index dff0fed3b7565..a813d4a67835a 100644
--- a/libcxx/include/__memory/raw_storage_iterator.h
+++ b/libcxx/include/__memory/raw_storage_iterator.h
@@ -21,13 +21,13 @@
# pragma GCC system_header
#endif
+#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_RAW_STORAGE_ITERATOR)
+
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
_LIBCPP_BEGIN_NAMESPACE_STD
-#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_RAW_STORAGE_ITERATOR)
-
template <class _OutputIterator, class _Tp>
class _LIBCPP_DEPRECATED_IN_CXX17 raw_storage_iterator
: public __iterator_base<raw_storage_iterator<_OutputIterator, _Tp>, output_iterator_tag, void, void, void, void> {
@@ -71,10 +71,10 @@ class _LIBCPP_DEPRECATED_IN_CXX17 raw_storage_iterator
# endif
};
-#endif // _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_RAW_STORAGE_ITERATOR)
-
_LIBCPP_END_NAMESPACE_STD
_LIBCPP_POP_MACROS
+#endif // _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_RAW_STORAGE_ITERATOR)
+
#endif // _LIBCPP___MEMORY_RAW_STORAGE_ITERATOR_H
diff --git a/libcxx/include/__memory/uses_allocator_construction.h b/libcxx/include/__memory/uses_allocator_construction.h
index 6733f5cf6fc35..e9653f6c4ea5e 100644
--- a/libcxx/include/__memory/uses_allocator_construction.h
+++ b/libcxx/include/__memory/uses_allocator_construction.h
@@ -27,10 +27,10 @@
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 17
+_LIBCPP_BEGIN_NAMESPACE_STD
+
template <class _Tp>
inline constexpr bool __is_cv_std_pair = __is_pair_v<remove_cv_t<_Tp>>;
@@ -202,9 +202,7 @@ __uninitialized_construct_using_allocator(_Type* __ptr, const _Alloc& __alloc, _
__uses_allocator_construction_args<_Type>::__apply(__alloc, std::forward<_Args>(__args)...));
}
-#endif // _LIBCPP_STD_VER >= 17
-
-#if _LIBCPP_STD_VER >= 20
+# if _LIBCPP_STD_VER >= 20
template <class _Type, class _Alloc, class... _Args>
_LIBCPP_HIDE_FROM_ABI constexpr auto uses_allocator_construction_args(const _Alloc& __alloc, _Args&&... __args) noexcept
@@ -225,10 +223,12 @@ uninitialized_construct_using_allocator(_Type* __ptr, const _Alloc& __alloc, _Ar
return /*--*/ std::__uninitialized_construct_using_allocator(__ptr, __alloc, std::forward<_Args>(__args)...);
}
-#endif // _LIBCPP_STD_VER >= 20
+# endif // _LIBCPP_STD_VER >= 20
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 17
+
_LIBCPP_POP_MACROS
#endif // _LIBCPP___MEMORY_USES_ALLOCATOR_CONSTRUCTION_H
diff --git a/libcxx/include/__node_handle b/libcxx/include/__node_handle
index b20b0c73a0518..ce2afa3d52f73 100644
--- a/libcxx/include/__node_handle
+++ b/libcxx/include/__node_handle
@@ -72,10 +72,10 @@ public:
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 17
+_LIBCPP_BEGIN_NAMESPACE_STD
+
// Specialized in __tree & __hash_table for their _NodeType.
template <class _NodeType, class _Alloc>
struct __generic_container_node_destructor;
@@ -201,10 +201,10 @@ struct __insert_return_type {
_NodeType node;
};
-#endif // _LIBCPP_STD_VER >= 17
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 17
+
_LIBCPP_POP_MACROS
#endif // _LIBCPP___NODE_HANDLE
diff --git a/libcxx/include/__numeric/ranges_iota.h b/libcxx/include/__numeric/ranges_iota.h
index bf53dd85fecef..c67e6e92826af 100644
--- a/libcxx/include/__numeric/ranges_iota.h
+++ b/libcxx/include/__numeric/ranges_iota.h
@@ -26,9 +26,10 @@
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
+#if _LIBCPP_STD_VER >= 23
+
_LIBCPP_BEGIN_NAMESPACE_STD
-#if _LIBCPP_STD_VER >= 23
namespace ranges {
template <typename _Out, typename _Tp>
using iota_result = ranges::out_value_result<_Out, _Tp>;
@@ -56,10 +57,10 @@ struct __iota_fn {
inline constexpr auto iota = __iota_fn{};
} // namespace ranges
-#endif // _LIBCPP_STD_VER >= 23
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 23
+
_LIBCPP_POP_MACROS
#endif // _LIBCPP___NUMERIC_RANGES_IOTA_H
diff --git a/libcxx/include/__random/uniform_random_bit_generator.h b/libcxx/include/__random/uniform_random_bit_generator.h
index 75ffc27f9fcd8..738a293f1e7e5 100644
--- a/libcxx/include/__random/uniform_random_bit_generator.h
+++ b/libcxx/include/__random/uniform_random_bit_generator.h
@@ -23,10 +23,10 @@
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
// [rand.req.urng]
template <class _Gen>
concept uniform_random_bit_generator = invocable<_Gen&> && unsigned_integral<invoke_result_t<_Gen&>> && requires {
@@ -35,10 +35,10 @@ concept uniform_random_bit_generator = invocable<_Gen&> && unsigned_integral<inv
requires bool_constant<(_Gen::min() < _Gen::max())>::value;
};
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
_LIBCPP_POP_MACROS
#endif // _LIBCPP___RANDOM_UNIFORM_RANDOM_BIT_GENERATOR_H
diff --git a/libcxx/include/__ranges/access.h b/libcxx/include/__ranges/access.h
index bbacef3eae6be..28555ef6ba0d9 100644
--- a/libcxx/include/__ranges/access.h
+++ b/libcxx/include/__ranges/access.h
@@ -27,10 +27,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
namespace ranges {
template <class _Tp>
concept __can_borrow = is_lvalue_reference_v<_Tp> || enable_borrowed_range<remove_cvref_t<_Tp>>;
@@ -203,8 +203,8 @@ inline constexpr auto cend = __cend::__fn{};
} // namespace __cpo
} // namespace ranges
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
#endif // _LIBCPP___RANGES_ACCESS_H
diff --git a/libcxx/include/__ranges/all.h b/libcxx/include/__ranges/all.h
index 023cee6caa9a2..5ee9901cb1584 100644
--- a/libcxx/include/__ranges/all.h
+++ b/libcxx/include/__ranges/all.h
@@ -29,10 +29,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
namespace ranges::views {
namespace __all {
@@ -71,8 +71,8 @@ using all_t = decltype(views::all(std::declval<_Range>()));
} // namespace ranges::views
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
#endif // _LIBCPP___RANGES_ALL_H
diff --git a/libcxx/include/__ranges/concepts.h b/libcxx/include/__ranges/concepts.h
index bf75fe8a6fef4..e1c855860c50a 100644
--- a/libcxx/include/__ranges/concepts.h
+++ b/libcxx/include/__ranges/concepts.h
@@ -39,10 +39,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
namespace ranges {
// [range.range]
@@ -175,8 +175,8 @@ concept __concatable = requires {
} // namespace ranges
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
#endif // _LIBCPP___RANGES_CONCEPTS_H
diff --git a/libcxx/include/__ranges/container_compatible_range.h b/libcxx/include/__ranges/container_compatible_range.h
index a58f1119885e3..ecf46f49232aa 100644
--- a/libcxx/include/__ranges/container_compatible_range.h
+++ b/libcxx/include/__ranges/container_compatible_range.h
@@ -18,16 +18,16 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 23
+_LIBCPP_BEGIN_NAMESPACE_STD
+
template <class _Range, class _Tp>
concept _ContainerCompatibleRange =
ranges::input_range<_Range> && convertible_to<ranges::range_reference_t<_Range>, _Tp>;
-#endif // _LIBCPP_STD_VER >= 23
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 23
+
#endif // _LIBCPP___RANGES_CONTAINER_COMPATIBLE_RANGE_H
diff --git a/libcxx/include/__ranges/dangling.h b/libcxx/include/__ranges/dangling.h
index 613084d5fb9fc..fdd41351add45 100644
--- a/libcxx/include/__ranges/dangling.h
+++ b/libcxx/include/__ranges/dangling.h
@@ -19,10 +19,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
namespace ranges {
struct dangling {
dangling() = default;
@@ -35,8 +35,8 @@ using borrowed_iterator_t = _If<borrowed_range<_Rp>, iterator_t<_Rp>, dangling>;
// borrowed_subrange_t defined in <__ranges/subrange.h>
} // namespace ranges
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
#endif // _LIBCPP___RANGES_DANGLING_H
diff --git a/libcxx/include/__ranges/data.h b/libcxx/include/__ranges/data.h
index cb3b826fceb23..354a0aa15903e 100644
--- a/libcxx/include/__ranges/data.h
+++ b/libcxx/include/__ranges/data.h
@@ -28,10 +28,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
// [range.prim.data]
namespace ranges {
@@ -95,8 +95,8 @@ inline constexpr auto cdata = __cdata::__fn{};
} // namespace __cpo
} // namespace ranges
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
#endif // _LIBCPP___RANGES_DATA_H
diff --git a/libcxx/include/__ranges/elements_of.h b/libcxx/include/__ranges/elements_of.h
index 3f89f49d182ae..de6aa786e6b1d 100644
--- a/libcxx/include/__ranges/elements_of.h
+++ b/libcxx/include/__ranges/elements_of.h
@@ -23,10 +23,10 @@
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 23
+_LIBCPP_BEGIN_NAMESPACE_STD
+
namespace ranges {
template <range _Range, class _Allocator = allocator<byte>>
@@ -40,10 +40,10 @@ elements_of(_Range&&, _Allocator = _Allocator()) -> elements_of<_Range&&, _Alloc
} // namespace ranges
-#endif // _LIBCPP_STD_VER >= 23
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 23
+
_LIBCPP_POP_MACROS
#endif // _LIBCPP___RANGES_ELEMENTS_OF_H
diff --git a/libcxx/include/__ranges/empty.h b/libcxx/include/__ranges/empty.h
index 5c1004042aba5..f2f12329d224c 100644
--- a/libcxx/include/__ranges/empty.h
+++ b/libcxx/include/__ranges/empty.h
@@ -20,10 +20,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
// [range.prim.empty]
namespace ranges {
@@ -64,8 +64,8 @@ inline constexpr auto empty = __empty::__fn{};
} // namespace __cpo
} // namespace ranges
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
#endif // _LIBCPP___RANGES_EMPTY_H
diff --git a/libcxx/include/__ranges/enable_borrowed_range.h b/libcxx/include/__ranges/enable_borrowed_range.h
index 1d068335e20af..70eb4e87c8a6a 100644
--- a/libcxx/include/__ranges/enable_borrowed_range.h
+++ b/libcxx/include/__ranges/enable_borrowed_range.h
@@ -20,10 +20,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
namespace ranges {
// [range.range], ranges
@@ -33,8 +33,8 @@ inline constexpr bool enable_borrowed_range = false;
} // namespace ranges
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
#endif // _LIBCPP___RANGES_ENABLE_BORROWED_RANGE_H
diff --git a/libcxx/include/__ranges/enable_view.h b/libcxx/include/__ranges/enable_view.h
index 6dee6ea3fa3d2..2c58cb6293d2b 100644
--- a/libcxx/include/__ranges/enable_view.h
+++ b/libcxx/include/__ranges/enable_view.h
@@ -20,10 +20,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
namespace ranges {
struct view_base {};
@@ -43,8 +43,8 @@ inline constexpr bool enable_view = derived_from<_Tp, view_base> || requires {
} // namespace ranges
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
#endif // _LIBCPP___RANGES_ENABLE_VIEW_H
diff --git a/libcxx/include/__ranges/from_range.h b/libcxx/include/__ranges/from_range.h
index a6cb9e3d439eb..c02bddc3d9f9e 100644
--- a/libcxx/include/__ranges/from_range.h
+++ b/libcxx/include/__ranges/from_range.h
@@ -16,18 +16,18 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 23
+_LIBCPP_BEGIN_NAMESPACE_STD
+
struct from_range_t {
explicit from_range_t() = default;
};
inline constexpr from_range_t from_range{};
-#endif // _LIBCPP_STD_VER >= 23
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 23
+
#endif // _LIBCPP___RANGES_FROM_RANGE_H
diff --git a/libcxx/include/__ranges/owning_view.h b/libcxx/include/__ranges/owning_view.h
index 1ab81afee774a..cb6ea660551ae 100644
--- a/libcxx/include/__ranges/owning_view.h
+++ b/libcxx/include/__ranges/owning_view.h
@@ -30,10 +30,10 @@
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
namespace ranges {
template <range _Rp>
requires movable<_Rp> && (!__is_std_initializer_list<remove_cvref_t<_Rp>>)
@@ -107,10 +107,10 @@ inline constexpr bool enable_borrowed_range<owning_view<_Tp>> = enable_borrowed_
} // namespace ranges
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
_LIBCPP_POP_MACROS
#endif // _LIBCPP___RANGES_OWNING_VIEW_H
diff --git a/libcxx/include/__ranges/range_adaptor.h b/libcxx/include/__ranges/range_adaptor.h
index 4bcb53e1a5846..6aac4f15f7506 100644
--- a/libcxx/include/__ranges/range_adaptor.h
+++ b/libcxx/include/__ranges/range_adaptor.h
@@ -34,10 +34,10 @@
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
namespace ranges {
// CRTP base that one can derive from in order to be considered a range adaptor closure
@@ -90,10 +90,10 @@ class _LIBCPP_NO_SPECIALIZATIONS range_adaptor_closure : public __range_adaptor_
} // namespace ranges
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
_LIBCPP_POP_MACROS
#endif // _LIBCPP___RANGES_RANGE_ADAPTOR_H
diff --git a/libcxx/include/__ranges/ref_view.h b/libcxx/include/__ranges/ref_view.h
index 109a10cec299e..ea7e9cb3b6da9 100644
--- a/libcxx/include/__ranges/ref_view.h
+++ b/libcxx/include/__ranges/ref_view.h
@@ -32,10 +32,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
namespace ranges {
template <range _Range>
requires is_object_v<_Range>
@@ -82,8 +82,8 @@ template <class _Tp>
inline constexpr bool enable_borrowed_range<ref_view<_Tp>> = true;
} // namespace ranges
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
#endif // _LIBCPP___RANGES_REF_VIEW_H
diff --git a/libcxx/include/__ranges/repeat_view.h b/libcxx/include/__ranges/repeat_view.h
index 9192183f48013..ae13af8761b89 100644
--- a/libcxx/include/__ranges/repeat_view.h
+++ b/libcxx/include/__ranges/repeat_view.h
@@ -40,10 +40,10 @@
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 23
+_LIBCPP_BEGIN_NAMESPACE_STD
+
namespace ranges {
template <class _Tp>
@@ -265,10 +265,10 @@ inline constexpr bool __is_repeat_specialization<repeat_view<_Tp, _Bound>> = tru
} // namespace ranges
-#endif // _LIBCPP_STD_VER >= 23
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 23
+
_LIBCPP_POP_MACROS
#endif // _LIBCPP___RANGES_REPEAT_VIEW_H
diff --git a/libcxx/include/__ranges/size.h b/libcxx/include/__ranges/size.h
index 5da3a6ff268e8..2697560ccbfa5 100644
--- a/libcxx/include/__ranges/size.h
+++ b/libcxx/include/__ranges/size.h
@@ -29,10 +29,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
namespace ranges {
template <class>
inline constexpr bool disable_sized_range = false;
@@ -131,8 +131,8 @@ inline constexpr auto ssize = __ssize::__fn{};
} // namespace __cpo
} // namespace ranges
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
#endif // _LIBCPP___RANGES_SIZE_H
diff --git a/libcxx/include/__ranges/subrange.h b/libcxx/include/__ranges/subrange.h
index 3d94b0a72b963..41ab267417e90 100644
--- a/libcxx/include/__ranges/subrange.h
+++ b/libcxx/include/__ranges/subrange.h
@@ -49,10 +49,10 @@
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
namespace ranges {
template <class _From, class _To>
concept __uses_nonqualification_pointer_conversion =
@@ -266,10 +266,10 @@ struct tuple_element<1, const ranges::subrange<_Ip, _Sp, _Kp>> {
using type _LIBCPP_NODEBUG = _Sp;
};
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
_LIBCPP_POP_MACROS
#endif // _LIBCPP___RANGES_SUBRANGE_H
diff --git a/libcxx/include/__ranges/view_interface.h b/libcxx/include/__ranges/view_interface.h
index 37b2c9e2c1a75..96508c2be7277 100644
--- a/libcxx/include/__ranges/view_interface.h
+++ b/libcxx/include/__ranges/view_interface.h
@@ -30,10 +30,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
namespace ranges {
template <class _Derived>
@@ -163,8 +163,8 @@ class view_interface {
} // namespace ranges
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
#endif // _LIBCPP___RANGES_VIEW_INTERFACE_H
diff --git a/libcxx/include/__ranges/views.h b/libcxx/include/__ranges/views.h
index a4de2a5e52a9d..8a931d3ae351a 100644
--- a/libcxx/include/__ranges/views.h
+++ b/libcxx/include/__ranges/views.h
@@ -22,7 +22,7 @@ _LIBCPP_BEGIN_NAMESPACE_STD
namespace ranges {
-namespace views {}
+namespace views {} // NOLINT(libcpp-avoid-empty-namespaces) // This is needed to declare the alias below.
} // namespace ranges
diff --git a/libcxx/include/__stop_token/atomic_unique_lock.h b/libcxx/include/__stop_token/atomic_unique_lock.h
index 4b0ae05ca86c8..b6662da00400a 100644
--- a/libcxx/include/__stop_token/atomic_unique_lock.h
+++ b/libcxx/include/__stop_token/atomic_unique_lock.h
@@ -18,10 +18,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
// This class implements an RAII unique_lock without a mutex.
// It uses std::atomic<State>,
// where State contains a lock bit and might contain other data,
@@ -133,8 +133,8 @@ class __atomic_unique_lock {
_LIBCPP_HIDE_FROM_ABI static constexpr auto __set_locked_bit = [](_State __state) { return __state | _LockedBit; };
};
-#endif // _LIBCPP_STD_VER >= 20 && _LIBCPP_HAS_THREADS
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
#endif // _LIBCPP___STOP_TOKEN_ATOMIC_UNIQUE_LOCK_H
diff --git a/libcxx/include/__stop_token/intrusive_list_view.h b/libcxx/include/__stop_token/intrusive_list_view.h
index 11a3e267e7c6d..0198b1756a525 100644
--- a/libcxx/include/__stop_token/intrusive_list_view.h
+++ b/libcxx/include/__stop_token/intrusive_list_view.h
@@ -17,10 +17,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
template <class _Derived>
struct __intrusive_node_base {
_Derived* __next_ = nullptr;
@@ -78,8 +78,8 @@ struct __intrusive_list_view {
_Node* __head_ = nullptr;
};
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
#endif // _LIBCPP___STOP_TOKEN_INTRUSIVE_LIST_VIEW_H
diff --git a/libcxx/include/__stop_token/intrusive_shared_ptr.h b/libcxx/include/__stop_token/intrusive_shared_ptr.h
index 0d5ffe0647166..6fada9bb84352 100644
--- a/libcxx/include/__stop_token/intrusive_shared_ptr.h
+++ b/libcxx/include/__stop_token/intrusive_shared_ptr.h
@@ -26,10 +26,10 @@
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
// For intrusive_shared_ptr to work with a type T, specialize __intrusive_shared_ptr_traits<T> and implement
// the following function:
//
@@ -126,10 +126,10 @@ struct __intrusive_shared_ptr {
}
};
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
_LIBCPP_POP_MACROS
#endif // _LIBCPP___STOP_TOKEN_INTRUSIVE_SHARED_PTR_H
diff --git a/libcxx/include/__stop_token/stop_callback.h b/libcxx/include/__stop_token/stop_callback.h
index 76d438e096c03..f9d486b34746c 100644
--- a/libcxx/include/__stop_token/stop_callback.h
+++ b/libcxx/include/__stop_token/stop_callback.h
@@ -29,10 +29,10 @@
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20 && _LIBCPP_HAS_THREADS
+_LIBCPP_BEGIN_NAMESPACE_STD
+
template <class _Callback>
class stop_callback : private __stop_callback_base {
static_assert(invocable<_Callback>,
@@ -93,10 +93,10 @@ class stop_callback : private __stop_callback_base {
template <class _Callback>
stop_callback(stop_token, _Callback) -> stop_callback<_Callback>;
-#endif // _LIBCPP_STD_VER >= 20 && _LIBCPP_HAS_THREADS
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20 && _LIBCPP_HAS_THREADS
+
_LIBCPP_POP_MACROS
#endif // _LIBCPP___STOP_TOKEN_STOP_CALLBACK_H
diff --git a/libcxx/include/__stop_token/stop_state.h b/libcxx/include/__stop_token/stop_state.h
index 74fafbdc637af..19e76df34cd03 100644
--- a/libcxx/include/__stop_token/stop_state.h
+++ b/libcxx/include/__stop_token/stop_state.h
@@ -22,10 +22,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20 && _LIBCPP_HAS_THREADS
+_LIBCPP_BEGIN_NAMESPACE_STD
+
struct __stop_callback_base : __intrusive_node_base<__stop_callback_base> {
using __callback_fn_t _LIBCPP_NODEBUG = void(__stop_callback_base*) noexcept;
_LIBCPP_HIDE_FROM_ABI explicit __stop_callback_base(__callback_fn_t* __callback_fn) : __callback_fn_(__callback_fn) {}
@@ -229,8 +229,8 @@ struct __intrusive_shared_ptr_traits<__stop_state> {
}
};
-#endif // _LIBCPP_STD_VER >= 20 && _LIBCPP_HAS_THREADS
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20 && _LIBCPP_HAS_THREADS
+
#endif // _LIBCPP___STOP_TOKEN_STOP_STATE_H
diff --git a/libcxx/include/__stop_token/stop_token.h b/libcxx/include/__stop_token/stop_token.h
index 4a6ca27ac44d9..c6658f86879d5 100644
--- a/libcxx/include/__stop_token/stop_token.h
+++ b/libcxx/include/__stop_token/stop_token.h
@@ -18,10 +18,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20 && _LIBCPP_HAS_THREADS
+_LIBCPP_BEGIN_NAMESPACE_STD
+
class stop_token {
public:
_LIBCPP_HIDE_FROM_ABI stop_token() noexcept = default;
@@ -56,8 +56,8 @@ class stop_token {
_LIBCPP_HIDE_FROM_ABI explicit stop_token(const __intrusive_shared_ptr<__stop_state>& __state) : __state_(__state) {}
};
-#endif // _LIBCPP_STD_VER >= 20 && _LIBCPP_HAS_THREADS
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20 && _LIBCPP_HAS_THREADS
+
#endif // _LIBCPP___STOP_TOKEN_STOP_TOKEN_H
diff --git a/libcxx/include/__tuple/sfinae_helpers.h b/libcxx/include/__tuple/sfinae_helpers.h
index f81048f4062bd..78b00964a289b 100644
--- a/libcxx/include/__tuple/sfinae_helpers.h
+++ b/libcxx/include/__tuple/sfinae_helpers.h
@@ -15,10 +15,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#ifndef _LIBCPP_CXX03_LANG
+_LIBCPP_BEGIN_NAMESPACE_STD
+
struct __check_tuple_constructor_fail {
static _LIBCPP_HIDE_FROM_ABI constexpr bool __enable_explicit_default() { return false; }
static _LIBCPP_HIDE_FROM_ABI constexpr bool __enable_implicit_default() { return false; }
@@ -35,9 +35,8 @@ struct __check_tuple_constructor_fail {
return false;
}
};
-#endif // !defined(_LIBCPP_CXX03_LANG)
-#if _LIBCPP_STD_VER >= 17
+# if _LIBCPP_STD_VER >= 17
template <bool _CanCopy, bool _CanMove>
struct __sfinae_ctor_base {};
@@ -92,8 +91,10 @@ struct __sfinae_assign_base<false, true> {
__sfinae_assign_base& operator=(__sfinae_assign_base const&) = delete;
__sfinae_assign_base& operator=(__sfinae_assign_base&&) = default;
};
-#endif // _LIBCPP_STD_VER >= 17
+# endif // _LIBCPP_STD_VER >= 17
_LIBCPP_END_NAMESPACE_STD
+#endif // !defined(_LIBCPP_CXX03_LANG)
+
#endif // _LIBCPP___TUPLE_SFINAE_HELPERS_H
diff --git a/libcxx/include/__tuple/tuple_like.h b/libcxx/include/__tuple/tuple_like.h
index c080a3dcf1e25..403f7d13eee54 100644
--- a/libcxx/include/__tuple/tuple_like.h
+++ b/libcxx/include/__tuple/tuple_like.h
@@ -19,10 +19,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
template <class _Tp>
inline constexpr bool __is_ranges_subrange_v = false;
@@ -35,8 +35,8 @@ concept __tuple_like = __tuple_like_no_subrange<_Tp> || __is_ranges_subrange_v<r
// As of writing this comment every use of `pair-like` in the standard excludes `ranges::subrange`, so
// you most likely want to use `__pair_like_no_subrange` if you're looking for `pair-like`.
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
#endif // _LIBCPP___TUPLE_TUPLE_LIKE_H
diff --git a/libcxx/include/__tuple/tuple_like_no_subrange.h b/libcxx/include/__tuple/tuple_like_no_subrange.h
index 30018d6a05ae2..8122b2e6b79fd 100644
--- a/libcxx/include/__tuple/tuple_like_no_subrange.h
+++ b/libcxx/include/__tuple/tuple_like_no_subrange.h
@@ -22,10 +22,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
template <class _Tp>
inline constexpr bool __tuple_like_no_subrange_impl = false;
@@ -54,8 +54,8 @@ concept __tuple_like_no_subrange = __tuple_like_no_subrange_impl<remove_cvref_t<
template <class _Tp>
concept __pair_like_no_subrange = __tuple_like_no_subrange<_Tp> && tuple_size<remove_cvref_t<_Tp>>::value == 2;
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
#endif // _LIBCPP___TUPLE_TUPLE_LIKE_NO_SUBRANGE_H
diff --git a/libcxx/include/__type_traits/common_reference.h b/libcxx/include/__type_traits/common_reference.h
index 59badb64267de..793ba06ea4cba 100644
--- a/libcxx/include/__type_traits/common_reference.h
+++ b/libcxx/include/__type_traits/common_reference.h
@@ -24,10 +24,12 @@
# pragma GCC system_header
#endif
+#if _LIBCPP_STD_VER >= 20
+
_LIBCPP_BEGIN_NAMESPACE_STD
// common_reference
-#if _LIBCPP_STD_VER >= 20
+
// Let COND_RES(X, Y) be:
template <class _Xp, class _Yp>
using __cond_res _LIBCPP_NODEBUG = decltype(false ? std::declval<_Xp (&)()>()() : std::declval<_Yp (&)()>()());
@@ -195,8 +197,8 @@ _LIBCPP_DIAGNOSTIC_POP
template <class...>
struct _LIBCPP_NO_SPECIALIZATIONS common_reference {};
-#endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 20
+
#endif // _LIBCPP___TYPE_TRAITS_COMMON_REFERENCE_H
diff --git a/libcxx/include/__type_traits/has_unique_object_representation.h b/libcxx/include/__type_traits/has_unique_object_representation.h
index af9abfe81d41f..9b0c3fd3cb733 100644
--- a/libcxx/include/__type_traits/has_unique_object_representation.h
+++ b/libcxx/include/__type_traits/has_unique_object_representation.h
@@ -16,10 +16,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 17
+_LIBCPP_BEGIN_NAMESPACE_STD
+
template <class _Tp>
struct _LIBCPP_NO_SPECIALIZATIONS has_unique_object_representations
: integral_constant<bool, __has_unique_object_representations(_Tp)> {};
@@ -28,8 +28,8 @@ template <class _Tp>
_LIBCPP_NO_SPECIALIZATIONS inline constexpr bool has_unique_object_representations_v =
__has_unique_object_representations(_Tp);
-#endif
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 17
+
#endif // _LIBCPP___TYPE_TRAITS_HAS_UNIQUE_OBJECT_REPRESENTATION_H
diff --git a/libcxx/include/__type_traits/is_implicitly_default_constructible.h b/libcxx/include/__type_traits/is_implicitly_default_constructible.h
index d5dadd7b870dd..80a3d86e19861 100644
--- a/libcxx/include/__type_traits/is_implicitly_default_constructible.h
+++ b/libcxx/include/__type_traits/is_implicitly_default_constructible.h
@@ -17,9 +17,10 @@
# pragma GCC system_header
#endif
+#ifndef _LIBCPP_CXX03_LANG
+
_LIBCPP_BEGIN_NAMESPACE_STD
-#ifndef _LIBCPP_CXX03_LANG
// First of all, we can't implement this check in C++03 mode because the {}
// default initialization syntax isn't valid.
// Second, we implement the trait in a funny manner with two defaulted template
@@ -39,8 +40,9 @@ template <class _Tp>
struct __is_implicitly_default_constructible<_Tp,
decltype(std::__test_implicit_default_constructible<_Tp const&>({})),
false_type> : false_type {};
-#endif // !C++03
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_CXX03_LANG
+
#endif // _LIBCPP___TYPE_TRAITS_IS_IMPLICITLY_DEFAULT_CONSTRUCTIBLE_H
diff --git a/libcxx/include/__type_traits/is_literal_type.h b/libcxx/include/__type_traits/is_literal_type.h
index 2e0df3ad1be38..327150bc0a306 100644
--- a/libcxx/include/__type_traits/is_literal_type.h
+++ b/libcxx/include/__type_traits/is_literal_type.h
@@ -16,9 +16,10 @@
# pragma GCC system_header
#endif
+#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_TYPE_TRAITS)
+
_LIBCPP_BEGIN_NAMESPACE_STD
-#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_TYPE_TRAITS)
template <class _Tp>
struct _LIBCPP_DEPRECATED_IN_CXX17 _LIBCPP_NO_SPECIALIZATIONS is_literal_type
: integral_constant<bool, __is_literal_type(_Tp)> {};
@@ -27,8 +28,9 @@ struct _LIBCPP_DEPRECATED_IN_CXX17 _LIBCPP_NO_SPECIALIZATIONS is_literal_type
template <class _Tp>
_LIBCPP_DEPRECATED_IN_CXX17 _LIBCPP_NO_SPECIALIZATIONS inline constexpr bool is_literal_type_v = __is_literal_type(_Tp);
# endif // _LIBCPP_STD_VER >= 17
-#endif // _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_TYPE_TRAITS)
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_TYPE_TRAITS)
+
#endif // _LIBCPP___TYPE_TRAITS_IS_LITERAL_TYPE
diff --git a/libcxx/include/__type_traits/result_of.h b/libcxx/include/__type_traits/result_of.h
index 1714cf4dd96ae..644e9bbdb2783 100644
--- a/libcxx/include/__type_traits/result_of.h
+++ b/libcxx/include/__type_traits/result_of.h
@@ -16,11 +16,12 @@
# pragma GCC system_header
#endif
+#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_TYPE_TRAITS)
+
_LIBCPP_BEGIN_NAMESPACE_STD
// result_of
-#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_TYPE_TRAITS)
template <class _Callable>
struct _LIBCPP_DEPRECATED_IN_CXX17 _LIBCPP_NO_SPECIALIZATIONS result_of;
@@ -36,8 +37,9 @@ _LIBCPP_DIAGNOSTIC_POP
template <class _Tp>
using result_of_t _LIBCPP_DEPRECATED_IN_CXX17 = typename result_of<_Tp>::type;
# endif // _LIBCPP_STD_VER >= 14
-#endif // _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_TYPE_TRAITS)
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_TYPE_TRAITS)
+
#endif // _LIBCPP___TYPE_TRAITS_RESULT_OF_H
diff --git a/libcxx/include/__utility/exchange.h b/libcxx/include/__utility/exchange.h
index 957e9d0acaa65..d3eec07d828cd 100644
--- a/libcxx/include/__utility/exchange.h
+++ b/libcxx/include/__utility/exchange.h
@@ -22,9 +22,10 @@
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
+#if _LIBCPP_STD_VER >= 14
+
_LIBCPP_BEGIN_NAMESPACE_STD
-#if _LIBCPP_STD_VER >= 14
template <class _T1, class _T2 = _T1>
inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _T1 exchange(_T1& __obj, _T2&& __new_value) noexcept(
is_nothrow_move_constructible<_T1>::value && is_nothrow_assignable<_T1&, _T2>::value) {
@@ -32,10 +33,11 @@ inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _T1 exchange(_T1& __o
__obj = std::forward<_T2>(__new_value);
return __old_value;
}
-#endif // _LIBCPP_STD_VER >= 14
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 14
+
_LIBCPP_POP_MACROS
#endif // _LIBCPP___UTILITY_EXCHANGE_H
diff --git a/libcxx/include/__utility/forward_like.h b/libcxx/include/__utility/forward_like.h
index 409f716cfbced..42603f9773635 100644
--- a/libcxx/include/__utility/forward_like.h
+++ b/libcxx/include/__utility/forward_like.h
@@ -21,10 +21,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 23
+_LIBCPP_BEGIN_NAMESPACE_STD
+
template <class _Ap, class _Bp>
using _CopyConst _LIBCPP_NODEBUG = _If<is_const_v<_Ap>, const _Bp, _Bp>;
@@ -56,8 +56,8 @@ __forward_as(_LIBCPP_LIFETIMEBOUND _Up&& __val) noexcept {
return static_cast<_ForwardLike<_Tp, _As>>(__val);
}
-#endif // _LIBCPP_STD_VER >= 23
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 23
+
#endif // _LIBCPP___UTILITY_FORWARD_LIKE_H
diff --git a/libcxx/include/__utility/in_place.h b/libcxx/include/__utility/in_place.h
index c5bfa947058fb..7c2ed0f9e2cd0 100644
--- a/libcxx/include/__utility/in_place.h
+++ b/libcxx/include/__utility/in_place.h
@@ -18,10 +18,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 17
+_LIBCPP_BEGIN_NAMESPACE_STD
+
struct in_place_t {
explicit in_place_t() = default;
};
@@ -57,8 +57,8 @@ struct __is_inplace_index_imp<in_place_index_t<_Idx>> : true_type {};
template <class _Tp>
using __is_inplace_index _LIBCPP_NODEBUG = __is_inplace_index_imp<__remove_cvref_t<_Tp>>;
-#endif // _LIBCPP_STD_VER >= 17
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 17
+
#endif // _LIBCPP___UTILITY_IN_PLACE_H
diff --git a/libcxx/include/__variant/monostate.h b/libcxx/include/__variant/monostate.h
index 3939e42a94772..a11a51ecc0873 100644
--- a/libcxx/include/__variant/monostate.h
+++ b/libcxx/include/__variant/monostate.h
@@ -19,10 +19,10 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if _LIBCPP_STD_VER >= 17
+_LIBCPP_BEGIN_NAMESPACE_STD
+
struct monostate {};
_LIBCPP_HIDE_FROM_ABI inline constexpr bool operator==(monostate, monostate) noexcept { return true; }
@@ -59,8 +59,8 @@ struct hash<monostate> {
}
};
-#endif // _LIBCPP_STD_VER >= 17
-
_LIBCPP_END_NAMESPACE_STD
+#endif // _LIBCPP_STD_VER >= 17
+
#endif // _LIBCPP___VARIANT_MONOSTATE_H
diff --git a/libcxx/include/__verbose_trap b/libcxx/include/__verbose_trap
index 13ea727738c3b..be707d1f328f8 100644
--- a/libcxx/include/__verbose_trap
+++ b/libcxx/include/__verbose_trap
@@ -16,8 +16,6 @@
# pragma GCC system_header
#endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
#if __has_builtin(__builtin_verbose_trap)
// AppleClang shipped a slightly different version of __builtin_verbose_trap from the upstream
// version before upstream Clang actually got the builtin.
@@ -31,6 +29,4 @@ _LIBCPP_BEGIN_NAMESPACE_STD
# define _LIBCPP_VERBOSE_TRAP(message) ((void)message, __builtin_trap())
#endif
-_LIBCPP_END_NAMESPACE_STD
-
#endif // _LIBCPP___VERBOSE_TRAP
diff --git a/libcxx/include/any b/libcxx/include/any
index d9368df75296e..9eaeb85745bc7 100644
--- a/libcxx/include/any
+++ b/libcxx/include/any
@@ -126,10 +126,10 @@ public:
};
_LIBCPP_END_UNVERSIONED_NAMESPACE_STD
-_LIBCPP_BEGIN_NAMESPACE_STD
-
# if _LIBCPP_STD_VER >= 17
+_LIBCPP_BEGIN_NAMESPACE_STD
+
[[noreturn]] inline _LIBCPP_HIDE_FROM_ABI void __throw_bad_any_cast() {
# if _LIBCPP_HAS_EXCEPTIONS
throw bad_any_cast();
@@ -550,10 +550,10 @@ template <class _ValueType>
return nullptr;
}
-# endif // _LIBCPP_STD_VER >= 17
-
_LIBCPP_END_NAMESPACE_STD
+# endif // _LIBCPP_STD_VER >= 17
+
_LIBCPP_POP_MACROS
# if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 17
diff --git a/libcxx/include/charconv b/libcxx/include/charconv
index 4c2061b5fcb99..ef8472f6b5b1f 100644
--- a/libcxx/include/charconv
+++ b/libcxx/include/charconv
@@ -100,10 +100,6 @@ namespace std {
# pragma GCC system_header
# endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-_LIBCPP_END_NAMESPACE_STD
-
# if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
# include <cmath>
# include <concepts>
diff --git a/libcxx/include/cuchar b/libcxx/include/cuchar
index 38505eb336f84..591f332c70dab 100644
--- a/libcxx/include/cuchar
+++ b/libcxx/include/cuchar
@@ -56,10 +56,10 @@ size_t c32rtomb(char* s, char32_t c32, mbstate_t* ps);
# pragma GCC system_header
# endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
# if !defined(_LIBCPP_CXX03_LANG)
+_LIBCPP_BEGIN_NAMESPACE_STD
+
using ::mbstate_t _LIBCPP_USING_IF_EXISTS;
# if _LIBCPP_HAS_C8RTOMB_MBRTOC8
@@ -71,10 +71,10 @@ using ::c16rtomb _LIBCPP_USING_IF_EXISTS;
using ::mbrtoc32 _LIBCPP_USING_IF_EXISTS;
using ::c32rtomb _LIBCPP_USING_IF_EXISTS;
-# endif // _LIBCPP_CXX03_LANG
-
_LIBCPP_END_NAMESPACE_STD
+# endif // _LIBCPP_CXX03_LANG
+
#endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
#endif // _LIBCPP_CUCHAR
diff --git a/libcxx/include/experimental/memory b/libcxx/include/experimental/memory
index ffbd8f3a065a6..a6f1a6ccd1ef7 100644
--- a/libcxx/include/experimental/memory
+++ b/libcxx/include/experimental/memory
@@ -70,10 +70,10 @@ public:
# ifdef _LIBCPP_ENABLE_EXPERIMENTAL
-_LIBCPP_BEGIN_NAMESPACE_LFTS_V2
-
# if _LIBCPP_STD_VER >= 17
+_LIBCPP_BEGIN_NAMESPACE_LFTS_V2
+
template <class _Wp>
class observer_ptr {
public:
@@ -175,25 +175,23 @@ _LIBCPP_HIDE_FROM_ABI bool operator>=(observer_ptr<_W1> __a, observer_ptr<_W2> _
return !(__a < __b);
}
-# endif // _LIBCPP_STD_VER >= 17
-
_LIBCPP_END_NAMESPACE_LFTS_V2
_LIBCPP_BEGIN_NAMESPACE_STD
// hash
-# if _LIBCPP_STD_VER >= 17
template <class _Tp>
struct hash<experimental::observer_ptr<_Tp>> {
_LIBCPP_HIDE_FROM_ABI size_t operator()(const experimental::observer_ptr<_Tp>& __ptr) const noexcept {
return hash<_Tp*>()(__ptr.get());
}
};
-# endif // _LIBCPP_STD_VER >= 17
_LIBCPP_END_NAMESPACE_STD
+# endif // _LIBCPP_STD_VER >= 17
+
# endif // _LIBCPP_ENABLE_EXPERIMENTAL
# if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
diff --git a/libcxx/include/initializer_list b/libcxx/include/initializer_list
index 44cd45668388b..2096bdd415efa 100644
--- a/libcxx/include/initializer_list
+++ b/libcxx/include/initializer_list
@@ -53,11 +53,11 @@ template<class E> const E* end(initializer_list<E> il) noexcept; // constexpr in
# pragma GCC system_header
# endif
+# ifndef _LIBCPP_CXX03_LANG
+
namespace std // purposefully not versioned
{
-# ifndef _LIBCPP_CXX03_LANG
-
template <class _Ep>
class _LIBCPP_NO_SPECIALIZATIONS initializer_list {
const _Ep* __begin_;
@@ -101,10 +101,10 @@ inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 const _Ep* end(initia
return __il.end();
}
-# endif // !defined(_LIBCPP_CXX03_LANG)
-
} // namespace std
+# endif // !defined(_LIBCPP_CXX03_LANG)
+
# if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
# include <cstddef>
# endif
diff --git a/libcxx/include/scoped_allocator b/libcxx/include/scoped_allocator
index a469d4afea245..d83d6cfeb9ad3 100644
--- a/libcxx/include/scoped_allocator
+++ b/libcxx/include/scoped_allocator
@@ -135,10 +135,10 @@ template <class OuterA1, class OuterA2, class... InnerAllocs>
_LIBCPP_PUSH_MACROS
# include <__undef_macros>
-_LIBCPP_BEGIN_NAMESPACE_STD
-
# if !defined(_LIBCPP_CXX03_LANG)
+_LIBCPP_BEGIN_NAMESPACE_STD
+
// scoped_allocator_adaptor
template <class... _Allocs>
@@ -558,10 +558,10 @@ inline _LIBCPP_HIDE_FROM_ABI bool operator!=(const scoped_allocator_adaptor<_Out
# endif // _LIBCPP_STD_VER <= 17
-# endif // !defined(_LIBCPP_CXX03_LANG)
-
_LIBCPP_END_NAMESPACE_STD
+# endif // !defined(_LIBCPP_CXX03_LANG)
+
_LIBCPP_POP_MACROS
# if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
diff --git a/libcxx/include/source_location b/libcxx/include/source_location
index 41b23f70c662d..6913b049946ae 100644
--- a/libcxx/include/source_location
+++ b/libcxx/include/source_location
@@ -36,10 +36,10 @@ namespace std {
# pragma GCC system_header
# endif
-_LIBCPP_BEGIN_NAMESPACE_STD
-
# if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
class source_location {
// The names source_location::__impl, _M_file_name, _M_function_name, _M_line, and _M_column
// are hard-coded in the compiler and must not be changed here.
@@ -81,10 +81,10 @@ public:
}
};
-# endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+# endif // _LIBCPP_STD_VER >= 20
+
#endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
#endif // _LIBCPP_SOURCE_LOCATION
diff --git a/libcxx/include/span b/libcxx/include/span
index 1911badd88cb1..db8bb95881c2a 100644
--- a/libcxx/include/span
+++ b/libcxx/include/span
@@ -198,10 +198,10 @@ template<class R>
_LIBCPP_PUSH_MACROS
# include <__undef_macros>
-_LIBCPP_BEGIN_NAMESPACE_STD
-
# if _LIBCPP_STD_VER >= 20
+_LIBCPP_BEGIN_NAMESPACE_STD
+
template <class _Tp>
struct __is_std_span : false_type {};
@@ -644,10 +644,10 @@ span(const array<_Tp, _Sz>&) -> span<const _Tp, _Sz>;
template <ranges::contiguous_range _Range>
span(_Range&&) -> span<remove_reference_t<ranges::range_reference_t<_Range>>>;
-# endif // _LIBCPP_STD_VER >= 20
-
_LIBCPP_END_NAMESPACE_STD
+# endif // _LIBCPP_STD_VER >= 20
+
_LIBCPP_POP_MACROS
# if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
diff --git a/libcxx/include/syncstream b/libcxx/include/syncstream
index bd64453683c7c..03e18ddbdfd22 100644
--- a/libcxx/include/syncstream
+++ b/libcxx/include/syncstream
@@ -147,10 +147,10 @@ namespace std {
_LIBCPP_PUSH_MACROS
# include <__undef_macros>
-_LIBCPP_BEGIN_NAMESPACE_STD
-
# if _LIBCPP_STD_VER >= 20 && _LIBCPP_HAS_EXPERIMENTAL_SYNCSTREAM
+_LIBCPP_BEGIN_NAMESPACE_STD
+
// [syncstream.syncbuf.overview]/1
// Class template basic_syncbuf stores character data written to it,
// known as the associated output, into internal buffers allocated
@@ -511,10 +511,10 @@ using std::osyncstream;
using std::wosyncstream;
# endif
-# endif // _LIBCPP_STD_VER >= 20 && _LIBCPP_HAS_EXPERIMENTAL_SYNCSTREAM
-
_LIBCPP_END_NAMESPACE_STD
+# endif // _LIBCPP_STD_VER >= 20 && _LIBCPP_HAS_EXPERIMENTAL_SYNCSTREAM
+
_LIBCPP_POP_MACROS
# endif // _LIBCPP_HAS_LOCALIZATION
diff --git a/libcxx/include/tuple b/libcxx/include/tuple
index e02e45f425f4f..6574bd67200f6 100644
--- a/libcxx/include/tuple
+++ b/libcxx/include/tuple
@@ -284,10 +284,10 @@ template <class... Types>
_LIBCPP_PUSH_MACROS
# include <__undef_macros>
-_LIBCPP_BEGIN_NAMESPACE_STD
-
# ifndef _LIBCPP_CXX03_LANG
+_LIBCPP_BEGIN_NAMESPACE_STD
+
template <size_t _Ip, class _Tp, class _Up>
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 bool __tuple_compare_equal(const _Tp& __x, const _Up& __y) {
if constexpr (_Ip == 0)
@@ -1455,10 +1455,10 @@ template <class _Tp, class _Tuple, class = enable_if_t<__can_make_from_tuple<_Tp
# endif // _LIBCPP_STD_VER >= 17
-#endif // !defined(_LIBCPP_CXX03_LANG)
-
_LIBCPP_END_NAMESPACE_STD
+#endif // !defined(_LIBCPP_CXX03_LANG)
+
_LIBCPP_POP_MACROS
// clang-format on
diff --git a/libcxx/include/variant b/libcxx/include/variant
index 56c5efe92b642..00af8823dca6a 100644
--- a/libcxx/include/variant
+++ b/libcxx/include/variant
@@ -293,10 +293,10 @@ public:
_LIBCPP_END_UNVERSIONED_NAMESPACE_STD
-_LIBCPP_BEGIN_NAMESPACE_STD
-
# if _LIBCPP_STD_VER >= 17
+_LIBCPP_BEGIN_NAMESPACE_STD
+
// Light N-dimensional array of function pointers. Used in place of std::array to avoid
// adding a dependency.
template <class _Tp, size_t _Size>
@@ -1635,10 +1635,10 @@ _LIBCPP_HIDE_FROM_ABI constexpr auto&& __unchecked_get(variant<_Types...>& __v)
return std::__unchecked_get<__find_exactly_one_t<_Tp, _Types...>::value>(__v);
}
-# endif // _LIBCPP_STD_VER >= 17
-
_LIBCPP_END_NAMESPACE_STD
+# endif // _LIBCPP_STD_VER >= 17
+
_LIBCPP_POP_MACROS
# if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
diff --git a/libcxx/test/tools/clang_tidy_checks/CMakeLists.txt b/libcxx/test/tools/clang_tidy_checks/CMakeLists.txt
index 521a60c0fc498..41a95abe0aee1 100644
--- a/libcxx/test/tools/clang_tidy_checks/CMakeLists.txt
+++ b/libcxx/test/tools/clang_tidy_checks/CMakeLists.txt
@@ -90,6 +90,7 @@ message(STATUS "Clang-tidy tests are enabled.")
set(SOURCES
abi_tag_on_virtual.cpp
+ empty_namespaces.cpp
header_exportable_declarations.cpp
hide_from_abi.cpp
internal_ftm_use.cpp
diff --git a/libcxx/test/tools/clang_tidy_checks/empty_namespaces.cpp b/libcxx/test/tools/clang_tidy_checks/empty_namespaces.cpp
new file mode 100644
index 0000000000000..e176b29670ce9
--- /dev/null
+++ b/libcxx/test/tools/clang_tidy_checks/empty_namespaces.cpp
@@ -0,0 +1,28 @@
+//===----------------------------------------------------------------------===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+#include "clang-tidy/ClangTidyCheck.h"
+#include "clang-tidy/ClangTidyModuleRegistry.h"
+
+#include "empty_namespaces.hpp"
+
+namespace libcpp {
+empty_namespaces::empty_namespaces(llvm::StringRef name, clang::tidy::ClangTidyContext* context)
+ : clang::tidy::ClangTidyCheck(name, context) {}
+
+void empty_namespaces::registerMatchers(clang::ast_matchers::MatchFinder* finder) {
+ using namespace clang::ast_matchers;
+ finder->addMatcher(namespaceDecl(unless(hasDescendant(decl()))).bind("empty_namespace"), this);
+}
+
+void empty_namespaces::check(const clang::ast_matchers::MatchFinder::MatchResult& result) {
+ if (const auto* ns = result.Nodes.getNodeAs<clang::NamespaceDecl>("empty_namespace")) {
+ diag(ns->getBeginLoc(), "Empty namespaces should be avoided. Move any checks around the namespace instead.");
+ }
+}
+} // namespace libcpp
diff --git a/libcxx/test/tools/clang_tidy_checks/empty_namespaces.hpp b/libcxx/test/tools/clang_tidy_checks/empty_namespaces.hpp
new file mode 100644
index 0000000000000..2b69eadf25fe1
--- /dev/null
+++ b/libcxx/test/tools/clang_tidy_checks/empty_namespaces.hpp
@@ -0,0 +1,18 @@
+//===----------------------------------------------------------------------===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+#include "clang-tidy/ClangTidyCheck.h"
+
+namespace libcpp {
+class empty_namespaces : public clang::tidy::ClangTidyCheck {
+public:
+ empty_namespaces(llvm::StringRef, clang::tidy::ClangTidyContext*);
+ void registerMatchers(clang::ast_matchers::MatchFinder*) override;
+ void check(const clang::ast_matchers::MatchFinder::MatchResult&) override;
+};
+} // namespace libcpp
diff --git a/libcxx/test/tools/clang_tidy_checks/libcpp_module.cpp b/libcxx/test/tools/clang_tidy_checks/libcpp_module.cpp
index 2cf39e2b626f8..b6298eefdeb44 100644
--- a/libcxx/test/tools/clang_tidy_checks/libcpp_module.cpp
+++ b/libcxx/test/tools/clang_tidy_checks/libcpp_module.cpp
@@ -10,6 +10,7 @@
#include "clang-tidy/ClangTidyModuleRegistry.h"
#include "abi_tag_on_virtual.hpp"
+#include "empty_namespaces.hpp"
#include "header_exportable_declarations.hpp"
#include "hide_from_abi.hpp"
#include "internal_ftm_use.hpp"
@@ -24,6 +25,7 @@ class LibcxxTestModule : public clang::tidy::ClangTidyModule {
public:
void addCheckFactories(clang::tidy::ClangTidyCheckFactories& check_factories) override {
check_factories.registerCheck<libcpp::abi_tag_on_virtual>("libcpp-avoid-abi-tag-on-virtual");
+ check_factories.registerCheck<libcpp::empty_namespaces>("libcpp-avoid-empty-namespaces");
check_factories.registerCheck<libcpp::header_exportable_declarations>("libcpp-header-exportable-declarations");
check_factories.registerCheck<libcpp::hide_from_abi>("libcpp-hide-from-abi");
check_factories.registerCheck<libcpp::internal_ftm_use>("libcpp-internal-ftms");
More information about the libcxx-commits
mailing list