[libcxx-commits] [libcxx] 0a4aa8a - [libc++] Granularize <type_traits> includes
Nikolas Klauser via libcxx-commits
libcxx-commits at lists.llvm.org
Wed Mar 8 13:05:11 PST 2023
Author: Nikolas Klauser
Date: 2023-03-08T22:05:04+01:00
New Revision: 0a4aa8a122aa097499c498b639a75b5e9a73e9f0
URL: https://github.com/llvm/llvm-project/commit/0a4aa8a122aa097499c498b639a75b5e9a73e9f0
DIFF: https://github.com/llvm/llvm-project/commit/0a4aa8a122aa097499c498b639a75b5e9a73e9f0.diff
LOG: [libc++] Granularize <type_traits> includes
Reviewed By: ldionne, #libc, #libc_abi
Spies: #libc_vendors, smeenai, libcxx-commits
Differential Revision: https://reviews.llvm.org/D145320
Added:
Modified:
libcxx/include/__bit_reference
libcxx/include/__chrono/hh_mm_ss.h
libcxx/include/__filesystem/filesystem_error.h
libcxx/include/__filesystem/path.h
libcxx/include/__filesystem/u8path.h
libcxx/include/__format/buffer.h
libcxx/include/__format/format_arg.h
libcxx/include/__format/format_arg_store.h
libcxx/include/__format/format_parse_context.h
libcxx/include/__format/formatter_floating_point.h
libcxx/include/__format/parser_std_format_spec.h
libcxx/include/__functional/bind.h
libcxx/include/__functional/bind_back.h
libcxx/include/__functional/bind_front.h
libcxx/include/__functional/compose.h
libcxx/include/__functional/function.h
libcxx/include/__functional/is_transparent.h
libcxx/include/__functional/mem_fn.h
libcxx/include/__functional/not_fn.h
libcxx/include/__functional/perfect_forward.h
libcxx/include/__hash_table
libcxx/include/__memory/shared_ptr.h
libcxx/include/__mutex_base
libcxx/include/__random/clamp_to_integral.h
libcxx/include/__random/discard_block_engine.h
libcxx/include/__random/independent_bits_engine.h
libcxx/include/__random/is_seed_sequence.h
libcxx/include/__random/linear_congruential_engine.h
libcxx/include/__random/mersenne_twister_engine.h
libcxx/include/__random/seed_seq.h
libcxx/include/__random/shuffle_order_engine.h
libcxx/include/__random/subtract_with_carry_engine.h
libcxx/include/__random/uniform_real_distribution.h
libcxx/include/__ranges/all.h
libcxx/include/__ranges/common_view.h
libcxx/include/__ranges/copyable_box.h
libcxx/include/__ranges/counted.h
libcxx/include/__ranges/drop_view.h
libcxx/include/__ranges/empty_view.h
libcxx/include/__ranges/filter_view.h
libcxx/include/__ranges/iota_view.h
libcxx/include/__ranges/join_view.h
libcxx/include/__ranges/lazy_split_view.h
libcxx/include/__ranges/non_propagating_cache.h
libcxx/include/__ranges/owning_view.h
libcxx/include/__ranges/range_adaptor.h
libcxx/include/__ranges/rbegin.h
libcxx/include/__ranges/ref_view.h
libcxx/include/__ranges/rend.h
libcxx/include/__ranges/reverse_view.h
libcxx/include/__ranges/single_view.h
libcxx/include/__ranges/take_view.h
libcxx/include/__ranges/transform_view.h
libcxx/include/__ranges/zip_view.h
libcxx/include/__split_buffer
libcxx/include/any
libcxx/include/array
libcxx/include/bitset
libcxx/include/charconv
libcxx/include/complex
libcxx/include/deque
libcxx/include/experimental/__memory
libcxx/include/experimental/memory_resource
libcxx/include/experimental/propagate_const
libcxx/include/ext/hash_map
libcxx/include/ext/hash_set
libcxx/include/forward_list
libcxx/include/functional
libcxx/include/future
libcxx/include/istream
libcxx/include/list
libcxx/include/locale
libcxx/include/map
libcxx/include/optional
libcxx/include/ostream
libcxx/include/queue
libcxx/include/ranges
libcxx/include/set
libcxx/include/span
libcxx/include/stack
libcxx/include/string
libcxx/include/string_view
libcxx/include/system_error
libcxx/include/thread
libcxx/include/typeinfo
libcxx/include/unordered_map
libcxx/include/unordered_set
libcxx/include/variant
libcxx/include/vector
libcxx/test/libcxx/containers/sequences/vector.bool/trivial_for_purposes_of_call.pass.cpp
libcxx/test/libcxx/language.support/support.dynamic/new_faligned_allocation.pass.cpp
libcxx/test/libcxx/ranges/range.adaptors/range.join/segmented_iterator.compile.pass.cpp
libcxx/test/libcxx/transitive_includes/cxx03.csv
libcxx/test/libcxx/transitive_includes/cxx11.csv
libcxx/test/libcxx/transitive_includes/cxx14.csv
libcxx/test/libcxx/transitive_includes/cxx17.csv
libcxx/test/libcxx/transitive_includes/cxx20.csv
libcxx/test/libcxx/transitive_includes/cxx2b.csv
libcxx/test/std/containers/sequences/array/array.special/swap.pass.cpp
libcxx/test/std/iterators/iterator.container/ssize.pass.cpp
libcxx/test/std/iterators/iterator.requirements/iterator.cust/iterator.cust.move/iter_move.pass.cpp
libcxx/test/std/iterators/stream.iterators/istream.iterator/istream.iterator.cons/default.pass.cpp
libcxx/test/std/numerics/rand/rand.dist/rand.dist.bern/rand.dist.bern.bin/eval.pass.cpp
libcxx/test/std/numerics/rand/rand.dist/rand.dist.bern/rand.dist.bern.geo/eval.pass.cpp
libcxx/test/std/numerics/rand/rand.dist/rand.dist.pois/rand.dist.pois.poisson/eval.pass.cpp
libcxx/test/std/numerics/rand/rand.dist/rand.dist.samp/rand.dist.samp.discrete/eval.pass.cpp
libcxx/test/std/numerics/rand/rand.dist/rand.dist.uni/rand.dist.uni.int/eval.pass.cpp
libcxx/test/std/numerics/rand/rand.dist/rand.dist.uni/rand.dist.uni.int/int128.pass.cpp
libcxx/test/std/ranges/range.adaptors/range.as.rvalue/ctor.pass.cpp
libcxx/test/std/ranges/range.adaptors/range.take/ctor.default.pass.cpp
libcxx/test/std/ranges/range.factories/range.iota.view/ctor.value.pass.cpp
libcxx/test/std/ranges/range.factories/range.iota.view/iterator/ctor.value.pass.cpp
libcxx/test/std/ranges/range.factories/range.iota.view/iterator/decrement.pass.cpp
libcxx/test/std/ranges/range.factories/range.iota.view/iterator/increment.pass.cpp
libcxx/test/std/ranges/range.factories/range.iota.view/iterator/member_typedefs.compile.pass.cpp
libcxx/test/std/ranges/range.factories/range.iota.view/iterator/minus.pass.cpp
libcxx/test/std/ranges/range.factories/range.iota.view/iterator/minus_eq.pass.cpp
libcxx/test/std/ranges/range.factories/range.iota.view/iterator/plus.pass.cpp
libcxx/test/std/ranges/range.factories/range.iota.view/iterator/plus_eq.pass.cpp
libcxx/test/std/ranges/range.factories/range.iota.view/sentinel/ctor.value.pass.cpp
libcxx/test/std/ranges/range.factories/range.iota.view/views_iota.pass.cpp
libcxx/test/std/strings/basic.string.literals/noexcept.compile.pass.cpp
libcxx/test/std/strings/string.view/string.view.io/stream_insert_decl_present.compile.pass.cpp
libcxx/test/std/utilities/charconv/charconv.syn/chars_format.pass.cpp
libcxx/test/std/utilities/template.bitset/bitset.cons/string_ctor.pass.cpp
libcxx/test/support/filesystem_test_helper.h
libcxxabi/src/demangle/ItaniumDemangle.h
Removed:
################################################################################
diff --git a/libcxx/include/__bit_reference b/libcxx/include/__bit_reference
index c66dc4a8e5e97..95188ff68c823 100644
--- a/libcxx/include/__bit_reference
+++ b/libcxx/include/__bit_reference
@@ -19,7 +19,9 @@
#include <__iterator/iterator_traits.h>
#include <__memory/construct_at.h>
#include <__memory/pointer_traits.h>
-#include <type_traits>
+#include <__type_traits/conditional.h>
+#include <__utility/swap.h>
+#include <cstring>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/libcxx/include/__chrono/hh_mm_ss.h b/libcxx/include/__chrono/hh_mm_ss.h
index dd1c94ee66707..5bd452e57fa3c 100644
--- a/libcxx/include/__chrono/hh_mm_ss.h
+++ b/libcxx/include/__chrono/hh_mm_ss.h
@@ -13,8 +13,8 @@
#include <__chrono/duration.h>
#include <__chrono/time_point.h>
#include <__config>
+#include <__type_traits/common_type.h>
#include <ratio>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/libcxx/include/__filesystem/filesystem_error.h b/libcxx/include/__filesystem/filesystem_error.h
index 70e39541e73ff..49a076a5cc6d0 100644
--- a/libcxx/include/__filesystem/filesystem_error.h
+++ b/libcxx/include/__filesystem/filesystem_error.h
@@ -18,7 +18,6 @@
#include <iosfwd>
#include <new>
#include <system_error>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/libcxx/include/__filesystem/path.h b/libcxx/include/__filesystem/path.h
index aad0beb0c6063..530821a9cb374 100644
--- a/libcxx/include/__filesystem/path.h
+++ b/libcxx/include/__filesystem/path.h
@@ -18,10 +18,13 @@
#include <__fwd/hash.h>
#include <__iterator/back_insert_iterator.h>
#include <__iterator/iterator_traits.h>
+#include <__type_traits/decay.h>
+#include <__type_traits/is_pointer.h>
+#include <__type_traits/remove_const.h>
+#include <__type_traits/remove_pointer.h>
#include <cstddef>
#include <string>
#include <string_view>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_LOCALIZATION)
# include <iomanip> // for quoted
diff --git a/libcxx/include/__filesystem/u8path.h b/libcxx/include/__filesystem/u8path.h
index d35faa14bb8a0..ebc1159ee0b44 100644
--- a/libcxx/include/__filesystem/u8path.h
+++ b/libcxx/include/__filesystem/u8path.h
@@ -15,7 +15,6 @@
#include <__config>
#include <__filesystem/path.h>
#include <string>
-#include <type_traits>
// Only required on Windows for __widen_from_utf8, and included conservatively
// because it requires support for localization.
diff --git a/libcxx/include/__format/buffer.h b/libcxx/include/__format/buffer.h
index c985dbc5ab01b..c8e11925a10cd 100644
--- a/libcxx/include/__format/buffer.h
+++ b/libcxx/include/__format/buffer.h
@@ -27,6 +27,7 @@
#include <__iterator/incrementable_traits.h>
#include <__iterator/iterator_traits.h>
#include <__iterator/wrap_iter.h>
+#include <__type_traits/add_pointer.h>
#include <__utility/move.h>
#include <cstddef>
#include <string_view>
diff --git a/libcxx/include/__format/format_arg.h b/libcxx/include/__format/format_arg.h
index 43fca44bee2fd..a25976a0795e7 100644
--- a/libcxx/include/__format/format_arg.h
+++ b/libcxx/include/__format/format_arg.h
@@ -18,6 +18,7 @@
#include <__format/format_parse_context.h>
#include <__functional/invoke.h>
#include <__memory/addressof.h>
+#include <__utility/declval.h>
#include <__utility/forward.h>
#include <__utility/unreachable.h>
#include <__variant/monostate.h>
diff --git a/libcxx/include/__format/format_arg_store.h b/libcxx/include/__format/format_arg_store.h
index 44e0e93850bf5..15bfccc0a3539 100644
--- a/libcxx/include/__format/format_arg_store.h
+++ b/libcxx/include/__format/format_arg_store.h
@@ -19,6 +19,9 @@
#include <__config>
#include <__format/concepts.h>
#include <__format/format_arg.h>
+#include <__type_traits/conditional.h>
+#include <__type_traits/extent.h>
+#include <__type_traits/is_same.h>
#include <__utility/forward.h>
#include <string>
#include <string_view>
diff --git a/libcxx/include/__format/format_parse_context.h b/libcxx/include/__format/format_parse_context.h
index 2e2b47782a690..fc1d0a3982fe4 100644
--- a/libcxx/include/__format/format_parse_context.h
+++ b/libcxx/include/__format/format_parse_context.h
@@ -12,6 +12,7 @@
#include <__config>
#include <__format/format_error.h>
+#include <__type_traits/is_constant_evaluated.h>
#include <string_view>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
diff --git a/libcxx/include/__format/formatter_floating_point.h b/libcxx/include/__format/formatter_floating_point.h
index 0e19731f93f02..31cd012e484ad 100644
--- a/libcxx/include/__format/formatter_floating_point.h
+++ b/libcxx/include/__format/formatter_floating_point.h
@@ -26,6 +26,7 @@
#include <__format/formatter_output.h>
#include <__format/parser_std_format_spec.h>
#include <__memory/allocator.h>
+#include <__type_traits/conditional.h>
#include <__utility/move.h>
#include <__utility/unreachable.h>
#include <charconv>
diff --git a/libcxx/include/__format/parser_std_format_spec.h b/libcxx/include/__format/parser_std_format_spec.h
index b88f39960184a..c500525932025 100644
--- a/libcxx/include/__format/parser_std_format_spec.h
+++ b/libcxx/include/__format/parser_std_format_spec.h
@@ -30,6 +30,8 @@
#include <__format/unicode.h>
#include <__iterator/concepts.h>
#include <__iterator/readable_traits.h> // iter_value_t
+#include <__type_traits/common_type.h>
+#include <__type_traits/is_trivially_copyable.h>
#include <__variant/monostate.h>
#include <cstdint>
#include <string_view>
diff --git a/libcxx/include/__functional/bind.h b/libcxx/include/__functional/bind.h
index 30af9380eb6e1..0eb5ce7055895 100644
--- a/libcxx/include/__functional/bind.h
+++ b/libcxx/include/__functional/bind.h
@@ -15,7 +15,6 @@
#include <__functional/weak_result_type.h>
#include <cstddef>
#include <tuple>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/libcxx/include/__functional/bind_back.h b/libcxx/include/__functional/bind_back.h
index 1476325055779..544315d6ea55f 100644
--- a/libcxx/include/__functional/bind_back.h
+++ b/libcxx/include/__functional/bind_back.h
@@ -16,7 +16,6 @@
#include <__utility/forward.h>
#include <__utility/integer_sequence.h>
#include <tuple>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/libcxx/include/__functional/bind_front.h b/libcxx/include/__functional/bind_front.h
index 4e0e71d8df1f8..109a83c2104f6 100644
--- a/libcxx/include/__functional/bind_front.h
+++ b/libcxx/include/__functional/bind_front.h
@@ -14,7 +14,6 @@
#include <__functional/invoke.h>
#include <__functional/perfect_forward.h>
#include <__utility/forward.h>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/libcxx/include/__functional/compose.h b/libcxx/include/__functional/compose.h
index 2a0d61d7eb0be..168131e1d9ea3 100644
--- a/libcxx/include/__functional/compose.h
+++ b/libcxx/include/__functional/compose.h
@@ -14,7 +14,6 @@
#include <__functional/invoke.h>
#include <__functional/perfect_forward.h>
#include <__utility/forward.h>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/libcxx/include/__functional/function.h b/libcxx/include/__functional/function.h
index d7cc07e7355b6..1d2d2a1c8da37 100644
--- a/libcxx/include/__functional/function.h
+++ b/libcxx/include/__functional/function.h
@@ -23,6 +23,9 @@
#include <__memory/builtin_new_allocator.h>
#include <__memory/compressed_pair.h>
#include <__memory/unique_ptr.h>
+#include <__type_traits/aligned_storage.h>
+#include <__type_traits/is_trivially_copy_constructible.h>
+#include <__type_traits/is_trivially_destructible.h>
#include <__type_traits/strip_signature.h>
#include <__utility/forward.h>
#include <__utility/move.h>
@@ -31,7 +34,6 @@
#include <exception>
#include <new>
#include <tuple>
-#include <type_traits>
#include <typeinfo>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
diff --git a/libcxx/include/__functional/is_transparent.h b/libcxx/include/__functional/is_transparent.h
index 4ff163f7b3071..c539a07d696dd 100644
--- a/libcxx/include/__functional/is_transparent.h
+++ b/libcxx/include/__functional/is_transparent.h
@@ -11,7 +11,8 @@
#define _LIBCPP___FUNCTIONAL_IS_TRANSPARENT
#include <__config>
-#include <type_traits>
+#include <__type_traits/integral_constant.h>
+#include <__type_traits/void_t.h>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/libcxx/include/__functional/mem_fn.h b/libcxx/include/__functional/mem_fn.h
index 8b51627079cf2..fe221dd128f42 100644
--- a/libcxx/include/__functional/mem_fn.h
+++ b/libcxx/include/__functional/mem_fn.h
@@ -15,7 +15,6 @@
#include <__functional/invoke.h>
#include <__functional/weak_result_type.h>
#include <__utility/forward.h>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/libcxx/include/__functional/not_fn.h b/libcxx/include/__functional/not_fn.h
index 3c4f588508639..f148a408eeec9 100644
--- a/libcxx/include/__functional/not_fn.h
+++ b/libcxx/include/__functional/not_fn.h
@@ -14,7 +14,6 @@
#include <__functional/invoke.h>
#include <__functional/perfect_forward.h>
#include <__utility/forward.h>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/libcxx/include/__functional/perfect_forward.h b/libcxx/include/__functional/perfect_forward.h
index 4497decab8b0f..af89797af2964 100644
--- a/libcxx/include/__functional/perfect_forward.h
+++ b/libcxx/include/__functional/perfect_forward.h
@@ -15,7 +15,6 @@
#include <__utility/forward.h>
#include <__utility/move.h>
#include <tuple>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/libcxx/include/__hash_table b/libcxx/include/__hash_table
index 19a47e0d04ce0..e38a44221c89f 100644
--- a/libcxx/include/__hash_table
+++ b/libcxx/include/__hash_table
@@ -17,6 +17,7 @@
#include <__config>
#include <__debug>
#include <__functional/hash.h>
+#include <__functional/invoke.h>
#include <__iterator/iterator_traits.h>
#include <__memory/addressof.h>
#include <__memory/allocator_traits.h>
@@ -25,6 +26,16 @@
#include <__memory/swap_allocator.h>
#include <__memory/unique_ptr.h>
#include <__type_traits/can_extract_key.h>
+#include <__type_traits/conditional.h>
+#include <__type_traits/is_const.h>
+#include <__type_traits/is_copy_constructible.h>
+#include <__type_traits/is_nothrow_constructible.h>
+#include <__type_traits/is_nothrow_default_constructible.h>
+#include <__type_traits/is_nothrow_move_constructible.h>
+#include <__type_traits/is_pointer.h>
+#include <__type_traits/is_reference.h>
+#include <__type_traits/remove_const.h>
+#include <__type_traits/remove_cvref.h>
#include <__utility/forward.h>
#include <__utility/move.h>
#include <__utility/pair.h>
@@ -32,7 +43,6 @@
#include <cmath>
#include <cstring>
#include <initializer_list>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/libcxx/include/__memory/shared_ptr.h b/libcxx/include/__memory/shared_ptr.h
index 70615176d3703..ec8bb9cec77b6 100644
--- a/libcxx/include/__memory/shared_ptr.h
+++ b/libcxx/include/__memory/shared_ptr.h
@@ -29,6 +29,20 @@
#include <__memory/pointer_traits.h>
#include <__memory/uninitialized_algorithms.h>
#include <__memory/unique_ptr.h>
+#include <__type_traits/add_lvalue_reference.h>
+#include <__type_traits/conditional.h>
+#include <__type_traits/conjunction.h>
+#include <__type_traits/disjunction.h>
+#include <__type_traits/is_array.h>
+#include <__type_traits/is_bounded_array.h>
+#include <__type_traits/is_move_constructible.h>
+#include <__type_traits/is_reference.h>
+#include <__type_traits/is_unbounded_array.h>
+#include <__type_traits/nat.h>
+#include <__type_traits/negation.h>
+#include <__type_traits/remove_extent.h>
+#include <__type_traits/remove_reference.h>
+#include <__utility/declval.h>
#include <__utility/forward.h>
#include <__utility/move.h>
#include <__utility/swap.h>
diff --git a/libcxx/include/__mutex_base b/libcxx/include/__mutex_base
index 82d9fa6ecbacf..80621c88370c9 100644
--- a/libcxx/include/__mutex_base
+++ b/libcxx/include/__mutex_base
@@ -16,6 +16,8 @@
#include <__chrono/time_point.h>
#include <__config>
#include <__threading_support>
+#include <__type_traits/is_floating_point.h>
+#include <__type_traits/is_nothrow_default_constructible.h>
#include <ratio>
#include <system_error>
#include <time.h>
diff --git a/libcxx/include/__random/clamp_to_integral.h b/libcxx/include/__random/clamp_to_integral.h
index 85f8aa574ea12..c67d76d6e9bad 100644
--- a/libcxx/include/__random/clamp_to_integral.h
+++ b/libcxx/include/__random/clamp_to_integral.h
@@ -12,7 +12,6 @@
#include <__config>
#include <cmath>
#include <limits>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/libcxx/include/__random/discard_block_engine.h b/libcxx/include/__random/discard_block_engine.h
index db33623d94851..077f1584d1e0e 100644
--- a/libcxx/include/__random/discard_block_engine.h
+++ b/libcxx/include/__random/discard_block_engine.h
@@ -11,10 +11,12 @@
#include <__config>
#include <__random/is_seed_sequence.h>
+#include <__type_traits/enable_if.h>
+#include <__type_traits/is_convertible.h>
#include <__utility/move.h>
+#include <cstddef>
#include <iosfwd>
#include <limits>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/libcxx/include/__random/independent_bits_engine.h b/libcxx/include/__random/independent_bits_engine.h
index f4a23bbb5098b..2cd4096884222 100644
--- a/libcxx/include/__random/independent_bits_engine.h
+++ b/libcxx/include/__random/independent_bits_engine.h
@@ -12,10 +12,13 @@
#include <__config>
#include <__random/is_seed_sequence.h>
#include <__random/log2.h>
+#include <__type_traits/conditional.h>
+#include <__type_traits/enable_if.h>
+#include <__type_traits/is_convertible.h>
#include <__utility/move.h>
+#include <cstddef>
#include <iosfwd>
#include <limits>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/libcxx/include/__random/is_seed_sequence.h b/libcxx/include/__random/is_seed_sequence.h
index 3c82b2790b035..06621c3cee0d0 100644
--- a/libcxx/include/__random/is_seed_sequence.h
+++ b/libcxx/include/__random/is_seed_sequence.h
@@ -10,7 +10,9 @@
#define _LIBCPP___RANDOM_IS_SEED_SEQUENCE_H
#include <__config>
-#include <type_traits>
+#include <__type_traits/is_convertible.h>
+#include <__type_traits/is_same.h>
+#include <__type_traits/remove_cv.h>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/libcxx/include/__random/linear_congruential_engine.h b/libcxx/include/__random/linear_congruential_engine.h
index 0d91f14120b64..aa24a06c8c24b 100644
--- a/libcxx/include/__random/linear_congruential_engine.h
+++ b/libcxx/include/__random/linear_congruential_engine.h
@@ -11,9 +11,11 @@
#include <__config>
#include <__random/is_seed_sequence.h>
+#include <__type_traits/enable_if.h>
+#include <__type_traits/integral_constant.h>
+#include <__type_traits/is_unsigned.h>
#include <cstdint>
#include <iosfwd>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/libcxx/include/__random/mersenne_twister_engine.h b/libcxx/include/__random/mersenne_twister_engine.h
index eb5f56f42dba8..89df825619612 100644
--- a/libcxx/include/__random/mersenne_twister_engine.h
+++ b/libcxx/include/__random/mersenne_twister_engine.h
@@ -17,7 +17,6 @@
#include <cstdint>
#include <iosfwd>
#include <limits>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/libcxx/include/__random/seed_seq.h b/libcxx/include/__random/seed_seq.h
index 330537fa00234..5c40d15899f7f 100644
--- a/libcxx/include/__random/seed_seq.h
+++ b/libcxx/include/__random/seed_seq.h
@@ -13,6 +13,7 @@
#include <__algorithm/fill.h>
#include <__algorithm/max.h>
#include <__config>
+#include <cstdint>
#include <initializer_list>
#include <vector>
diff --git a/libcxx/include/__random/shuffle_order_engine.h b/libcxx/include/__random/shuffle_order_engine.h
index 86a60fc57b251..e07f230d21c77 100644
--- a/libcxx/include/__random/shuffle_order_engine.h
+++ b/libcxx/include/__random/shuffle_order_engine.h
@@ -12,10 +12,13 @@
#include <__algorithm/equal.h>
#include <__config>
#include <__random/is_seed_sequence.h>
+#include <__type_traits/enable_if.h>
+#include <__type_traits/integral_constant.h>
+#include <__type_traits/is_convertible.h>
#include <__utility/move.h>
+#include <cstddef>
#include <cstdint>
#include <iosfwd>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/libcxx/include/__random/subtract_with_carry_engine.h b/libcxx/include/__random/subtract_with_carry_engine.h
index b25ca84e3afd7..9294cc2f3811d 100644
--- a/libcxx/include/__random/subtract_with_carry_engine.h
+++ b/libcxx/include/__random/subtract_with_carry_engine.h
@@ -18,7 +18,6 @@
#include <cstdint>
#include <iosfwd>
#include <limits>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/libcxx/include/__random/uniform_real_distribution.h b/libcxx/include/__random/uniform_real_distribution.h
index b52b68977f826..dd6d6b3335e29 100644
--- a/libcxx/include/__random/uniform_real_distribution.h
+++ b/libcxx/include/__random/uniform_real_distribution.h
@@ -14,7 +14,6 @@
#include <__random/is_valid.h>
#include <iosfwd>
#include <limits>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/libcxx/include/__ranges/all.h b/libcxx/include/__ranges/all.h
index 383fd14b261b3..ecf908df1fe6a 100644
--- a/libcxx/include/__ranges/all.h
+++ b/libcxx/include/__ranges/all.h
@@ -18,10 +18,10 @@
#include <__ranges/owning_view.h>
#include <__ranges/range_adaptor.h>
#include <__ranges/ref_view.h>
+#include <__type_traits/decay.h>
#include <__utility/auto_cast.h>
#include <__utility/declval.h>
#include <__utility/forward.h>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/libcxx/include/__ranges/common_view.h b/libcxx/include/__ranges/common_view.h
index 2b1e72bcbbfbd..8fc68bada0c76 100644
--- a/libcxx/include/__ranges/common_view.h
+++ b/libcxx/include/__ranges/common_view.h
@@ -24,7 +24,6 @@
#include <__ranges/view_interface.h>
#include <__utility/forward.h>
#include <__utility/move.h>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/libcxx/include/__ranges/copyable_box.h b/libcxx/include/__ranges/copyable_box.h
index c92e29390021a..1973bbffc3cf8 100644
--- a/libcxx/include/__ranges/copyable_box.h
+++ b/libcxx/include/__ranges/copyable_box.h
@@ -18,7 +18,6 @@
#include <__memory/construct_at.h>
#include <__utility/move.h>
#include <optional>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/libcxx/include/__ranges/counted.h b/libcxx/include/__ranges/counted.h
index f50cd2b934dd5..882f90b1ed82e 100644
--- a/libcxx/include/__ranges/counted.h
+++ b/libcxx/include/__ranges/counted.h
@@ -19,10 +19,11 @@
#include <__iterator/iterator_traits.h>
#include <__memory/pointer_traits.h>
#include <__ranges/subrange.h>
+#include <__type_traits/decay.h>
#include <__utility/forward.h>
#include <__utility/move.h>
+#include <cstddef>
#include <span>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/libcxx/include/__ranges/drop_view.h b/libcxx/include/__ranges/drop_view.h
index 62de4458bb204..b97505b578552 100644
--- a/libcxx/include/__ranges/drop_view.h
+++ b/libcxx/include/__ranges/drop_view.h
@@ -33,10 +33,15 @@
#include <__ranges/size.h>
#include <__ranges/subrange.h>
#include <__ranges/view_interface.h>
+#include <__type_traits/conditional.h>
+#include <__type_traits/decay.h>
+#include <__type_traits/is_nothrow_constructible.h>
+#include <__type_traits/make_unsigned.h>
+#include <__type_traits/remove_cvref.h>
#include <__utility/auto_cast.h>
#include <__utility/forward.h>
#include <__utility/move.h>
-#include <type_traits>
+#include <cstddef>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/libcxx/include/__ranges/empty_view.h b/libcxx/include/__ranges/empty_view.h
index 1a48769d1b2fc..bb445b4e6f94f 100644
--- a/libcxx/include/__ranges/empty_view.h
+++ b/libcxx/include/__ranges/empty_view.h
@@ -13,7 +13,8 @@
#include <__config>
#include <__ranges/enable_borrowed_range.h>
#include <__ranges/view_interface.h>
-#include <type_traits>
+#include <__type_traits/is_object.h>
+#include <cstddef>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/libcxx/include/__ranges/filter_view.h b/libcxx/include/__ranges/filter_view.h
index 895eb6e1fef27..bf1481b7f9156 100644
--- a/libcxx/include/__ranges/filter_view.h
+++ b/libcxx/include/__ranges/filter_view.h
@@ -35,7 +35,6 @@
#include <__utility/forward.h>
#include <__utility/in_place.h>
#include <__utility/move.h>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/libcxx/include/__ranges/iota_view.h b/libcxx/include/__ranges/iota_view.h
index fae3b0b580c06..67cf0b73ecd65 100644
--- a/libcxx/include/__ranges/iota_view.h
+++ b/libcxx/include/__ranges/iota_view.h
@@ -30,9 +30,12 @@
#include <__ranges/copyable_box.h>
#include <__ranges/enable_borrowed_range.h>
#include <__ranges/view_interface.h>
+#include <__type_traits/conditional.h>
+#include <__type_traits/is_nothrow_copy_constructible.h>
+#include <__type_traits/make_unsigned.h>
+#include <__type_traits/type_identity.h>
#include <__utility/forward.h>
#include <__utility/move.h>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/libcxx/include/__ranges/join_view.h b/libcxx/include/__ranges/join_view.h
index a9e5b998afa0b..cba16c807bdb8 100644
--- a/libcxx/include/__ranges/join_view.h
+++ b/libcxx/include/__ranges/join_view.h
@@ -32,7 +32,6 @@
#include <__type_traits/maybe_const.h>
#include <__utility/forward.h>
#include <optional>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/libcxx/include/__ranges/lazy_split_view.h b/libcxx/include/__ranges/lazy_split_view.h
index d84e4ce7990ca..b5b0e7ef02307 100644
--- a/libcxx/include/__ranges/lazy_split_view.h
+++ b/libcxx/include/__ranges/lazy_split_view.h
@@ -12,6 +12,7 @@
#include <__algorithm/ranges_find.h>
#include <__algorithm/ranges_mismatch.h>
+#include <__assert>
#include <__concepts/constructible.h>
#include <__concepts/convertible_to.h>
#include <__concepts/derived_from.h>
@@ -34,10 +35,13 @@
#include <__ranges/single_view.h>
#include <__ranges/subrange.h>
#include <__ranges/view_interface.h>
+#include <__type_traits/conditional.h>
+#include <__type_traits/decay.h>
+#include <__type_traits/is_nothrow_constructible.h>
#include <__type_traits/maybe_const.h>
+#include <__type_traits/remove_reference.h>
#include <__utility/forward.h>
#include <__utility/move.h>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/libcxx/include/__ranges/non_propagating_cache.h b/libcxx/include/__ranges/non_propagating_cache.h
index 438d90d623dc7..2e6e72f94e177 100644
--- a/libcxx/include/__ranges/non_propagating_cache.h
+++ b/libcxx/include/__ranges/non_propagating_cache.h
@@ -16,7 +16,6 @@
#include <__memory/addressof.h>
#include <__utility/forward.h>
#include <optional>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/libcxx/include/__ranges/owning_view.h b/libcxx/include/__ranges/owning_view.h
index ec46065d47b92..cb1d0d578279e 100644
--- a/libcxx/include/__ranges/owning_view.h
+++ b/libcxx/include/__ranges/owning_view.h
@@ -20,8 +20,8 @@
#include <__ranges/enable_borrowed_range.h>
#include <__ranges/size.h>
#include <__ranges/view_interface.h>
+#include <__type_traits/remove_cvref.h>
#include <__utility/move.h>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/libcxx/include/__ranges/range_adaptor.h b/libcxx/include/__ranges/range_adaptor.h
index fcb1f2f71214e..f8fd2f66baf3c 100644
--- a/libcxx/include/__ranges/range_adaptor.h
+++ b/libcxx/include/__ranges/range_adaptor.h
@@ -20,7 +20,6 @@
#include <__ranges/concepts.h>
#include <__utility/forward.h>
#include <__utility/move.h>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/libcxx/include/__ranges/rbegin.h b/libcxx/include/__ranges/rbegin.h
index 720ae3d83355f..1ceb1116d695f 100644
--- a/libcxx/include/__ranges/rbegin.h
+++ b/libcxx/include/__ranges/rbegin.h
@@ -17,8 +17,11 @@
#include <__iterator/readable_traits.h>
#include <__iterator/reverse_iterator.h>
#include <__ranges/access.h>
+#include <__type_traits/decay.h>
+#include <__type_traits/is_reference.h>
+#include <__type_traits/remove_cvref.h>
+#include <__type_traits/remove_reference.h>
#include <__utility/auto_cast.h>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/libcxx/include/__ranges/ref_view.h b/libcxx/include/__ranges/ref_view.h
index a7fa4f27c3d26..be32b8124202e 100644
--- a/libcxx/include/__ranges/ref_view.h
+++ b/libcxx/include/__ranges/ref_view.h
@@ -24,8 +24,9 @@
#include <__ranges/enable_borrowed_range.h>
#include <__ranges/size.h>
#include <__ranges/view_interface.h>
+#include <__type_traits/is_object.h>
+#include <__utility/declval.h>
#include <__utility/forward.h>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/libcxx/include/__ranges/rend.h b/libcxx/include/__ranges/rend.h
index 15770d10c45c3..7ee574ccfa674 100644
--- a/libcxx/include/__ranges/rend.h
+++ b/libcxx/include/__ranges/rend.h
@@ -18,8 +18,11 @@
#include <__iterator/reverse_iterator.h>
#include <__ranges/access.h>
#include <__ranges/rbegin.h>
+#include <__type_traits/decay.h>
+#include <__type_traits/is_reference.h>
+#include <__type_traits/remove_cvref.h>
+#include <__type_traits/remove_reference.h>
#include <__utility/auto_cast.h>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/libcxx/include/__ranges/reverse_view.h b/libcxx/include/__ranges/reverse_view.h
index fc49eeadff236..01d1b97b3ce28 100644
--- a/libcxx/include/__ranges/reverse_view.h
+++ b/libcxx/include/__ranges/reverse_view.h
@@ -24,9 +24,10 @@
#include <__ranges/size.h>
#include <__ranges/subrange.h>
#include <__ranges/view_interface.h>
+#include <__type_traits/conditional.h>
+#include <__type_traits/remove_cvref.h>
#include <__utility/forward.h>
#include <__utility/move.h>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/libcxx/include/__ranges/single_view.h b/libcxx/include/__ranges/single_view.h
index 7ea302a39b58f..ccab2c1664ac7 100644
--- a/libcxx/include/__ranges/single_view.h
+++ b/libcxx/include/__ranges/single_view.h
@@ -15,10 +15,12 @@
#include <__ranges/copyable_box.h>
#include <__ranges/range_adaptor.h>
#include <__ranges/view_interface.h>
+#include <__type_traits/decay.h>
+#include <__type_traits/is_object.h>
#include <__utility/forward.h>
#include <__utility/in_place.h>
#include <__utility/move.h>
-#include <type_traits>
+#include <cstddef>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/libcxx/include/__ranges/take_view.h b/libcxx/include/__ranges/take_view.h
index b8adedffa52ed..ec859e920ff17 100644
--- a/libcxx/include/__ranges/take_view.h
+++ b/libcxx/include/__ranges/take_view.h
@@ -34,11 +34,14 @@
#include <__ranges/size.h>
#include <__ranges/subrange.h>
#include <__ranges/view_interface.h>
+#include <__type_traits/decay.h>
+#include <__type_traits/is_nothrow_constructible.h>
#include <__type_traits/maybe_const.h>
+#include <__type_traits/remove_cvref.h>
#include <__utility/auto_cast.h>
#include <__utility/forward.h>
#include <__utility/move.h>
-#include <type_traits>
+#include <cstddef>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/libcxx/include/__ranges/transform_view.h b/libcxx/include/__ranges/transform_view.h
index 9394fce6fc6c7..a71350f0c99dc 100644
--- a/libcxx/include/__ranges/transform_view.h
+++ b/libcxx/include/__ranges/transform_view.h
@@ -35,7 +35,6 @@
#include <__utility/forward.h>
#include <__utility/in_place.h>
#include <__utility/move.h>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/libcxx/include/__ranges/zip_view.h b/libcxx/include/__ranges/zip_view.h
index b3cac719668c4..b2067f659e341 100644
--- a/libcxx/include/__ranges/zip_view.h
+++ b/libcxx/include/__ranges/zip_view.h
@@ -30,11 +30,11 @@
#include <__ranges/enable_borrowed_range.h>
#include <__ranges/size.h>
#include <__ranges/view_interface.h>
+#include <__utility/declval.h>
#include <__utility/forward.h>
#include <__utility/integer_sequence.h>
#include <__utility/move.h>
#include <tuple>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/libcxx/include/__split_buffer b/libcxx/include/__split_buffer
index 86daddbb74bee..c4f1315ee5bf2 100644
--- a/libcxx/include/__split_buffer
+++ b/libcxx/include/__split_buffer
@@ -23,9 +23,18 @@
#include <__memory/compressed_pair.h>
#include <__memory/pointer_traits.h>
#include <__memory/swap_allocator.h>
+#include <__type_traits/add_lvalue_reference.h>
+#include <__type_traits/enable_if.h>
+#include <__type_traits/integral_constant.h>
+#include <__type_traits/is_nothrow_default_constructible.h>
+#include <__type_traits/is_nothrow_move_assignable.h>
+#include <__type_traits/is_nothrow_move_constructible.h>
+#include <__type_traits/is_swappable.h>
+#include <__type_traits/is_trivially_destructible.h>
+#include <__type_traits/remove_reference.h>
#include <__utility/forward.h>
#include <__utility/move.h>
-#include <type_traits>
+#include <cstddef>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/libcxx/include/any b/libcxx/include/any
index 423628736b382..e44ec7a45b2d8 100644
--- a/libcxx/include/any
+++ b/libcxx/include/any
@@ -87,13 +87,25 @@ namespace std {
#include <__memory/allocator_destructor.h>
#include <__memory/allocator_traits.h>
#include <__memory/unique_ptr.h>
+#include <__type_traits/add_const.h>
+#include <__type_traits/add_pointer.h>
+#include <__type_traits/aligned_storage.h>
+#include <__type_traits/alignment_of.h>
+#include <__type_traits/conditional.h>
+#include <__type_traits/is_constructible.h>
+#include <__type_traits/is_function.h>
+#include <__type_traits/is_nothrow_move_constructible.h>
+#include <__type_traits/is_reference.h>
+#include <__type_traits/is_same.h>
+#include <__type_traits/remove_cv.h>
+#include <__type_traits/remove_cvref.h>
+#include <__type_traits/remove_reference.h>
#include <__utility/forward.h>
#include <__utility/in_place.h>
#include <__utility/move.h>
#include <__utility/unreachable.h>
#include <cstdlib>
#include <initializer_list>
-#include <type_traits>
#include <typeinfo>
#include <version>
@@ -706,6 +718,7 @@ _LIBCPP_END_NAMESPACE_STD
# include <iosfwd>
# include <iterator>
# include <memory>
+# include <type_traits>
# include <variant>
#endif
diff --git a/libcxx/include/array b/libcxx/include/array
index 2a8d0dbc598f0..218ad3dd186f5 100644
--- a/libcxx/include/array
+++ b/libcxx/include/array
@@ -116,11 +116,20 @@ template <size_t I, class T, size_t N> const T&& get(const array<T, N>&&) noexce
#include <__config>
#include <__iterator/reverse_iterator.h>
#include <__tuple_dir/sfinae_helpers.h>
+#include <__type_traits/conditional.h>
+#include <__type_traits/is_array.h>
+#include <__type_traits/is_const.h>
+#include <__type_traits/is_constructible.h>
+#include <__type_traits/is_move_constructible.h>
+#include <__type_traits/is_nothrow_constructible.h>
+#include <__type_traits/is_nothrow_move_constructible.h>
+#include <__type_traits/is_same.h>
+#include <__type_traits/is_swappable.h>
+#include <__type_traits/remove_cv.h>
#include <__utility/integer_sequence.h>
#include <__utility/move.h>
#include <__utility/unreachable.h>
#include <stdexcept>
-#include <type_traits>
#include <version>
// standard-mandated includes
@@ -536,6 +545,7 @@ _LIBCPP_END_NAMESPACE_STD
# include <algorithm>
# include <concepts>
# include <iterator>
+# include <type_traits>
# include <utility>
#endif
diff --git a/libcxx/include/bitset b/libcxx/include/bitset
index daf3d1ad2f733..ac866fa6e0c39 100644
--- a/libcxx/include/bitset
+++ b/libcxx/include/bitset
@@ -1154,6 +1154,7 @@ _LIBCPP_POP_MACROS
#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
# include <concepts>
+# include <type_traits>
#endif
#endif // _LIBCPP_BITSET
diff --git a/libcxx/include/charconv b/libcxx/include/charconv
index df444d7e7a289..899f0d6608b1e 100644
--- a/libcxx/include/charconv
+++ b/libcxx/include/charconv
@@ -80,13 +80,14 @@ namespace std {
#include <__debug>
#include <__errc>
#include <__memory/addressof.h>
+#include <__type_traits/is_unsigned.h>
#include <__type_traits/make_32_64_or_128_bit.h>
+#include <__type_traits/make_unsigned.h>
#include <__utility/unreachable.h>
#include <cmath> // for log2f
#include <cstdint>
#include <cstdlib>
#include <limits>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
@@ -832,6 +833,7 @@ _LIBCPP_POP_MACROS
# include <concepts>
# include <cstring>
# include <iosfwd>
+# include <type_traits>
#endif
#endif // _LIBCPP_CHARCONV
diff --git a/libcxx/include/complex b/libcxx/include/complex
index 5c07c1c7e91d7..26f189d8bc486 100644
--- a/libcxx/include/complex
+++ b/libcxx/include/complex
@@ -236,7 +236,6 @@ template<class T> complex<T> tanh (const complex<T>&);
#include <cmath>
#include <iosfwd>
#include <stdexcept>
-#include <type_traits>
#include <version>
#if !defined(_LIBCPP_HAS_NO_LOCALIZATION)
@@ -1565,4 +1564,8 @@ inline namespace literals
_LIBCPP_END_NAMESPACE_STD
+#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+# include <type_traits>
+#endif
+
#endif // _LIBCPP_COMPLEX
diff --git a/libcxx/include/deque b/libcxx/include/deque
index ed03f37cedabf..4ce261f2f8aa6 100644
--- a/libcxx/include/deque
+++ b/libcxx/include/deque
@@ -188,12 +188,13 @@ template <class T, class Allocator, class Predicate>
#include <__memory_resource/polymorphic_allocator.h>
#include <__split_buffer>
#include <__type_traits/is_allocator.h>
+#include <__type_traits/is_same.h>
+#include <__type_traits/type_identity.h>
#include <__utility/forward.h>
#include <__utility/move.h>
#include <__utility/swap.h>
#include <limits>
#include <stdexcept>
-#include <type_traits>
#include <version>
// standard-mandated includes
@@ -2456,6 +2457,7 @@ _LIBCPP_POP_MACROS
# include <functional>
# include <iosfwd>
# include <iterator>
+# include <type_traits>
# include <typeinfo>
#endif
diff --git a/libcxx/include/experimental/__memory b/libcxx/include/experimental/__memory
index b36f31eebb7c6..d7b031df502b9 100644
--- a/libcxx/include/experimental/__memory
+++ b/libcxx/include/experimental/__memory
@@ -12,9 +12,12 @@
#include <__memory/allocator_arg_t.h>
#include <__memory/uses_allocator.h>
+#include <__type_traits/conditional.h>
+#include <__type_traits/is_constructible.h>
+#include <__type_traits/is_convertible.h>
+#include <__type_traits/is_same.h>
#include <experimental/__config>
#include <experimental/utility> // for erased_type
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/libcxx/include/experimental/memory_resource b/libcxx/include/experimental/memory_resource
index f107f109203f0..f9edd3077f558 100644
--- a/libcxx/include/experimental/memory_resource
+++ b/libcxx/include/experimental/memory_resource
@@ -66,6 +66,7 @@ namespace pmr {
#include <__assert> // all public C++ headers provide the assertion handler
#include <__memory/allocator_traits.h>
+#include <__type_traits/aligned_storage.h>
#include <__utility/move.h>
#include <cstddef>
#include <cstdlib>
@@ -75,7 +76,6 @@ namespace pmr {
#include <new>
#include <stdexcept>
#include <tuple>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
@@ -437,6 +437,7 @@ _LIBCPP_POP_MACROS
# include <iterator>
# include <memory>
# include <ratio>
+# include <type_traits>
# include <variant>
#endif
diff --git a/libcxx/include/experimental/propagate_const b/libcxx/include/experimental/propagate_const
index feb85d4a9b381..3efec5db49213 100644
--- a/libcxx/include/experimental/propagate_const
+++ b/libcxx/include/experimental/propagate_const
@@ -110,11 +110,26 @@
#include <__assert> // all public C++ headers provide the assertion handler
#include <__functional/operations.h>
#include <__fwd/hash.h>
+#include <__type_traits/conditional.h>
+#include <__type_traits/decay.h>
+#include <__type_traits/enable_if.h>
+#include <__type_traits/is_array.h>
+#include <__type_traits/is_constructible.h>
+#include <__type_traits/is_convertible.h>
+#include <__type_traits/is_function.h>
+#include <__type_traits/is_pointer.h>
+#include <__type_traits/is_reference.h>
+#include <__type_traits/is_same.h>
+#include <__type_traits/is_swappable.h>
+#include <__type_traits/remove_cv.h>
+#include <__type_traits/remove_pointer.h>
+#include <__type_traits/remove_reference.h>
+#include <__utility/declval.h>
#include <__utility/forward.h>
#include <__utility/move.h>
#include <__utility/swap.h>
+#include <cstddef>
#include <experimental/__config>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
@@ -578,4 +593,9 @@ struct greater_equal<experimental::fundamentals_v2::propagate_const<_Tp>>
_LIBCPP_END_NAMESPACE_STD
#endif // _LIBCPP_STD_VER >= 14
+
+#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+# include <type_traits>
+#endif
+
#endif // _LIBCPP_EXPERIMENTAL_PROPAGATE_CONST
diff --git a/libcxx/include/ext/hash_map b/libcxx/include/ext/hash_map
index 3ad4b166865af..f7f53bc3801ec 100644
--- a/libcxx/include/ext/hash_map
+++ b/libcxx/include/ext/hash_map
@@ -208,7 +208,6 @@ template <class Key, class T, class Hash, class Pred, class Alloc>
#include <ext/__hash>
#include <functional>
#include <stdexcept>
-#include <type_traits>
#if defined(__DEPRECATED) && __DEPRECATED
#if defined(_LIBCPP_WARNING)
@@ -985,6 +984,7 @@ operator!=(const hash_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __x,
#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
# include <concepts>
# include <iterator>
+# include <type_traits>
#endif
#endif // _LIBCPP_HASH_MAP
diff --git a/libcxx/include/ext/hash_set b/libcxx/include/ext/hash_set
index dc8b786453842..9c678623ddd66 100644
--- a/libcxx/include/ext/hash_set
+++ b/libcxx/include/ext/hash_set
@@ -665,6 +665,7 @@ operator!=(const hash_multiset<_Value, _Hash, _Pred, _Alloc>& __x,
#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
# include <concepts>
# include <iterator>
+# include <type_traits>
#endif
#endif // _LIBCPP_HASH_SET
diff --git a/libcxx/include/forward_list b/libcxx/include/forward_list
index f5a6120089fd3..e487d17919fad 100644
--- a/libcxx/include/forward_list
+++ b/libcxx/include/forward_list
@@ -202,11 +202,18 @@ template <class T, class Allocator, class Predicate>
#include <__memory/swap_allocator.h>
#include <__memory/unique_ptr.h>
#include <__memory_resource/polymorphic_allocator.h>
+#include <__type_traits/conditional.h>
#include <__type_traits/is_allocator.h>
+#include <__type_traits/is_const.h>
+#include <__type_traits/is_nothrow_default_constructible.h>
+#include <__type_traits/is_nothrow_move_assignable.h>
+#include <__type_traits/is_nothrow_move_constructible.h>
+#include <__type_traits/is_pointer.h>
+#include <__type_traits/is_same.h>
+#include <__type_traits/type_identity.h>
#include <__utility/forward.h>
#include <__utility/move.h>
#include <limits>
-#include <type_traits>
#include <version>
// standard-mandated includes
@@ -1818,6 +1825,7 @@ _LIBCPP_POP_MACROS
# include <functional>
# include <iosfwd>
# include <iterator>
+# include <type_traits>
# include <typeinfo>
#endif
diff --git a/libcxx/include/functional b/libcxx/include/functional
index bb5db290f5a43..66860209b6a6a 100644
--- a/libcxx/include/functional
+++ b/libcxx/include/functional
@@ -545,7 +545,6 @@ POLICY: For non-variadic implementations, the number of arguments is limited
#include <__utility/forward.h>
#include <exception>
#include <memory> // TODO: find out why removing this breaks the modules build
-#include <type_traits>
#include <typeinfo>
#include <version>
@@ -556,6 +555,7 @@ POLICY: For non-variadic implementations, the number of arguments is limited
#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
# include <concepts>
# include <tuple>
+# include <type_traits>
# include <utility>
#endif
diff --git a/libcxx/include/future b/libcxx/include/future
index a82efeb84cef8..92999ce3dfc66 100644
--- a/libcxx/include/future
+++ b/libcxx/include/future
@@ -368,7 +368,11 @@ template <class R, class Alloc> struct uses_allocator<packaged_task<R>, Alloc>;
#include <__config>
#include <__memory/allocator_arg_t.h>
#include <__memory/allocator_destructor.h>
+#include <__memory/shared_ptr.h>
+#include <__memory/unique_ptr.h>
#include <__memory/uses_allocator.h>
+#include <__type_traits/aligned_storage.h>
+#include <__type_traits/alignment_of.h>
#include <__type_traits/strip_signature.h>
#include <__utility/auto_cast.h>
#include <__utility/forward.h>
diff --git a/libcxx/include/istream b/libcxx/include/istream
index 831d4ecaabe5f..1fb45fadf236a 100644
--- a/libcxx/include/istream
+++ b/libcxx/include/istream
@@ -161,6 +161,7 @@ template <class Stream, class T>
#include <__assert> // all public C++ headers provide the assertion handler
#include <__config>
#include <__iterator/istreambuf_iterator.h>
+#include <__utility/declval.h>
#include <__utility/forward.h>
#include <ostream>
#include <version>
diff --git a/libcxx/include/list b/libcxx/include/list
index 750ccf99d41fb..191f317341660 100644
--- a/libcxx/include/list
+++ b/libcxx/include/list
@@ -207,13 +207,19 @@ template <class T, class Allocator, class Predicate>
#include <__memory/swap_allocator.h>
#include <__memory/unique_ptr.h>
#include <__memory_resource/polymorphic_allocator.h>
+#include <__type_traits/conditional.h>
#include <__type_traits/is_allocator.h>
+#include <__type_traits/is_nothrow_default_constructible.h>
+#include <__type_traits/is_nothrow_move_assignable.h>
+#include <__type_traits/is_nothrow_move_constructible.h>
+#include <__type_traits/is_pointer.h>
+#include <__type_traits/is_same.h>
+#include <__type_traits/type_identity.h>
#include <__utility/forward.h>
#include <__utility/move.h>
#include <__utility/swap.h>
#include <cstring>
#include <limits>
-#include <type_traits>
#include <version>
// standard-mandated includes
@@ -2399,6 +2405,7 @@ _LIBCPP_POP_MACROS
# include <functional>
# include <iosfwd>
# include <iterator>
+# include <type_traits>
# include <typeinfo>
#endif
diff --git a/libcxx/include/locale b/libcxx/include/locale
index 0b64c68ebfac3..0f862b12ed286 100644
--- a/libcxx/include/locale
+++ b/libcxx/include/locale
@@ -202,6 +202,7 @@ template <class charT> class messages_byname;
#include <__iterator/ostreambuf_iterator.h>
#include <__locale>
#include <__memory/unique_ptr.h>
+#include <__type_traits/make_unsigned.h>
#include <cstdio>
#include <cstdlib>
#include <ctime>
diff --git a/libcxx/include/map b/libcxx/include/map
index b1ba562cab2e9..838c96cea8440 100644
--- a/libcxx/include/map
+++ b/libcxx/include/map
@@ -547,7 +547,6 @@ erase_if(multimap<Key, T, Compare, Allocator>& c, Predicate pred); // C++20
#include <__utility/piecewise_construct.h>
#include <__utility/swap.h>
#include <tuple>
-#include <type_traits>
#include <version>
// standard-mandated includes
@@ -2355,6 +2354,7 @@ _LIBCPP_END_NAMESPACE_STD
# include <concepts>
# include <functional>
# include <iterator>
+# include <type_traits>
# include <utility>
#endif
diff --git a/libcxx/include/optional b/libcxx/include/optional
index bbc8229c03316..abfd9eb9fc981 100644
--- a/libcxx/include/optional
+++ b/libcxx/include/optional
@@ -167,6 +167,13 @@ template<class T>
#include <__functional/unary_function.h>
#include <__memory/construct_at.h>
#include <__tuple_dir/sfinae_helpers.h>
+#include <__type_traits/is_trivially_copy_assignable.h>
+#include <__type_traits/is_trivially_copy_constructible.h>
+#include <__type_traits/is_trivially_destructible.h>
+#include <__type_traits/is_trivially_move_assignable.h>
+#include <__type_traits/is_trivially_move_constructible.h>
+#include <__type_traits/negation.h>
+#include <__utility/declval.h>
#include <__utility/forward.h>
#include <__utility/in_place.h>
#include <__utility/move.h>
@@ -174,7 +181,6 @@ template<class T>
#include <initializer_list>
#include <new>
#include <stdexcept>
-#include <type_traits>
#include <version>
// standard-mandated includes
@@ -1583,6 +1589,7 @@ _LIBCPP_END_NAMESPACE_STD
# include <memory>
# include <ratio>
# include <tuple>
+# include <type_traits>
# include <typeinfo>
# include <utility>
# include <variant>
diff --git a/libcxx/include/ostream b/libcxx/include/ostream
index d2e422b328fd4..7bd0ed378dc0e 100644
--- a/libcxx/include/ostream
+++ b/libcxx/include/ostream
@@ -167,6 +167,9 @@ basic_ostream<wchar_t, traits>& operator<<(basic_ostream<wchar_t, traits>&, cons
#include <__config>
#include <__memory/shared_ptr.h>
#include <__memory/unique_ptr.h>
+#include <__type_traits/conjunction.h>
+#include <__type_traits/void_t.h>
+#include <__utility/declval.h>
#include <bitset>
#include <ios>
#include <locale>
diff --git a/libcxx/include/queue b/libcxx/include/queue
index f3ca8a696311d..35cceb5168959 100644
--- a/libcxx/include/queue
+++ b/libcxx/include/queue
@@ -227,7 +227,6 @@ template <class T, class Container, class Compare>
#include <__memory/uses_allocator.h>
#include <__utility/forward.h>
#include <deque>
-#include <type_traits>
#include <vector>
#include <version>
@@ -965,6 +964,7 @@ _LIBCPP_END_NAMESPACE_STD
#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
# include <concepts>
# include <functional>
+# include <type_traits>
#endif
#endif // _LIBCPP_QUEUE
diff --git a/libcxx/include/ranges b/libcxx/include/ranges
index c804709339e0b..f9a94a136cfbe 100644
--- a/libcxx/include/ranges
+++ b/libcxx/include/ranges
@@ -377,7 +377,6 @@ namespace std {
#include <__ranges/view_interface.h>
#include <__ranges/views.h>
#include <__ranges/zip_view.h>
-#include <type_traits>
#include <version>
#if !defined(_LIBCPP_HAS_NO_LOCALIZATION)
@@ -399,4 +398,8 @@ namespace std {
# pragma GCC system_header
#endif
+#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+# include <type_traits>
+#endif
+
#endif // _LIBCPP_RANGES
diff --git a/libcxx/include/set b/libcxx/include/set
index 9bbb34cdcc912..289e35ae41bbc 100644
--- a/libcxx/include/set
+++ b/libcxx/include/set
@@ -1600,6 +1600,7 @@ _LIBCPP_END_NAMESPACE_STD
# include <concepts>
# include <functional>
# include <iterator>
+# include <type_traits>
#endif
#endif // _LIBCPP_SET
diff --git a/libcxx/include/span b/libcxx/include/span
index e961823565372..661ae0dbec20a 100644
--- a/libcxx/include/span
+++ b/libcxx/include/span
@@ -141,11 +141,13 @@ template<class R>
#include <__ranges/enable_borrowed_range.h>
#include <__ranges/enable_view.h>
#include <__ranges/size.h>
+#include <__type_traits/remove_cvref.h>
+#include <__type_traits/remove_reference.h>
+#include <__type_traits/type_identity.h>
#include <__utility/forward.h>
#include <array> // for array
#include <cstddef> // for byte
#include <limits>
-#include <type_traits> // for remove_cv, etc
#include <version>
// standard-mandated includes
@@ -595,6 +597,7 @@ _LIBCPP_POP_MACROS
# include <concepts>
# include <functional>
# include <iterator>
+# include <type_traits>
#endif
#endif // _LIBCPP_SPAN
diff --git a/libcxx/include/stack b/libcxx/include/stack
index 3ee40742549e6..318c9c71ce24d 100644
--- a/libcxx/include/stack
+++ b/libcxx/include/stack
@@ -102,9 +102,9 @@ template <class T, class Container>
#include <__config>
#include <__iterator/iterator_traits.h>
#include <__memory/uses_allocator.h>
+#include <__type_traits/is_same.h>
#include <__utility/forward.h>
#include <deque>
-#include <type_traits>
#include <version>
// standard-mandated includes
@@ -366,6 +366,7 @@ _LIBCPP_END_NAMESPACE_STD
#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
# include <concepts>
# include <functional>
+# include <type_traits>
#endif
#endif // _LIBCPP_STACK
diff --git a/libcxx/include/string b/libcxx/include/string
index 787064d454903..3217361d00f6a 100644
--- a/libcxx/include/string
+++ b/libcxx/include/string
@@ -561,7 +561,14 @@ basic_string<char32_t> operator "" s( const char32_t *str, size_t len );
#include <__string/char_traits.h>
#include <__string/extern_template_lists.h>
#include <__type_traits/is_allocator.h>
+#include <__type_traits/is_array.h>
+#include <__type_traits/is_nothrow_default_constructible.h>
+#include <__type_traits/is_nothrow_move_assignable.h>
+#include <__type_traits/is_same.h>
+#include <__type_traits/is_standard_layout.h>
+#include <__type_traits/is_trivial.h>
#include <__type_traits/noexcept_move_assign_container.h>
+#include <__type_traits/remove_cvref.h>
#include <__utility/auto_cast.h>
#include <__utility/move.h>
#include <__utility/swap.h>
@@ -574,7 +581,6 @@ basic_string<char32_t> operator "" s( const char32_t *str, size_t len );
#include <limits>
#include <stdexcept>
#include <string_view>
-#include <type_traits>
#include <version>
#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS
@@ -4625,6 +4631,7 @@ _LIBCPP_POP_MACROS
# include <functional>
# include <iterator>
# include <new>
+# include <type_traits>
# include <typeinfo>
# include <utility>
# include <vector>
diff --git a/libcxx/include/string_view b/libcxx/include/string_view
index 052e0981618b8..d5629b706d839 100644
--- a/libcxx/include/string_view
+++ b/libcxx/include/string_view
@@ -219,10 +219,16 @@ namespace std {
#include <__ranges/enable_view.h>
#include <__ranges/size.h>
#include <__string/char_traits.h>
+#include <__type_traits/is_array.h>
+#include <__type_traits/is_same.h>
+#include <__type_traits/is_standard_layout.h>
+#include <__type_traits/is_trivial.h>
+#include <__type_traits/remove_cvref.h>
+#include <__type_traits/remove_reference.h>
+#include <__type_traits/type_identity.h>
#include <iosfwd>
#include <limits>
#include <stdexcept>
-#include <type_traits>
#include <version>
// standard-mandated includes
@@ -1040,6 +1046,7 @@ _LIBCPP_POP_MACROS
# include <concepts>
# include <functional>
# include <iterator>
+# include <type_traits>
#endif
#endif // _LIBCPP_STRING_VIEW
diff --git a/libcxx/include/system_error b/libcxx/include/system_error
index 3d2b6815fca6b..8142aac05032e 100644
--- a/libcxx/include/system_error
+++ b/libcxx/include/system_error
@@ -152,7 +152,6 @@ template <> struct hash<std::error_condition>;
#include <__memory/addressof.h>
#include <stdexcept>
#include <string>
-#include <type_traits>
#include <version>
// standard-mandated includes
@@ -545,4 +544,8 @@ void __throw_system_error(int __ev, const char* __what_arg);
_LIBCPP_END_NAMESPACE_STD
+#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+# include <type_traits>
+#endif
+
#endif // _LIBCPP_SYSTEM_ERROR
diff --git a/libcxx/include/thread b/libcxx/include/thread
index 2d4229db2290f..db8a1e86251b3 100644
--- a/libcxx/include/thread
+++ b/libcxx/include/thread
@@ -96,7 +96,6 @@ void sleep_for(const chrono::duration<Rep, Period>& rel_time);
#include <iosfwd>
#include <system_error>
#include <tuple>
-#include <type_traits>
#include <version>
// standard-mandated includes
diff --git a/libcxx/include/typeinfo b/libcxx/include/typeinfo
index b3ba8c2c5600a..2558e1750a383 100644
--- a/libcxx/include/typeinfo
+++ b/libcxx/include/typeinfo
@@ -64,7 +64,6 @@ public:
#include <cstdint>
#include <cstdlib>
#include <exception>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
@@ -414,4 +413,8 @@ void __throw_bad_cast()
}
_LIBCPP_END_NAMESPACE_STD
+#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+# include <type_traits>
+#endif
+
#endif // __LIBCPP_TYPEINFO
diff --git a/libcxx/include/unordered_map b/libcxx/include/unordered_map
index 251a581277cb4..99d55d3bdd4da 100644
--- a/libcxx/include/unordered_map
+++ b/libcxx/include/unordered_map
@@ -2648,6 +2648,7 @@ _LIBCPP_END_NAMESPACE_STD
# include <bit>
# include <concepts>
# include <iterator>
+# include <type_traits>
#endif
#endif // _LIBCPP_UNORDERED_MAP
diff --git a/libcxx/include/unordered_set b/libcxx/include/unordered_set
index 1fdaf96b64b34..3d4a1f7466613 100644
--- a/libcxx/include/unordered_set
+++ b/libcxx/include/unordered_set
@@ -1819,6 +1819,7 @@ _LIBCPP_END_NAMESPACE_STD
# include <concepts>
# include <functional>
# include <iterator>
+# include <type_traits>
#endif
#endif // _LIBCPP_UNORDERED_SET
diff --git a/libcxx/include/variant b/libcxx/include/variant
index c5234692b4a38..0f4600eea49b1 100644
--- a/libcxx/include/variant
+++ b/libcxx/include/variant
@@ -231,6 +231,7 @@ namespace std {
#include <__type_traits/remove_const.h>
#include <__type_traits/type_identity.h>
#include <__type_traits/void_t.h>
+#include <__utility/declval.h>
#include <__utility/forward.h>
#include <__utility/in_place.h>
#include <__utility/move.h>
diff --git a/libcxx/include/vector b/libcxx/include/vector
index 619e25822a462..6c25e5de718a0 100644
--- a/libcxx/include/vector
+++ b/libcxx/include/vector
@@ -307,7 +307,10 @@ template<class T, class charT> requires is-vector-bool-reference<T> // Since C++
#include <__memory_resource/polymorphic_allocator.h>
#include <__split_buffer>
#include <__type_traits/is_allocator.h>
+#include <__type_traits/is_constructible.h>
+#include <__type_traits/is_nothrow_move_assignable.h>
#include <__type_traits/noexcept_move_assign_container.h>
+#include <__type_traits/type_identity.h>
#include <__utility/exception_guard.h>
#include <__utility/forward.h>
#include <__utility/move.h>
@@ -318,7 +321,6 @@ template<class T, class charT> requires is-vector-bool-reference<T> // Since C++
#include <iosfwd> // for forward declaration of vector
#include <limits>
#include <stdexcept>
-#include <type_traits>
#include <version>
// standard-mandated includes
@@ -3359,6 +3361,7 @@ _LIBCPP_POP_MACROS
# include <algorithm>
# include <atomic>
# include <concepts>
+# include <type_traits>
# include <typeinfo>
# include <utility>
#endif
diff --git a/libcxx/test/libcxx/containers/sequences/vector.bool/trivial_for_purposes_of_call.pass.cpp b/libcxx/test/libcxx/containers/sequences/vector.bool/trivial_for_purposes_of_call.pass.cpp
index d9d698fc7f708..d29b0f1a95abd 100644
--- a/libcxx/test/libcxx/containers/sequences/vector.bool/trivial_for_purposes_of_call.pass.cpp
+++ b/libcxx/test/libcxx/containers/sequences/vector.bool/trivial_for_purposes_of_call.pass.cpp
@@ -26,10 +26,9 @@
// UNSUPPORTED: c++03
-#include <vector>
#include <cassert>
-
-#include "test_macros.h"
+#include <type_traits>
+#include <vector>
template <class T>
using IsTrivialForCall = std::integral_constant<bool,
diff --git a/libcxx/test/libcxx/language.support/support.dynamic/new_faligned_allocation.pass.cpp b/libcxx/test/libcxx/language.support/support.dynamic/new_faligned_allocation.pass.cpp
index 8820e12b55e95..aecdcd6c787ae 100644
--- a/libcxx/test/libcxx/language.support/support.dynamic/new_faligned_allocation.pass.cpp
+++ b/libcxx/test/libcxx/language.support/support.dynamic/new_faligned_allocation.pass.cpp
@@ -21,10 +21,11 @@
// REQUIRES: -faligned-allocation
// ADDITIONAL_COMPILE_FLAGS: -faligned-allocation
+#include <cassert>
#include <new>
-#include <typeinfo>
#include <string>
-#include <cassert>
+#include <type_traits>
+#include <typeinfo>
#include "test_macros.h"
diff --git a/libcxx/test/libcxx/ranges/range.adaptors/range.join/segmented_iterator.compile.pass.cpp b/libcxx/test/libcxx/ranges/range.adaptors/range.join/segmented_iterator.compile.pass.cpp
index 509b0c89e7f10..82e8cab503a27 100644
--- a/libcxx/test/libcxx/ranges/range.adaptors/range.join/segmented_iterator.compile.pass.cpp
+++ b/libcxx/test/libcxx/ranges/range.adaptors/range.join/segmented_iterator.compile.pass.cpp
@@ -10,6 +10,7 @@
// UNSUPPORTED: !c++experimental
#include <ranges>
+#include <utility>
#include <vector>
using JoinView = decltype(std::views::join(std::declval<std::vector<std::vector<int>>&>()));
diff --git a/libcxx/test/libcxx/transitive_includes/cxx03.csv b/libcxx/test/libcxx/transitive_includes/cxx03.csv
index d88331baff437..3d5bf74856749 100644
--- a/libcxx/test/libcxx/transitive_includes/cxx03.csv
+++ b/libcxx/test/libcxx/transitive_includes/cxx03.csv
@@ -394,16 +394,24 @@ functional unordered_map
functional utility
functional vector
functional version
+future atomic
future chrono
future cstddef
+future cstdint
+future cstdlib
+future cstring
future exception
+future initializer_list
+future iosfwd
future limits
future mutex
future new
future ratio
+future stdexcept
future system_error
future thread
future type_traits
+future typeinfo
future version
initializer_list cstddef
iomanip istream
diff --git a/libcxx/test/libcxx/transitive_includes/cxx11.csv b/libcxx/test/libcxx/transitive_includes/cxx11.csv
index 439b64dfafe08..2e37a0d2e3efc 100644
--- a/libcxx/test/libcxx/transitive_includes/cxx11.csv
+++ b/libcxx/test/libcxx/transitive_includes/cxx11.csv
@@ -394,16 +394,24 @@ functional unordered_map
functional utility
functional vector
functional version
+future atomic
future chrono
future cstddef
+future cstdint
+future cstdlib
+future cstring
future exception
+future initializer_list
+future iosfwd
future limits
future mutex
future new
future ratio
+future stdexcept
future system_error
future thread
future type_traits
+future typeinfo
future version
initializer_list cstddef
iomanip istream
diff --git a/libcxx/test/libcxx/transitive_includes/cxx14.csv b/libcxx/test/libcxx/transitive_includes/cxx14.csv
index 57bc4743db787..f48296d6d11e7 100644
--- a/libcxx/test/libcxx/transitive_includes/cxx14.csv
+++ b/libcxx/test/libcxx/transitive_includes/cxx14.csv
@@ -396,16 +396,24 @@ functional unordered_map
functional utility
functional vector
functional version
+future atomic
future chrono
future cstddef
+future cstdint
+future cstdlib
+future cstring
future exception
+future initializer_list
+future iosfwd
future limits
future mutex
future new
future ratio
+future stdexcept
future system_error
future thread
future type_traits
+future typeinfo
future version
initializer_list cstddef
iomanip istream
diff --git a/libcxx/test/libcxx/transitive_includes/cxx17.csv b/libcxx/test/libcxx/transitive_includes/cxx17.csv
index 57bc4743db787..f48296d6d11e7 100644
--- a/libcxx/test/libcxx/transitive_includes/cxx17.csv
+++ b/libcxx/test/libcxx/transitive_includes/cxx17.csv
@@ -396,16 +396,24 @@ functional unordered_map
functional utility
functional vector
functional version
+future atomic
future chrono
future cstddef
+future cstdint
+future cstdlib
+future cstring
future exception
+future initializer_list
+future iosfwd
future limits
future mutex
future new
future ratio
+future stdexcept
future system_error
future thread
future type_traits
+future typeinfo
future version
initializer_list cstddef
iomanip istream
diff --git a/libcxx/test/libcxx/transitive_includes/cxx20.csv b/libcxx/test/libcxx/transitive_includes/cxx20.csv
index 8a439c9c283df..e048e1ba33ad0 100644
--- a/libcxx/test/libcxx/transitive_includes/cxx20.csv
+++ b/libcxx/test/libcxx/transitive_includes/cxx20.csv
@@ -403,15 +403,23 @@ functional unordered_map
functional utility
functional vector
functional version
+future atomic
future cstddef
+future cstdint
+future cstdlib
+future cstring
future exception
+future initializer_list
+future iosfwd
future limits
future mutex
future new
future ratio
+future stdexcept
future system_error
future thread
future type_traits
+future typeinfo
future version
initializer_list cstddef
iomanip istream
diff --git a/libcxx/test/libcxx/transitive_includes/cxx2b.csv b/libcxx/test/libcxx/transitive_includes/cxx2b.csv
index 427e173f42c1d..964892aa01a37 100644
--- a/libcxx/test/libcxx/transitive_includes/cxx2b.csv
+++ b/libcxx/test/libcxx/transitive_includes/cxx2b.csv
@@ -16,7 +16,6 @@ any initializer_list
any limits
any new
any stdexcept
-any type_traits
any typeinfo
any version
array compare
@@ -25,7 +24,6 @@ array cstdlib
array initializer_list
array limits
array stdexcept
-array type_traits
array version
atomic cstddef
atomic cstdint
@@ -60,7 +58,6 @@ bitset limits
bitset new
bitset stdexcept
bitset string
-bitset type_traits
bitset version
ccomplex complex
charconv cerrno
@@ -70,7 +67,6 @@ charconv cstdint
charconv cstdlib
charconv initializer_list
charconv limits
-charconv type_traits
chrono array
chrono charconv
chrono cmath
@@ -90,7 +86,6 @@ chrono stdexcept
chrono string
chrono string_view
chrono tuple
-chrono type_traits
chrono vector
chrono version
cinttypes cstdint
@@ -111,7 +106,6 @@ complex cmath
complex iosfwd
complex sstream
complex stdexcept
-complex type_traits
complex version
concepts cstddef
concepts version
@@ -150,7 +144,6 @@ deque limits
deque new
deque stdexcept
deque tuple
-deque type_traits
deque version
exception cstddef
exception cstdlib
@@ -180,9 +173,7 @@ experimental/memory_resource limits
experimental/memory_resource new
experimental/memory_resource stdexcept
experimental/memory_resource tuple
-experimental/memory_resource type_traits
experimental/propagate_const cstddef
-experimental/propagate_const type_traits
experimental/regex experimental/memory_resource
experimental/regex experimental/string
experimental/regex regex
@@ -213,7 +204,6 @@ ext/hash_map limits
ext/hash_map new
ext/hash_map stdexcept
ext/hash_map string
-ext/hash_map type_traits
ext/hash_set algorithm
ext/hash_set cmath
ext/hash_set cstddef
@@ -224,7 +214,6 @@ ext/hash_set initializer_list
ext/hash_set limits
ext/hash_set new
ext/hash_set string
-ext/hash_set type_traits
filesystem cerrno
filesystem compare
filesystem cstddef
@@ -240,7 +229,6 @@ filesystem ratio
filesystem string
filesystem string_view
filesystem system_error
-filesystem type_traits
filesystem version
format array
format charconv
@@ -270,7 +258,6 @@ forward_list limits
forward_list new
forward_list stdexcept
forward_list tuple
-forward_list type_traits
forward_list version
fstream cctype
fstream cstddef
@@ -300,19 +287,26 @@ functional memory
functional new
functional stdexcept
functional tuple
-functional type_traits
functional typeinfo
functional unordered_map
functional vector
functional version
+future atomic
future cstddef
+future cstdint
+future cstdlib
+future cstring
future exception
+future initializer_list
+future iosfwd
future limits
future mutex
future new
future ratio
+future stdexcept
future system_error
future thread
+future typeinfo
future version
initializer_list cstddef
iomanip istream
@@ -360,7 +354,6 @@ list limits
list new
list stdexcept
list tuple
-list type_traits
list version
locale cctype
locale cstddef
@@ -387,7 +380,6 @@ map new
map optional
map stdexcept
map tuple
-map type_traits
map version
memory atomic
memory compare
@@ -443,7 +435,6 @@ optional initializer_list
optional limits
optional new
optional stdexcept
-optional type_traits
optional version
ostream atomic
ostream bitset
@@ -467,7 +458,6 @@ queue cstdlib
queue deque
queue initializer_list
queue limits
-queue type_traits
queue vector
queue version
random cmath
@@ -479,7 +469,6 @@ random iosfwd
random limits
random numeric
random string
-random type_traits
random vector
random version
ranges compare
@@ -493,7 +482,6 @@ ranges new
ranges optional
ranges span
ranges tuple
-ranges type_traits
ranges variant
ranges version
ratio climits
@@ -534,7 +522,6 @@ set new
set optional
set stdexcept
set tuple
-set type_traits
set version
shared_mutex cstddef
shared_mutex ctime
@@ -549,7 +536,6 @@ span array
span cstddef
span initializer_list
span limits
-span type_traits
span version
sstream cstddef
sstream istream
@@ -560,7 +546,6 @@ stack compare
stack cstddef
stack deque
stack initializer_list
-stack type_traits
stack version
stdexcept cstdlib
stdexcept exception
@@ -584,7 +569,6 @@ string new
string stdexcept
string string_view
string tuple
-string type_traits
string version
string_view compare
string_view cstddef
@@ -597,7 +581,6 @@ string_view initializer_list
string_view iosfwd
string_view limits
string_view stdexcept
-string_view type_traits
string_view version
strstream istream
strstream ostream
@@ -610,7 +593,6 @@ system_error cstring
system_error limits
system_error stdexcept
system_error string
-system_error type_traits
system_error version
thread compare
thread cstddef
@@ -623,7 +605,6 @@ thread new
thread ratio
thread system_error
thread tuple
-thread type_traits
thread version
tuple compare
tuple cstddef
@@ -638,7 +619,6 @@ typeinfo cstddef
typeinfo cstdint
typeinfo cstdlib
typeinfo exception
-typeinfo type_traits
unordered_map cmath
unordered_map compare
unordered_map cstddef
@@ -651,7 +631,6 @@ unordered_map new
unordered_map optional
unordered_map stdexcept
unordered_map tuple
-unordered_map type_traits
unordered_map version
unordered_set cmath
unordered_set compare
@@ -665,7 +644,6 @@ unordered_set new
unordered_set optional
unordered_set stdexcept
unordered_set tuple
-unordered_set type_traits
unordered_set version
utility compare
utility cstddef
@@ -702,5 +680,4 @@ vector limits
vector new
vector stdexcept
vector tuple
-vector type_traits
vector version
diff --git a/libcxx/test/std/containers/sequences/array/array.special/swap.pass.cpp b/libcxx/test/std/containers/sequences/array/array.special/swap.pass.cpp
index 617641df35ee7..94974295dfc10 100644
--- a/libcxx/test/std/containers/sequences/array/array.special/swap.pass.cpp
+++ b/libcxx/test/std/containers/sequences/array/array.special/swap.pass.cpp
@@ -12,6 +12,7 @@
#include <array>
#include <cassert>
+#include <utility>
#include "test_macros.h"
diff --git a/libcxx/test/std/iterators/iterator.container/ssize.pass.cpp b/libcxx/test/std/iterators/iterator.container/ssize.pass.cpp
index 9f384c64ddf35..a424ebbf4a52a 100644
--- a/libcxx/test/std/iterators/iterator.container/ssize.pass.cpp
+++ b/libcxx/test/std/iterators/iterator.container/ssize.pass.cpp
@@ -13,14 +13,16 @@
// -> common_type_t<ptr
diff _t, make_signed_t<decltype(c.size())>>; // C++20
// template <class T, ptr
diff _t> constexpr ptr
diff _t ssize(const T (&array)[N]) noexcept; // C++20
-#include <iterator>
-#include <cassert>
-#include <vector>
#include <array>
-#include <list>
+#include <cassert>
+#include <cstdint>
#include <initializer_list>
-#include <string_view>
+#include <iterator>
#include <limits>
+#include <list>
+#include <string_view>
+#include <type_traits>
+#include <vector>
#include "test_macros.h"
diff --git a/libcxx/test/std/iterators/iterator.requirements/iterator.cust/iterator.cust.move/iter_move.pass.cpp b/libcxx/test/std/iterators/iterator.requirements/iterator.cust/iterator.cust.move/iter_move.pass.cpp
index 31ec0100e2eee..566638263e887 100644
--- a/libcxx/test/std/iterators/iterator.requirements/iterator.cust/iterator.cust.move/iter_move.pass.cpp
+++ b/libcxx/test/std/iterators/iterator.requirements/iterator.cust/iterator.cust.move/iter_move.pass.cpp
@@ -11,11 +11,11 @@
// template<class I>
// unspecified iter_move;
-#include <iterator>
-
-#include <array>
#include <algorithm>
+#include <array>
#include <cassert>
+#include <iterator>
+#include <type_traits>
#include <utility>
#include "../unqualified_lookup_wrapper.h"
diff --git a/libcxx/test/std/iterators/stream.iterators/istream.iterator/istream.iterator.cons/default.pass.cpp b/libcxx/test/std/iterators/stream.iterators/istream.iterator/istream.iterator.cons/default.pass.cpp
index 7273223a7dbc1..d8377f0f4c5c8 100644
--- a/libcxx/test/std/iterators/stream.iterators/istream.iterator/istream.iterator.cons/default.pass.cpp
+++ b/libcxx/test/std/iterators/stream.iterators/istream.iterator/istream.iterator.cons/default.pass.cpp
@@ -14,9 +14,10 @@
// C++17 says: If is_trivially_default_constructible_v<T> is true, then this
// constructor is a constexpr constructor.
-#include <iterator>
#include <cassert>
+#include <iterator>
#include <string>
+#include <type_traits>
#include "test_macros.h"
diff --git a/libcxx/test/std/numerics/rand/rand.dist/rand.dist.bern/rand.dist.bern.bin/eval.pass.cpp b/libcxx/test/std/numerics/rand/rand.dist/rand.dist.bern/rand.dist.bern.bin/eval.pass.cpp
index 2e8bfaebf3677..a9a1a8fda5dab 100644
--- a/libcxx/test/std/numerics/rand/rand.dist/rand.dist.bern/rand.dist.bern.bin/eval.pass.cpp
+++ b/libcxx/test/std/numerics/rand/rand.dist/rand.dist.bern/rand.dist.bern.bin/eval.pass.cpp
@@ -15,10 +15,12 @@
// template<class _URNG> result_type operator()(_URNG& g);
-#include <random>
+#include <cassert>
+#include <cstdint>
#include <numeric>
+#include <random>
+#include <type_traits>
#include <vector>
-#include <cassert>
#include "test_macros.h"
diff --git a/libcxx/test/std/numerics/rand/rand.dist/rand.dist.bern/rand.dist.bern.geo/eval.pass.cpp b/libcxx/test/std/numerics/rand/rand.dist/rand.dist.bern/rand.dist.bern.geo/eval.pass.cpp
index deccad1db6d5b..440334ed3488a 100644
--- a/libcxx/test/std/numerics/rand/rand.dist/rand.dist.bern/rand.dist.bern.geo/eval.pass.cpp
+++ b/libcxx/test/std/numerics/rand/rand.dist/rand.dist.bern/rand.dist.bern.geo/eval.pass.cpp
@@ -15,10 +15,11 @@
// template<class _URNG> result_type operator()(_URNG& g);
-#include <random>
+#include <cassert>
+#include <cstdint>
#include <numeric>
+#include <random>
#include <vector>
-#include <cassert>
#include "test_macros.h"
diff --git a/libcxx/test/std/numerics/rand/rand.dist/rand.dist.pois/rand.dist.pois.poisson/eval.pass.cpp b/libcxx/test/std/numerics/rand/rand.dist/rand.dist.pois/rand.dist.pois.poisson/eval.pass.cpp
index 6aef9b46e48cf..5feb2e5802291 100644
--- a/libcxx/test/std/numerics/rand/rand.dist/rand.dist.pois/rand.dist.pois.poisson/eval.pass.cpp
+++ b/libcxx/test/std/numerics/rand/rand.dist/rand.dist.pois/rand.dist.pois.poisson/eval.pass.cpp
@@ -15,13 +15,13 @@
// template<class _URNG> result_type operator()(_URNG& g);
-#include <random>
-
#include <cassert>
#include <cmath>
+#include <cstdint>
#include <limits>
-#include <vector>
#include <numeric>
+#include <random>
+#include <vector>
#include "test_macros.h"
diff --git a/libcxx/test/std/numerics/rand/rand.dist/rand.dist.samp/rand.dist.samp.discrete/eval.pass.cpp b/libcxx/test/std/numerics/rand/rand.dist/rand.dist.samp/rand.dist.samp.discrete/eval.pass.cpp
index d52e23e9dcd4a..4403c6cdbea6a 100644
--- a/libcxx/test/std/numerics/rand/rand.dist/rand.dist.samp/rand.dist.samp.discrete/eval.pass.cpp
+++ b/libcxx/test/std/numerics/rand/rand.dist/rand.dist.samp/rand.dist.samp.discrete/eval.pass.cpp
@@ -15,9 +15,10 @@
// template<class _URNG> result_type operator()(_URNG& g);
+#include <cassert>
+#include <cstdint>
#include <random>
#include <vector>
-#include <cassert>
#include "test_macros.h"
diff --git a/libcxx/test/std/numerics/rand/rand.dist/rand.dist.uni/rand.dist.uni.int/eval.pass.cpp b/libcxx/test/std/numerics/rand/rand.dist/rand.dist.uni/rand.dist.uni.int/eval.pass.cpp
index d636c4c955c36..15270cc2b8cd1 100644
--- a/libcxx/test/std/numerics/rand/rand.dist/rand.dist.uni/rand.dist.uni.int/eval.pass.cpp
+++ b/libcxx/test/std/numerics/rand/rand.dist/rand.dist.uni/rand.dist.uni.int/eval.pass.cpp
@@ -15,12 +15,13 @@
// template<class _URNG> result_type operator()(_URNG& g);
-#include <random>
#include <cassert>
#include <climits>
#include <cstddef>
+#include <cstdint>
#include <limits>
#include <numeric>
+#include <random>
#include <vector>
#include "test_macros.h"
diff --git a/libcxx/test/std/numerics/rand/rand.dist/rand.dist.uni/rand.dist.uni.int/int128.pass.cpp b/libcxx/test/std/numerics/rand/rand.dist/rand.dist.uni/rand.dist.uni.int/int128.pass.cpp
index 9b5220522b055..9d499dbe22cb5 100644
--- a/libcxx/test/std/numerics/rand/rand.dist/rand.dist.uni/rand.dist.uni.int/int128.pass.cpp
+++ b/libcxx/test/std/numerics/rand/rand.dist/rand.dist.uni/rand.dist.uni.int/int128.pass.cpp
@@ -15,10 +15,11 @@
// template<class _URNG> result_type operator()(_URNG& g);
-#include <random>
#include <cassert>
+#include <cstdint>
#include <limits>
+#include <random>
#include "test_macros.h"
diff --git a/libcxx/test/std/ranges/range.adaptors/range.as.rvalue/ctor.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.as.rvalue/ctor.pass.cpp
index 48321391dccb5..d9b14e4820abc 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.as.rvalue/ctor.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.as.rvalue/ctor.pass.cpp
@@ -12,6 +12,7 @@
#include <cassert>
#include <ranges>
+#include <type_traits>
#include <vector>
struct DefaultConstructibleView : std::ranges::view_base {
diff --git a/libcxx/test/std/ranges/range.adaptors/range.take/ctor.default.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.take/ctor.default.pass.cpp
index 33071a94ad49b..98fd1e02ed7e1 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.take/ctor.default.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.take/ctor.default.pass.cpp
@@ -10,8 +10,9 @@
// take_view() requires default_initializable<V> = default;
-#include <ranges>
#include <cassert>
+#include <ranges>
+#include <type_traits>
int buff[8] = {1, 2, 3, 4, 5, 6, 7, 8};
diff --git a/libcxx/test/std/ranges/range.factories/range.iota.view/ctor.value.pass.cpp b/libcxx/test/std/ranges/range.factories/range.iota.view/ctor.value.pass.cpp
index ac5a25b9766df..cda372e1b7a35 100644
--- a/libcxx/test/std/ranges/range.factories/range.iota.view/ctor.value.pass.cpp
+++ b/libcxx/test/std/ranges/range.factories/range.iota.view/ctor.value.pass.cpp
@@ -10,8 +10,9 @@
// constexpr explicit iota_view(W value);
-#include <ranges>
#include <cassert>
+#include <ranges>
+#include <type_traits>
#include "test_macros.h"
#include "types.h"
diff --git a/libcxx/test/std/ranges/range.factories/range.iota.view/iterator/ctor.value.pass.cpp b/libcxx/test/std/ranges/range.factories/range.iota.view/iterator/ctor.value.pass.cpp
index 5a71837b0948d..a84cb91f7e9b3 100644
--- a/libcxx/test/std/ranges/range.factories/range.iota.view/iterator/ctor.value.pass.cpp
+++ b/libcxx/test/std/ranges/range.factories/range.iota.view/iterator/ctor.value.pass.cpp
@@ -10,8 +10,9 @@
// constexpr explicit iterator(W value);
-#include <ranges>
#include <cassert>
+#include <ranges>
+#include <type_traits>
#include "test_macros.h"
#include "../types.h"
diff --git a/libcxx/test/std/ranges/range.factories/range.iota.view/iterator/decrement.pass.cpp b/libcxx/test/std/ranges/range.factories/range.iota.view/iterator/decrement.pass.cpp
index 45b5e1761d2c2..3b1613e62193f 100644
--- a/libcxx/test/std/ranges/range.factories/range.iota.view/iterator/decrement.pass.cpp
+++ b/libcxx/test/std/ranges/range.factories/range.iota.view/iterator/decrement.pass.cpp
@@ -11,8 +11,9 @@
// constexpr iterator& operator--() requires decrementable<W>;
// constexpr iterator operator--(int) requires decrementable<W>;
-#include <ranges>
#include <cassert>
+#include <ranges>
+#include <type_traits>
#include "test_macros.h"
#include "../types.h"
diff --git a/libcxx/test/std/ranges/range.factories/range.iota.view/iterator/increment.pass.cpp b/libcxx/test/std/ranges/range.factories/range.iota.view/iterator/increment.pass.cpp
index a979a2d42b301..d99e57f4b7aa1 100644
--- a/libcxx/test/std/ranges/range.factories/range.iota.view/iterator/increment.pass.cpp
+++ b/libcxx/test/std/ranges/range.factories/range.iota.view/iterator/increment.pass.cpp
@@ -12,8 +12,9 @@
// constexpr void operator++(int);
// constexpr iterator operator++(int) requires incrementable<W>;
-#include <ranges>
#include <cassert>
+#include <ranges>
+#include <type_traits>
#include "test_macros.h"
#include "../types.h"
diff --git a/libcxx/test/std/ranges/range.factories/range.iota.view/iterator/member_typedefs.compile.pass.cpp b/libcxx/test/std/ranges/range.factories/range.iota.view/iterator/member_typedefs.compile.pass.cpp
index e009bfcfb70e3..c2f7fd14042a8 100644
--- a/libcxx/test/std/ranges/range.factories/range.iota.view/iterator/member_typedefs.compile.pass.cpp
+++ b/libcxx/test/std/ranges/range.factories/range.iota.view/iterator/member_typedefs.compile.pass.cpp
@@ -13,6 +13,7 @@
#include <cassert>
#include <cstdint>
#include <ranges>
+#include <type_traits>
#include "test_macros.h"
#include "../types.h"
diff --git a/libcxx/test/std/ranges/range.factories/range.iota.view/iterator/minus.pass.cpp b/libcxx/test/std/ranges/range.factories/range.iota.view/iterator/minus.pass.cpp
index ff425baa3e359..705a744cb5978 100644
--- a/libcxx/test/std/ranges/range.factories/range.iota.view/iterator/minus.pass.cpp
+++ b/libcxx/test/std/ranges/range.factories/range.iota.view/iterator/minus.pass.cpp
@@ -16,6 +16,7 @@
#include <cassert>
#include <cstdint>
#include <ranges>
+#include <type_traits>
#include "test_macros.h"
#include "../types.h"
diff --git a/libcxx/test/std/ranges/range.factories/range.iota.view/iterator/minus_eq.pass.cpp b/libcxx/test/std/ranges/range.factories/range.iota.view/iterator/minus_eq.pass.cpp
index 6b169826d63f6..b46a34dbc8907 100644
--- a/libcxx/test/std/ranges/range.factories/range.iota.view/iterator/minus_eq.pass.cpp
+++ b/libcxx/test/std/ranges/range.factories/range.iota.view/iterator/minus_eq.pass.cpp
@@ -11,8 +11,9 @@
// constexpr iterator& operator-=(
diff erence_type n)
// requires advanceable<W>;
-#include <ranges>
#include <cassert>
+#include <ranges>
+#include <type_traits>
#include "test_macros.h"
#include "../types.h"
diff --git a/libcxx/test/std/ranges/range.factories/range.iota.view/iterator/plus.pass.cpp b/libcxx/test/std/ranges/range.factories/range.iota.view/iterator/plus.pass.cpp
index aaff730ee7d9e..b66dc78784217 100644
--- a/libcxx/test/std/ranges/range.factories/range.iota.view/iterator/plus.pass.cpp
+++ b/libcxx/test/std/ranges/range.factories/range.iota.view/iterator/plus.pass.cpp
@@ -13,8 +13,9 @@
// friend constexpr iterator operator+(
diff erence_type n, iterator i)
// requires advanceable<W>;
-#include <ranges>
#include <cassert>
+#include <ranges>
+#include <type_traits>
#include "test_macros.h"
#include "../types.h"
diff --git a/libcxx/test/std/ranges/range.factories/range.iota.view/iterator/plus_eq.pass.cpp b/libcxx/test/std/ranges/range.factories/range.iota.view/iterator/plus_eq.pass.cpp
index ded3c975e4196..fa9135d179958 100644
--- a/libcxx/test/std/ranges/range.factories/range.iota.view/iterator/plus_eq.pass.cpp
+++ b/libcxx/test/std/ranges/range.factories/range.iota.view/iterator/plus_eq.pass.cpp
@@ -11,8 +11,9 @@
// constexpr iterator& operator+=(
diff erence_type n)
// requires advanceable<W>;
-#include <ranges>
#include <cassert>
+#include <ranges>
+#include <type_traits>
#include "test_macros.h"
#include "../types.h"
diff --git a/libcxx/test/std/ranges/range.factories/range.iota.view/sentinel/ctor.value.pass.cpp b/libcxx/test/std/ranges/range.factories/range.iota.view/sentinel/ctor.value.pass.cpp
index c465345d5d506..a56369b046dc1 100644
--- a/libcxx/test/std/ranges/range.factories/range.iota.view/sentinel/ctor.value.pass.cpp
+++ b/libcxx/test/std/ranges/range.factories/range.iota.view/sentinel/ctor.value.pass.cpp
@@ -10,8 +10,9 @@
// constexpr explicit sentinel(Bound bound);
-#include <ranges>
#include <cassert>
+#include <ranges>
+#include <type_traits>
#include "test_macros.h"
#include "../types.h"
diff --git a/libcxx/test/std/ranges/range.factories/range.iota.view/views_iota.pass.cpp b/libcxx/test/std/ranges/range.factories/range.iota.view/views_iota.pass.cpp
index d7310cc252e8a..a6b268fd6a8d8 100644
--- a/libcxx/test/std/ranges/range.factories/range.iota.view/views_iota.pass.cpp
+++ b/libcxx/test/std/ranges/range.factories/range.iota.view/views_iota.pass.cpp
@@ -10,9 +10,10 @@
// views::iota
-#include <ranges>
#include <cassert>
#include <concepts>
+#include <ranges>
+#include <type_traits>
#include "test_macros.h"
#include "types.h"
diff --git a/libcxx/test/std/strings/basic.string.literals/noexcept.compile.pass.cpp b/libcxx/test/std/strings/basic.string.literals/noexcept.compile.pass.cpp
index 7f040e58269a3..8e2cae74f3e02 100644
--- a/libcxx/test/std/strings/basic.string.literals/noexcept.compile.pass.cpp
+++ b/libcxx/test/std/strings/basic.string.literals/noexcept.compile.pass.cpp
@@ -9,6 +9,7 @@
// UNSUPPORTED: c++03, c++11
#include <string>
+#include <utility>
#include "test_macros.h"
diff --git a/libcxx/test/std/strings/string.view/string.view.io/stream_insert_decl_present.compile.pass.cpp b/libcxx/test/std/strings/string.view/string.view.io/stream_insert_decl_present.compile.pass.cpp
index 42a83f8637cb0..9698ba514069b 100644
--- a/libcxx/test/std/strings/string.view/string.view.io/stream_insert_decl_present.compile.pass.cpp
+++ b/libcxx/test/std/strings/string.view/string.view.io/stream_insert_decl_present.compile.pass.cpp
@@ -15,8 +15,9 @@
// operator<<(basic_ostream<charT, traits>& os,
// const basic_string_view<charT,traits> str);
-#include <string_view>
#include <iosfwd>
+#include <string_view>
+#include <utility>
template <class SV, class = void>
struct HasDecl : std::false_type {};
diff --git a/libcxx/test/std/utilities/charconv/charconv.syn/chars_format.pass.cpp b/libcxx/test/std/utilities/charconv/charconv.syn/chars_format.pass.cpp
index beee526422765..85b78c4db51b1 100644
--- a/libcxx/test/std/utilities/charconv/charconv.syn/chars_format.pass.cpp
+++ b/libcxx/test/std/utilities/charconv/charconv.syn/chars_format.pass.cpp
@@ -18,8 +18,9 @@
// general = fixed | scientific
// };
-#include <charconv>
#include <cassert>
+#include <charconv>
+#include <type_traits>
#include "test_macros.h"
diff --git a/libcxx/test/std/utilities/template.bitset/bitset.cons/string_ctor.pass.cpp b/libcxx/test/std/utilities/template.bitset/bitset.cons/string_ctor.pass.cpp
index 327765b71a06c..522b9678d52db 100644
--- a/libcxx/test/std/utilities/template.bitset/bitset.cons/string_ctor.pass.cpp
+++ b/libcxx/test/std/utilities/template.bitset/bitset.cons/string_ctor.pass.cpp
@@ -8,11 +8,12 @@
// bitset(string, pos, n, zero, one); // constexpr since C++23
-#include <bitset>
#include <algorithm> // for 'min' and 'max'
+#include <bitset>
#include <cassert>
#include <stdexcept> // for 'invalid_argument'
#include <string>
+#include <type_traits>
#include "test_macros.h"
diff --git a/libcxx/test/support/filesystem_test_helper.h b/libcxx/test/support/filesystem_test_helper.h
index 98429aaf003d8..4a352c7b6ac76 100644
--- a/libcxx/test/support/filesystem_test_helper.h
+++ b/libcxx/test/support/filesystem_test_helper.h
@@ -19,6 +19,7 @@
#include <cstdio> // for printf
#include <string>
#include <system_error>
+#include <type_traits>
#include <vector>
#include "assert_macros.h"
diff --git a/libcxxabi/src/demangle/ItaniumDemangle.h b/libcxxabi/src/demangle/ItaniumDemangle.h
index 66213c63f2f85..f71f61f316b4b 100644
--- a/libcxxabi/src/demangle/ItaniumDemangle.h
+++ b/libcxxabi/src/demangle/ItaniumDemangle.h
@@ -27,6 +27,7 @@
#include <cstring>
#include <limits>
#include <new>
+#include <type_traits>
#include <utility>
DEMANGLE_NAMESPACE_BEGIN
More information about the libcxx-commits
mailing list