[libc++] Granularize <type_traits> includes in <compare>
Reviewed By: Mordante, #libc
Spies: libcxx-commits
Differential Revision: https://reviews.llvm.org/D140480
NOKEYCHECK=True
GitOrigin-RevId: e0a66116fcccd59d12485810f5311efafa134ea5
diff --git a/include/__algorithm/copy.h b/include/__algorithm/copy.h
index d6a46f6..ed30049 100644
--- a/include/__algorithm/copy.h
+++ b/include/__algorithm/copy.h
@@ -14,10 +14,15 @@
#include <__config>
#include <__iterator/iterator_traits.h>
#include <__iterator/reverse_iterator.h>
+#include <__type_traits/enable_if.h>
+#include <__type_traits/is_copy_constructible.h>
+#include <__type_traits/is_same.h>
+#include <__type_traits/is_trivially_copy_assignable.h>
+#include <__type_traits/is_trivially_copyable.h>
+#include <__type_traits/remove_const.h>
#include <__utility/move.h>
#include <__utility/pair.h>
#include <cstring>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/include/__algorithm/iterator_operations.h b/include/__algorithm/iterator_operations.h
index bfe82c2..bd3e6f1 100644
--- a/include/__algorithm/iterator_operations.h
+++ b/include/__algorithm/iterator_operations.h
@@ -21,10 +21,13 @@
#include <__iterator/next.h>
#include <__iterator/prev.h>
#include <__iterator/readable_traits.h>
+#include <__type_traits/enable_if.h>
+#include <__type_traits/is_reference.h>
+#include <__type_traits/is_same.h>
+#include <__type_traits/remove_cvref.h>
#include <__utility/declval.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/include/__algorithm/move.h b/include/__algorithm/move.h
index e2f8b22..2109f9a 100644
--- a/include/__algorithm/move.h
+++ b/include/__algorithm/move.h
@@ -14,10 +14,14 @@
#include <__config>
#include <__iterator/iterator_traits.h>
#include <__iterator/reverse_iterator.h>
+#include <__type_traits/is_constant_evaluated.h>
+#include <__type_traits/is_copy_constructible.h>
+#include <__type_traits/is_trivially_copyable.h>
+#include <__type_traits/is_trivially_move_assignable.h>
+#include <__type_traits/remove_const.h>
#include <__utility/move.h>
#include <__utility/pair.h>
#include <cstring>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/include/__algorithm/ranges_iterator_concept.h b/include/__algorithm/ranges_iterator_concept.h
index c2a508d..3ac6b31 100644
--- a/include/__algorithm/ranges_iterator_concept.h
+++ b/include/__algorithm/ranges_iterator_concept.h
@@ -12,7 +12,7 @@
#include <__config>
#include <__iterator/concepts.h>
#include <__iterator/iterator_traits.h>
-#include <type_traits>
+#include <__type_traits/remove_cvref.h>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/include/__algorithm/unwrap_iter.h b/include/__algorithm/unwrap_iter.h
index 07d8d23..0f661e1 100644
--- a/include/__algorithm/unwrap_iter.h
+++ b/include/__algorithm/unwrap_iter.h
@@ -12,8 +12,10 @@
#include <__config>
#include <__iterator/iterator_traits.h>
#include <__memory/pointer_traits.h>
+#include <__type_traits/enable_if.h>
+#include <__type_traits/is_copy_constructible.h>
+#include <__utility/declval.h>
#include <__utility/move.h>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/include/__bit/bit_cast.h b/include/__bit/bit_cast.h
index 8312076..2ca4120 100644
--- a/include/__bit/bit_cast.h
+++ b/include/__bit/bit_cast.h
@@ -11,7 +11,7 @@
#define _LIBCPP___BIT_BIT_CAST_H
#include <__config>
-#include <type_traits>
+#include <__type_traits/is_trivially_copyable.h>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/include/__compare/compare_partial_order_fallback.h b/include/__compare/compare_partial_order_fallback.h
index ba746d6..06f03fe 100644
--- a/include/__compare/compare_partial_order_fallback.h
+++ b/include/__compare/compare_partial_order_fallback.h
@@ -12,9 +12,10 @@
#include <__compare/ordering.h>
#include <__compare/partial_order.h>
#include <__config>
+#include <__type_traits/decay.h>
+#include <__type_traits/is_same.h>
#include <__utility/forward.h>
#include <__utility/priority_tag.h>
-#include <type_traits>
#ifndef _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER
# pragma GCC system_header
diff --git a/include/__compare/compare_strong_order_fallback.h b/include/__compare/compare_strong_order_fallback.h
index 312a08e..8693868 100644
--- a/include/__compare/compare_strong_order_fallback.h
+++ b/include/__compare/compare_strong_order_fallback.h
@@ -12,9 +12,10 @@
#include <__compare/ordering.h>
#include <__compare/strong_order.h>
#include <__config>
+#include <__type_traits/decay.h>
+#include <__type_traits/is_same.h>
#include <__utility/forward.h>
#include <__utility/priority_tag.h>
-#include <type_traits>
#ifndef _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER
# pragma GCC system_header
diff --git a/include/__compare/compare_three_way_result.h b/include/__compare/compare_three_way_result.h
index 3047f5b..e668cdb 100644
--- a/include/__compare/compare_three_way_result.h
+++ b/include/__compare/compare_three_way_result.h
@@ -11,7 +11,7 @@
#include <__config>
#include <__type_traits/make_const_lvalue_ref.h>
-#include <type_traits>
+#include <__utility/declval.h>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/include/__compare/compare_weak_order_fallback.h b/include/__compare/compare_weak_order_fallback.h
index 844d676..f434dcb 100644
--- a/include/__compare/compare_weak_order_fallback.h
+++ b/include/__compare/compare_weak_order_fallback.h
@@ -12,9 +12,10 @@
#include <__compare/ordering.h>
#include <__compare/weak_order.h>
#include <__config>
+#include <__type_traits/decay.h>
+#include <__type_traits/is_same.h>
#include <__utility/forward.h>
#include <__utility/priority_tag.h>
-#include <type_traits>
#ifndef _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER
# pragma GCC system_header
diff --git a/include/__compare/partial_order.h b/include/__compare/partial_order.h
index 970f01b..a787bde 100644
--- a/include/__compare/partial_order.h
+++ b/include/__compare/partial_order.h
@@ -13,9 +13,10 @@
#include <__compare/ordering.h>
#include <__compare/weak_order.h>
#include <__config>
+#include <__type_traits/decay.h>
+#include <__type_traits/is_same.h>
#include <__utility/forward.h>
#include <__utility/priority_tag.h>
-#include <type_traits>
#ifndef _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER
# pragma GCC system_header
diff --git a/include/__compare/strong_order.h b/include/__compare/strong_order.h
index 67c7b29..8686691 100644
--- a/include/__compare/strong_order.h
+++ b/include/__compare/strong_order.h
@@ -13,12 +13,13 @@
#include <__compare/compare_three_way.h>
#include <__compare/ordering.h>
#include <__config>
+#include <__type_traits/conditional.h>
+#include <__type_traits/decay.h>
#include <__utility/forward.h>
#include <__utility/priority_tag.h>
#include <cmath>
#include <cstdint>
#include <limits>
-#include <type_traits>
#ifndef _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER
# pragma GCC system_header
diff --git a/include/__compare/weak_order.h b/include/__compare/weak_order.h
index c2fae1a..9d5819d 100644
--- a/include/__compare/weak_order.h
+++ b/include/__compare/weak_order.h
@@ -13,10 +13,10 @@
#include <__compare/ordering.h>
#include <__compare/strong_order.h>
#include <__config>
+#include <__type_traits/decay.h>
#include <__utility/forward.h>
#include <__utility/priority_tag.h>
#include <cmath>
-#include <type_traits>
#ifndef _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER
# pragma GCC system_header
diff --git a/include/__functional/hash.h b/include/__functional/hash.h
index 64412fc..6a6d6e7 100644
--- a/include/__functional/hash.h
+++ b/include/__functional/hash.h
@@ -10,9 +10,15 @@
#define _LIBCPP___FUNCTIONAL_HASH_H
#include <__config>
+#include <__functional/invoke.h>
#include <__functional/unary_function.h>
#include <__fwd/hash.h>
#include <__tuple_dir/sfinae_helpers.h>
+#include <__type_traits/is_copy_constructible.h>
+#include <__type_traits/is_default_constructible.h>
+#include <__type_traits/is_enum.h>
+#include <__type_traits/is_move_constructible.h>
+#include <__type_traits/underlying_type.h>
#include <__utility/forward.h>
#include <__utility/move.h>
#include <__utility/pair.h>
@@ -21,7 +27,6 @@
#include <cstdint>
#include <cstring>
#include <limits>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/include/__functional/reference_wrapper.h b/include/__functional/reference_wrapper.h
index 6659825..481fe29 100644
--- a/include/__functional/reference_wrapper.h
+++ b/include/__functional/reference_wrapper.h
@@ -11,10 +11,13 @@
#define _LIBCPP___FUNCTIONAL_REFERENCE_WRAPPER_H
#include <__config>
+#include <__functional/invoke.h>
#include <__functional/weak_result_type.h>
#include <__memory/addressof.h>
+#include <__type_traits/enable_if.h>
+#include <__type_traits/remove_cvref.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/include/__functional/weak_result_type.h b/include/__functional/weak_result_type.h
index 96d8cf7..6bfcbbf 100644
--- a/include/__functional/weak_result_type.h
+++ b/include/__functional/weak_result_type.h
@@ -12,8 +12,11 @@
#include <__config>
#include <__functional/binary_function.h>
+#include <__functional/invoke.h>
#include <__functional/unary_function.h>
-#include <type_traits>
+#include <__type_traits/integral_constant.h>
+#include <__type_traits/is_same.h>
+#include <__utility/declval.h>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/include/__iterator/advance.h b/include/__iterator/advance.h
index cd6353e..2f6a72e 100644
--- a/include/__iterator/advance.h
+++ b/include/__iterator/advance.h
@@ -17,12 +17,14 @@
#include <__iterator/concepts.h>
#include <__iterator/incrementable_traits.h>
#include <__iterator/iterator_traits.h>
+#include <__type_traits/enable_if.h>
+#include <__type_traits/is_integral.h>
#include <__utility/convert_to_integral.h>
+#include <__utility/declval.h>
#include <__utility/move.h>
#include <__utility/unreachable.h>
#include <cstdlib>
#include <limits>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/include/__iterator/concepts.h b/include/__iterator/concepts.h
index 246f84c..d9d40a4 100644
--- a/include/__iterator/concepts.h
+++ b/include/__iterator/concepts.h
@@ -26,13 +26,19 @@
#include <__concepts/semiregular.h>
#include <__concepts/totally_ordered.h>
#include <__config>
+#include <__functional/invoke.h>
#include <__iterator/incrementable_traits.h>
#include <__iterator/iter_move.h>
#include <__iterator/iterator_traits.h>
#include <__iterator/readable_traits.h>
#include <__memory/pointer_traits.h>
+#include <__type_traits/add_pointer.h>
+#include <__type_traits/common_reference.h>
+#include <__type_traits/is_pointer.h>
+#include <__type_traits/is_reference.h>
+#include <__type_traits/remove_cv.h>
+#include <__type_traits/remove_cvref.h>
#include <__utility/forward.h>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/include/__iterator/distance.h b/include/__iterator/distance.h
index 32e4133..681e20d 100644
--- a/include/__iterator/distance.h
+++ b/include/__iterator/distance.h
@@ -17,7 +17,8 @@
#include <__ranges/access.h>
#include <__ranges/concepts.h>
#include <__ranges/size.h>
-#include <type_traits>
+#include <__type_traits/decay.h>
+#include <__type_traits/remove_cvref.h>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/include/__iterator/incrementable_traits.h b/include/__iterator/incrementable_traits.h
index 6f966ec..eb1b246 100644
--- a/include/__iterator/incrementable_traits.h
+++ b/include/__iterator/incrementable_traits.h
@@ -12,9 +12,13 @@
#include <__concepts/arithmetic.h>
#include <__config>
+#include <__type_traits/conditional.h>
+#include <__type_traits/is_object.h>
#include <__type_traits/is_primary_template.h>
+#include <__type_traits/make_signed.h>
+#include <__type_traits/remove_cvref.h>
+#include <__utility/declval.h>
#include <cstddef>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/include/__iterator/iter_move.h b/include/__iterator/iter_move.h
index d8240ab..0d611bb 100644
--- a/include/__iterator/iter_move.h
+++ b/include/__iterator/iter_move.h
@@ -13,9 +13,11 @@
#include <__concepts/class_or_enum.h>
#include <__config>
#include <__iterator/iterator_traits.h>
+#include <__type_traits/is_reference.h>
+#include <__type_traits/remove_cvref.h>
+#include <__utility/declval.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/include/__iterator/iter_swap.h b/include/__iterator/iter_swap.h
index 78152e2..e5e22dd 100644
--- a/include/__iterator/iter_swap.h
+++ b/include/__iterator/iter_swap.h
@@ -17,9 +17,10 @@
#include <__iterator/iter_move.h>
#include <__iterator/iterator_traits.h>
#include <__iterator/readable_traits.h>
+#include <__type_traits/remove_cvref.h>
+#include <__utility/declval.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/include/__iterator/iterator_traits.h b/include/__iterator/iterator_traits.h
index b4cf072..ebb7fdc 100644
--- a/include/__iterator/iterator_traits.h
+++ b/include/__iterator/iterator_traits.h
@@ -21,8 +21,21 @@
#include <__fwd/pair.h>
#include <__iterator/incrementable_traits.h>
#include <__iterator/readable_traits.h>
+#include <__type_traits/add_const.h>
+#include <__type_traits/common_reference.h>
+#include <__type_traits/conditional.h>
+#include <__type_traits/disjunction.h>
+#include <__type_traits/is_convertible.h>
+#include <__type_traits/is_object.h>
+#include <__type_traits/is_primary_template.h>
+#include <__type_traits/is_reference.h>
+#include <__type_traits/is_valid_expansion.h>
+#include <__type_traits/remove_const.h>
+#include <__type_traits/remove_cv.h>
+#include <__type_traits/remove_cvref.h>
+#include <__type_traits/void_t.h>
+#include <__utility/declval.h>
#include <cstddef>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/include/__iterator/next.h b/include/__iterator/next.h
index bdaaa83..49970ae 100644
--- a/include/__iterator/next.h
+++ b/include/__iterator/next.h
@@ -16,7 +16,7 @@
#include <__iterator/concepts.h>
#include <__iterator/incrementable_traits.h>
#include <__iterator/iterator_traits.h>
-#include <type_traits>
+#include <__type_traits/enable_if.h>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/include/__iterator/prev.h b/include/__iterator/prev.h
index 8955abc..af1e1ba 100644
--- a/include/__iterator/prev.h
+++ b/include/__iterator/prev.h
@@ -16,7 +16,7 @@
#include <__iterator/concepts.h>
#include <__iterator/incrementable_traits.h>
#include <__iterator/iterator_traits.h>
-#include <type_traits>
+#include <__type_traits/enable_if.h>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/include/__iterator/readable_traits.h b/include/__iterator/readable_traits.h
index dc818d8..8f17757 100644
--- a/include/__iterator/readable_traits.h
+++ b/include/__iterator/readable_traits.h
@@ -12,7 +12,13 @@
#include <__concepts/same_as.h>
#include <__config>
-#include <type_traits>
+#include <__type_traits/conditional.h>
+#include <__type_traits/is_array.h>
+#include <__type_traits/is_object.h>
+#include <__type_traits/is_primary_template.h>
+#include <__type_traits/remove_cv.h>
+#include <__type_traits/remove_cvref.h>
+#include <__type_traits/remove_extent.h>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/include/__iterator/reverse_iterator.h b/include/__iterator/reverse_iterator.h
index 2933a29..299b971 100644
--- a/include/__iterator/reverse_iterator.h
+++ b/include/__iterator/reverse_iterator.h
@@ -29,8 +29,15 @@
#include <__ranges/access.h>
#include <__ranges/concepts.h>
#include <__ranges/subrange.h>
+#include <__type_traits/conditional.h>
+#include <__type_traits/enable_if.h>
+#include <__type_traits/is_assignable.h>
+#include <__type_traits/is_convertible.h>
+#include <__type_traits/is_nothrow_copy_constructible.h>
+#include <__type_traits/is_pointer.h>
+#include <__type_traits/is_same.h>
+#include <__utility/declval.h>
#include <__utility/move.h>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/include/__memory/allocator.h b/include/__memory/allocator.h
index 7a93095..54c9b78 100644
--- a/include/__memory/allocator.h
+++ b/include/__memory/allocator.h
@@ -13,11 +13,14 @@
#include <__config>
#include <__memory/allocate_at_least.h>
#include <__memory/allocator_traits.h>
+#include <__type_traits/is_constant_evaluated.h>
+#include <__type_traits/is_same.h>
+#include <__type_traits/is_void.h>
+#include <__type_traits/is_volatile.h>
#include <__utility/forward.h>
#include <cstddef>
#include <new>
#include <stdexcept>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/include/__memory/allocator_arg_t.h b/include/__memory/allocator_arg_t.h
index 44df046..15f8c98 100644
--- a/include/__memory/allocator_arg_t.h
+++ b/include/__memory/allocator_arg_t.h
@@ -12,8 +12,10 @@
#include <__config>
#include <__memory/uses_allocator.h>
+#include <__type_traits/integral_constant.h>
+#include <__type_traits/is_constructible.h>
+#include <__type_traits/remove_cvref.h>
#include <__utility/forward.h>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/include/__memory/allocator_traits.h b/include/__memory/allocator_traits.h
index 6acc14a..348d16c 100644
--- a/include/__memory/allocator_traits.h
+++ b/include/__memory/allocator_traits.h
@@ -13,9 +13,16 @@
#include <__config>
#include <__memory/construct_at.h>
#include <__memory/pointer_traits.h>
+#include <__type_traits/enable_if.h>
+#include <__type_traits/is_copy_constructible.h>
+#include <__type_traits/is_empty.h>
+#include <__type_traits/is_move_constructible.h>
+#include <__type_traits/make_unsigned.h>
+#include <__type_traits/remove_reference.h>
+#include <__type_traits/void_t.h>
+#include <__utility/declval.h>
#include <__utility/forward.h>
#include <limits>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/include/__memory/assume_aligned.h b/include/__memory/assume_aligned.h
index 0f12fb1..a1fd244 100644
--- a/include/__memory/assume_aligned.h
+++ b/include/__memory/assume_aligned.h
@@ -12,9 +12,9 @@
#include <__assert>
#include <__config>
+#include <__type_traits/is_constant_evaluated.h>
#include <cstddef>
#include <cstdint>
-#include <type_traits> // for is_constant_evaluated()
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/include/__memory/compressed_pair.h b/include/__memory/compressed_pair.h
index 6f747e7..8093d7c 100644
--- a/include/__memory/compressed_pair.h
+++ b/include/__memory/compressed_pair.h
@@ -14,11 +14,18 @@
#include <__fwd/get.h>
#include <__fwd/tuple.h>
#include <__tuple_dir/tuple_indices.h>
+#include <__type_traits/decay.h>
#include <__type_traits/dependent_type.h>
+#include <__type_traits/enable_if.h>
+#include <__type_traits/is_default_constructible.h>
+#include <__type_traits/is_empty.h>
+#include <__type_traits/is_final.h>
+#include <__type_traits/is_same.h>
+#include <__type_traits/is_swappable.h>
#include <__utility/forward.h>
#include <__utility/move.h>
#include <__utility/piecewise_construct.h>
-#include <type_traits>
+#include <cstddef>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/include/__memory/concepts.h b/include/__memory/concepts.h
index 76d2a2e..12d7bf8 100644
--- a/include/__memory/concepts.h
+++ b/include/__memory/concepts.h
@@ -17,7 +17,8 @@
#include <__iterator/readable_traits.h>
#include <__ranges/access.h>
#include <__ranges/concepts.h>
-#include <type_traits>
+#include <__type_traits/is_reference.h>
+#include <__type_traits/remove_cvref.h>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/include/__memory/construct_at.h b/include/__memory/construct_at.h
index a11a6eb..7f13b26 100644
--- a/include/__memory/construct_at.h
+++ b/include/__memory/construct_at.h
@@ -15,10 +15,12 @@
#include <__iterator/access.h>
#include <__memory/addressof.h>
#include <__memory/voidify.h>
+#include <__type_traits/enable_if.h>
+#include <__type_traits/is_array.h>
+#include <__utility/declval.h>
#include <__utility/forward.h>
#include <__utility/move.h>
#include <new>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/include/__memory/pointer_traits.h b/include/__memory/pointer_traits.h
index fd52647..67f83f8 100644
--- a/include/__memory/pointer_traits.h
+++ b/include/__memory/pointer_traits.h
@@ -12,8 +12,15 @@
#include <__config>
#include <__memory/addressof.h>
+#include <__type_traits/conditional.h>
+#include <__type_traits/conjunction.h>
+#include <__type_traits/decay.h>
+#include <__type_traits/is_class.h>
+#include <__type_traits/is_function.h>
+#include <__type_traits/is_void.h>
+#include <__type_traits/void_t.h>
+#include <__utility/declval.h>
#include <cstddef>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/include/__memory/ranges_uninitialized_algorithms.h b/include/__memory/ranges_uninitialized_algorithms.h
index 7d2ac3a..07abdc9 100644
--- a/include/__memory/ranges_uninitialized_algorithms.h
+++ b/include/__memory/ranges_uninitialized_algorithms.h
@@ -23,9 +23,9 @@
#include <__ranges/access.h>
#include <__ranges/concepts.h>
#include <__ranges/dangling.h>
+#include <__type_traits/remove_reference.h>
#include <__utility/move.h>
#include <new>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/include/__memory/shared_ptr.h b/include/__memory/shared_ptr.h
index 57051df..f8b9ee2 100644
--- a/include/__memory/shared_ptr.h
+++ b/include/__memory/shared_ptr.h
@@ -37,7 +37,6 @@
#include <iosfwd>
#include <new>
#include <stdexcept>
-#include <type_traits>
#include <typeinfo>
#if !defined(_LIBCPP_HAS_NO_ATOMIC_HEADER)
# include <atomic>
diff --git a/include/__memory/uninitialized_algorithms.h b/include/__memory/uninitialized_algorithms.h
index 22f96d4..213428b 100644
--- a/include/__memory/uninitialized_algorithms.h
+++ b/include/__memory/uninitialized_algorithms.h
@@ -20,12 +20,21 @@
#include <__memory/construct_at.h>
#include <__memory/pointer_traits.h>
#include <__memory/voidify.h>
+#include <__type_traits/extent.h>
+#include <__type_traits/is_array.h>
#include <__type_traits/is_constant_evaluated.h>
+#include <__type_traits/is_trivially_copy_assignable.h>
+#include <__type_traits/is_trivially_copy_constructible.h>
+#include <__type_traits/is_trivially_move_assignable.h>
+#include <__type_traits/is_trivially_move_constructible.h>
+#include <__type_traits/is_unbounded_array.h>
+#include <__type_traits/negation.h>
+#include <__type_traits/remove_const.h>
+#include <__type_traits/remove_extent.h>
#include <__utility/move.h>
#include <__utility/pair.h>
#include <__utility/transaction.h>
#include <new>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/include/__memory/unique_ptr.h b/include/__memory/unique_ptr.h
index 9fed619..bb5399d 100644
--- a/include/__memory/unique_ptr.h
+++ b/include/__memory/unique_ptr.h
@@ -19,10 +19,26 @@
#include <__memory/allocator_traits.h> // __pointer
#include <__memory/auto_ptr.h>
#include <__memory/compressed_pair.h>
+#include <__type_traits/add_lvalue_reference.h>
+#include <__type_traits/common_type.h>
+#include <__type_traits/dependent_type.h>
+#include <__type_traits/integral_constant.h>
+#include <__type_traits/is_array.h>
+#include <__type_traits/is_assignable.h>
+#include <__type_traits/is_constructible.h>
+#include <__type_traits/is_convertible.h>
+#include <__type_traits/is_default_constructible.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/is_void.h>
+#include <__type_traits/remove_extent.h>
+#include <__type_traits/type_identity.h>
#include <__utility/forward.h>
#include <__utility/move.h>
#include <cstddef>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/include/__memory/uses_allocator.h b/include/__memory/uses_allocator.h
index 4a07a4a..fe89704 100644
--- a/include/__memory/uses_allocator.h
+++ b/include/__memory/uses_allocator.h
@@ -11,8 +11,8 @@
#define _LIBCPP___MEMORY_USES_ALLOCATOR_H
#include <__config>
+#include <__type_traits/is_convertible.h>
#include <cstddef>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/include/__ranges/access.h b/include/__ranges/access.h
index 87392a1..29babf3 100644
--- a/include/__ranges/access.h
+++ b/include/__ranges/access.h
@@ -15,8 +15,13 @@
#include <__iterator/concepts.h>
#include <__iterator/readable_traits.h>
#include <__ranges/enable_borrowed_range.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>
+#include <__utility/declval.h>
+#include <cstddef>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/include/__ranges/concepts.h b/include/__ranges/concepts.h
index 739e141..730b83c 100644
--- a/include/__ranges/concepts.h
+++ b/include/__ranges/concepts.h
@@ -24,8 +24,12 @@
#include <__ranges/enable_borrowed_range.h>
#include <__ranges/enable_view.h>
#include <__ranges/size.h>
+#include <__type_traits/add_pointer.h>
+#include <__type_traits/is_reference.h>
+#include <__type_traits/remove_cvref.h>
+#include <__type_traits/remove_reference.h>
+#include <__utility/declval.h>
#include <initializer_list>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/include/__ranges/dangling.h b/include/__ranges/dangling.h
index 525b5ff..c104534 100644
--- a/include/__ranges/dangling.h
+++ b/include/__ranges/dangling.h
@@ -13,7 +13,7 @@
#include <__config>
#include <__ranges/access.h>
#include <__ranges/concepts.h>
-#include <type_traits>
+#include <__type_traits/conditional.h>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/include/__ranges/data.h b/include/__ranges/data.h
index cadbfc8..0ac25b5 100644
--- a/include/__ranges/data.h
+++ b/include/__ranges/data.h
@@ -16,8 +16,13 @@
#include <__iterator/iterator_traits.h>
#include <__memory/pointer_traits.h>
#include <__ranges/access.h>
+#include <__type_traits/decay.h>
+#include <__type_traits/is_object.h>
+#include <__type_traits/is_pointer.h>
+#include <__type_traits/is_reference.h>
+#include <__type_traits/remove_pointer.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/include/__ranges/empty.h b/include/__ranges/empty.h
index 2370f13..8a1c75c 100644
--- a/include/__ranges/empty.h
+++ b/include/__ranges/empty.h
@@ -15,7 +15,6 @@
#include <__iterator/concepts.h>
#include <__ranges/access.h>
#include <__ranges/size.h>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/include/__ranges/enable_view.h b/include/__ranges/enable_view.h
index 2dc4752..c85064b 100644
--- a/include/__ranges/enable_view.h
+++ b/include/__ranges/enable_view.h
@@ -13,7 +13,9 @@
#include <__concepts/derived_from.h>
#include <__concepts/same_as.h>
#include <__config>
-#include <type_traits>
+#include <__type_traits/is_class.h>
+#include <__type_traits/is_convertible.h>
+#include <__type_traits/remove_cv.h>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/include/__ranges/size.h b/include/__ranges/size.h
index 720e3d4..4068a21 100644
--- a/include/__ranges/size.h
+++ b/include/__ranges/size.h
@@ -16,9 +16,12 @@
#include <__iterator/concepts.h>
#include <__iterator/iterator_traits.h>
#include <__ranges/access.h>
+#include <__type_traits/decay.h>
+#include <__type_traits/make_signed.h>
+#include <__type_traits/make_unsigned.h>
+#include <__type_traits/remove_cvref.h>
#include <__utility/auto_cast.h>
#include <cstddef>
-#include <type_traits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/include/__ranges/subrange.h b/include/__ranges/subrange.h
index 55689fe..f47db6b 100644
--- a/include/__ranges/subrange.h
+++ b/include/__ranges/subrange.h
@@ -30,8 +30,15 @@
#include <__ranges/view_interface.h>
#include <__tuple_dir/tuple_element.h>
#include <__tuple_dir/tuple_size.h>
+#include <__type_traits/conditional.h>
+#include <__type_traits/decay.h>
+#include <__type_traits/is_pointer.h>
+#include <__type_traits/is_reference.h>
+#include <__type_traits/make_unsigned.h>
+#include <__type_traits/remove_const.h>
+#include <__type_traits/remove_pointer.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/include/__ranges/view_interface.h b/include/__ranges/view_interface.h
index b706c8d..5581eb9 100644
--- a/include/__ranges/view_interface.h
+++ b/include/__ranges/view_interface.h
@@ -21,7 +21,9 @@
#include <__ranges/access.h>
#include <__ranges/concepts.h>
#include <__ranges/empty.h>
-#include <type_traits>
+#include <__type_traits/is_class.h>
+#include <__type_traits/make_unsigned.h>
+#include <__type_traits/remove_cv.h>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/include/__type_traits/is_trivially_destructible.h b/include/__type_traits/is_trivially_destructible.h
index 6639e29..0239fca 100644
--- a/include/__type_traits/is_trivially_destructible.h
+++ b/include/__type_traits/is_trivially_destructible.h
@@ -11,6 +11,7 @@
#include <__config>
#include <__type_traits/integral_constant.h>
+#include <__type_traits/is_destructible.h>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/include/cmath b/include/cmath
index ed88fe8..fd242e1 100644
--- a/include/cmath
+++ b/include/cmath
@@ -306,7 +306,11 @@
#include <__assert> // all public C++ headers provide the assertion handler
#include <__config>
-#include <type_traits>
+#include <__type_traits/enable_if.h>
+#include <__type_traits/is_arithmetic.h>
+#include <__type_traits/is_floating_point.h>
+#include <__type_traits/is_same.h>
+#include <__type_traits/remove_cv.h>
#include <version>
#include <math.h>
@@ -669,4 +673,8 @@
_LIBCPP_POP_MACROS
+#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+# include <type_traits>
+#endif
+
#endif // _LIBCPP_CMATH
diff --git a/include/compare b/include/compare
index 6aa1abe..9272dbf 100644
--- a/include/compare
+++ b/include/compare
@@ -160,4 +160,8 @@
# pragma GCC system_header
#endif
+#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+# include <type_traits>
+#endif
+
#endif // _LIBCPP_COMPARE
diff --git a/include/condition_variable b/include/condition_variable
index 6b4d506..f13df1c 100644
--- a/include/condition_variable
+++ b/include/condition_variable
@@ -270,6 +270,7 @@
#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
# include <concepts>
+# include <type_traits>
#endif
#endif // _LIBCPP_CONDITION_VARIABLE
diff --git a/include/exception b/include/exception
index 98b355f..e0f4268 100644
--- a/include/exception
+++ b/include/exception
@@ -80,9 +80,15 @@
#include <__availability>
#include <__config>
#include <__memory/addressof.h>
+#include <__type_traits/decay.h>
+#include <__type_traits/is_base_of.h>
+#include <__type_traits/is_class.h>
+#include <__type_traits/is_convertible.h>
+#include <__type_traits/is_copy_constructible.h>
+#include <__type_traits/is_final.h>
+#include <__type_traits/is_polymorphic.h>
#include <cstddef>
#include <cstdlib>
-#include <type_traits>
#include <version>
// <vcruntime_exception.h> defines its own std::exception and std::bad_exception types,
@@ -371,4 +377,8 @@
} // namespace std
+#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+# include <type_traits>
+#endif
+
#endif // _LIBCPP_EXCEPTION
diff --git a/include/istream b/include/istream
index 1c9adcc..37ba09b 100644
--- a/include/istream
+++ b/include/istream
@@ -1639,6 +1639,7 @@
#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
# include <concepts>
+# include <type_traits>
#endif
_LIBCPP_POP_MACROS
diff --git a/include/math.h b/include/math.h
index ac55983..dd68830 100644
--- a/include/math.h
+++ b/include/math.h
@@ -307,10 +307,13 @@
// back to C++ linkage before including these C++ headers.
extern "C++" {
+#include <__type_traits/enable_if.h>
+#include <__type_traits/is_floating_point.h>
+#include <__type_traits/is_integral.h>
+#include <__type_traits/is_same.h>
#include <__type_traits/promote.h>
#include <limits>
#include <stdlib.h>
-#include <type_traits>
# ifdef fpclassify
diff --git a/include/module.modulemap.in b/include/module.modulemap.in
index 467f758..bff3f7e 100644
--- a/include/module.modulemap.in
+++ b/include/module.modulemap.in
@@ -1391,7 +1391,10 @@
private header "__type_traits/is_arithmetic.h"
export integral_constant
}
- module is_array { private header "__type_traits/is_array.h" }
+ module is_array {
+ private header "__type_traits/is_array.h"
+ export integral_constant
+ }
module is_assignable { private header "__type_traits/is_assignable.h" }
module is_base_of { private header "__type_traits/is_base_of.h" }
module is_bounded_array { private header "__type_traits/is_bounded_array.h" }
diff --git a/include/mutex b/include/mutex
index d11ffb2..51c1a23 100644
--- a/include/mutex
+++ b/include/mutex
@@ -706,6 +706,7 @@
#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
# include <concepts>
# include <functional>
+# include <type_traits>
#endif
#endif // _LIBCPP_MUTEX
diff --git a/include/new b/include/new
index 892ab7a..ddba2d9 100644
--- a/include/new
+++ b/include/new
@@ -89,10 +89,12 @@
#include <__assert> // all public C++ headers provide the assertion handler
#include <__availability>
#include <__config>
+#include <__type_traits/is_function.h>
+#include <__type_traits/is_same.h>
+#include <__type_traits/remove_cv.h>
#include <cstddef>
#include <cstdlib>
#include <exception>
-#include <type_traits>
#include <version>
#if defined(_LIBCPP_ABI_VCRUNTIME)
@@ -401,4 +403,8 @@
_LIBCPP_END_NAMESPACE_STD
+#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+# include <type_traits>
+#endif
+
#endif // _LIBCPP_NEW
diff --git a/include/ostream b/include/ostream
index 1d943d8..5e2099b 100644
--- a/include/ostream
+++ b/include/ostream
@@ -1191,6 +1191,7 @@
#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
# include <concepts>
# include <iterator>
+# include <type_traits>
#endif
#endif // _LIBCPP_OSTREAM
diff --git a/include/scoped_allocator b/include/scoped_allocator
index f89db7b..d450f4f 100644
--- a/include/scoped_allocator
+++ b/include/scoped_allocator
@@ -725,6 +725,7 @@
# include <memory>
# include <ratio>
# include <stdexcept>
+# include <type_traits>
# include <variant>
#endif
diff --git a/include/valarray b/include/valarray
index 6c33d05..11a273d 100644
--- a/include/valarray
+++ b/include/valarray
@@ -353,6 +353,7 @@
#include <__functional/operations.h>
#include <__memory/allocator.h>
#include <__memory/uninitialized_algorithms.h>
+#include <__type_traits/remove_reference.h>
#include <__utility/move.h>
#include <__utility/swap.h>
#include <cmath>