[libc++] Granularize <type_traits> includes in <algorithm>
authorNikolas Klauser <nikolasklauser@berlin.de>
Mon, 26 Dec 2022 15:24:01 +0000 (16:24 +0100)
committerNikolas Klauser <nikolasklauser@berlin.de>
Mon, 13 Feb 2023 12:21:25 +0000 (13:21 +0100)
Reviewed By: Mordante, #libc

Spies: libcxx-commits, wenlei

Differential Revision: https://reviews.llvm.org/D140673

41 files changed:
libcxx/docs/ReleaseNotes.rst
libcxx/include/__algorithm/copy_n.h
libcxx/include/__algorithm/fill.h
libcxx/include/__algorithm/fill_n.h
libcxx/include/__algorithm/find_end.h
libcxx/include/__algorithm/for_each_n.h
libcxx/include/__algorithm/generate_n.h
libcxx/include/__algorithm/half_positive.h
libcxx/include/__algorithm/is_permutation.h
libcxx/include/__algorithm/lower_bound.h
libcxx/include/__algorithm/minmax_element.h
libcxx/include/__algorithm/partial_sort.h
libcxx/include/__algorithm/partition.h
libcxx/include/__algorithm/pop_heap.h
libcxx/include/__algorithm/push_heap.h
libcxx/include/__algorithm/ranges_merge.h
libcxx/include/__algorithm/ranges_minmax_element.h
libcxx/include/__algorithm/ranges_partition.h
libcxx/include/__algorithm/ranges_partition_copy.h
libcxx/include/__algorithm/ranges_sample.h
libcxx/include/__algorithm/ranges_shuffle.h
libcxx/include/__algorithm/ranges_stable_partition.h
libcxx/include/__algorithm/rotate.h
libcxx/include/__algorithm/sample.h
libcxx/include/__algorithm/search.h
libcxx/include/__algorithm/search_n.h
libcxx/include/__algorithm/set_difference.h
libcxx/include/__algorithm/shift_left.h
libcxx/include/__algorithm/shift_right.h
libcxx/include/__algorithm/sort_heap.h
libcxx/include/__algorithm/stable_partition.h
libcxx/include/__algorithm/stable_sort.h
libcxx/include/__algorithm/uniform_random_bit_generator_adaptor.h
libcxx/include/__random/is_valid.h
libcxx/include/__random/log2.h
libcxx/include/__random/uniform_int_distribution.h
libcxx/include/__random/uniform_random_bit_generator.h
libcxx/include/algorithm
libcxx/include/regex
libcxx/include/valarray
libcxx/test/libcxx/transitive_includes/cxx2b.csv

index 20b2b09..d86a96b 100644 (file)
@@ -53,6 +53,12 @@ Deprecations and Removals
   has been shipping since LLVM 14, so the Coroutines TS implementation is being removed per our policy
   for removing TSes.
 
+- Several incidental transitive includes have been removed from libc++. Those
+  includes are removed based on the language version used. Incidental transitive
+  inclusions of the following headers have been removed:
+
+  - C++2b: ``type_traits``
+
 Upcoming Deprecations and Removals
 ----------------------------------
 
index b08bbdf..7089ef3 100644 (file)
@@ -12,8 +12,8 @@
 #include <__algorithm/copy.h>
 #include <__config>
 #include <__iterator/iterator_traits.h>
+#include <__type_traits/enable_if.h>
 #include <__utility/convert_to_integral.h>
-#include <type_traits>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header
index 76cf4a1..0753c42 100644 (file)
@@ -12,7 +12,6 @@
 #include <__algorithm/fill_n.h>
 #include <__config>
 #include <__iterator/iterator_traits.h>
-#include <type_traits>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header
index fe58c8d..e7863ac 100644 (file)
@@ -12,7 +12,6 @@
 #include <__config>
 #include <__iterator/iterator_traits.h>
 #include <__utility/convert_to_integral.h>
-#include <type_traits>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header
index e2fee6b..edb9891 100644 (file)
 #include <__algorithm/search.h>
 #include <__config>
 #include <__functional/identity.h>
+#include <__functional/invoke.h>
 #include <__iterator/advance.h>
 #include <__iterator/iterator_traits.h>
 #include <__iterator/next.h>
 #include <__iterator/reverse_iterator.h>
 #include <__utility/pair.h>
-#include <type_traits>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header
index 38d204a..85cf41d 100644 (file)
@@ -12,7 +12,6 @@
 
 #include <__config>
 #include <__utility/convert_to_integral.h>
-#include <type_traits>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header
index 4525998..ff5c82d 100644 (file)
@@ -11,7 +11,6 @@
 
 #include <__config>
 #include <__utility/convert_to_integral.h>
-#include <type_traits>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header
index 74aede2..5a0f4ba 100644 (file)
@@ -10,7 +10,9 @@
 #define _LIBCPP___ALGORITHM_HALF_POSITIVE_H
 
 #include <__config>
-#include <type_traits>
+#include <__type_traits/enable_if.h>
+#include <__type_traits/is_integral.h>
+#include <__type_traits/make_unsigned.h>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header
index 0054456..8337680 100644 (file)
@@ -19,8 +19,8 @@
 #include <__iterator/distance.h>
 #include <__iterator/iterator_traits.h>
 #include <__iterator/next.h>
+#include <__type_traits/is_callable.h>
 #include <__utility/move.h>
-#include <type_traits>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header
index 2648982..8109393 100644 (file)
@@ -20,7 +20,6 @@
 #include <__iterator/iterator_traits.h>
 #include <__type_traits/is_callable.h>
 #include <__type_traits/remove_reference.h>
-#include <type_traits>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header
index caa963e..1ac4078 100644 (file)
 #include <__algorithm/comp.h>
 #include <__config>
 #include <__functional/identity.h>
+#include <__functional/invoke.h>
 #include <__iterator/iterator_traits.h>
+#include <__type_traits/is_callable.h>
 #include <__utility/pair.h>
-#include <type_traits>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header
index e0812af..4b8e0e7 100644 (file)
@@ -19,8 +19,9 @@
 #include <__debug>
 #include <__debug_utils/randomize_range.h>
 #include <__iterator/iterator_traits.h>
+#include <__type_traits/is_copy_assignable.h>
+#include <__type_traits/is_copy_constructible.h>
 #include <__utility/move.h>
-#include <type_traits>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header
index 0e094bf..a58dd64 100644 (file)
@@ -14,7 +14,6 @@
 #include <__iterator/iterator_traits.h>
 #include <__utility/move.h>
 #include <__utility/pair.h>
-#include <type_traits>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header
index 94d32a4..4187523 100644 (file)
@@ -17,8 +17,9 @@
 #include <__assert>
 #include <__config>
 #include <__iterator/iterator_traits.h>
+#include <__type_traits/is_copy_assignable.h>
+#include <__type_traits/is_copy_constructible.h>
 #include <__utility/move.h>
-#include <type_traits>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header
index 9068495..e831162 100644 (file)
@@ -14,8 +14,9 @@
 #include <__algorithm/iterator_operations.h>
 #include <__config>
 #include <__iterator/iterator_traits.h>
+#include <__type_traits/is_copy_assignable.h>
+#include <__type_traits/is_copy_constructible.h>
 #include <__utility/move.h>
-#include <type_traits>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header
index b36a05a..8935173 100644 (file)
@@ -20,8 +20,8 @@
 #include <__ranges/access.h>
 #include <__ranges/concepts.h>
 #include <__ranges/dangling.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
index 6699f96..e12889d 100644 (file)
@@ -23,7 +23,6 @@
 #include <__utility/forward.h>
 #include <__utility/move.h>
 #include <__utility/pair.h>
-#include <type_traits>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header
index 8b3aae5..b01b189 100644 (file)
@@ -27,7 +27,6 @@
 #include <__utility/forward.h>
 #include <__utility/move.h>
 #include <__utility/pair.h>
-#include <type_traits>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header
index e7a9a34..591fddf 100644 (file)
@@ -20,7 +20,6 @@
 #include <__ranges/concepts.h>
 #include <__ranges/dangling.h>
 #include <__utility/move.h>
-#include <type_traits>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header
index a37cb64..917b82a 100644 (file)
@@ -19,9 +19,9 @@
 #include <__random/uniform_random_bit_generator.h>
 #include <__ranges/access.h>
 #include <__ranges/concepts.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
index a2f2c0e..b70237d 100644 (file)
@@ -23,9 +23,9 @@
 #include <__ranges/access.h>
 #include <__ranges/concepts.h>
 #include <__ranges/dangling.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
index c3469f1..8a8fa86 100644 (file)
@@ -26,9 +26,9 @@
 #include <__ranges/concepts.h>
 #include <__ranges/dangling.h>
 #include <__ranges/subrange.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
index 8934ce0..7ed6f18 100644 (file)
@@ -15,9 +15,9 @@
 #include <__algorithm/swap_ranges.h>
 #include <__config>
 #include <__iterator/iterator_traits.h>
+#include <__type_traits/is_trivially_move_assignable.h>
 #include <__utility/move.h>
 #include <__utility/pair.h>
-#include <type_traits>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header
index f403ba6..9c5f75f 100644 (file)
@@ -16,8 +16,8 @@
 #include <__iterator/distance.h>
 #include <__iterator/iterator_traits.h>
 #include <__random/uniform_int_distribution.h>
+#include <__type_traits/common_type.h>
 #include <__utility/move.h>
-#include <type_traits>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header
index 93771be..10f0f58 100644 (file)
 #include <__algorithm/iterator_operations.h>
 #include <__config>
 #include <__functional/identity.h>
+#include <__functional/invoke.h>
 #include <__iterator/advance.h>
 #include <__iterator/concepts.h>
 #include <__iterator/iterator_traits.h>
+#include <__type_traits/enable_if.h>
 #include <__type_traits/is_callable.h>
 #include <__utility/pair.h>
-#include <type_traits>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header
index 60a0735..06962be 100644 (file)
 #include <__algorithm/iterator_operations.h>
 #include <__config>
 #include <__functional/identity.h>
+#include <__functional/invoke.h>
 #include <__iterator/advance.h>
 #include <__iterator/concepts.h>
 #include <__iterator/distance.h>
 #include <__iterator/iterator_traits.h>
 #include <__ranges/concepts.h>
+#include <__type_traits/is_callable.h>
 #include <__utility/convert_to_integral.h>
 #include <__utility/pair.h>
-#include <type_traits>  // __convert_to_integral
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header
index cffdc8f..5a7d3bc 100644 (file)
@@ -17,9 +17,9 @@
 #include <__functional/identity.h>
 #include <__functional/invoke.h>
 #include <__iterator/iterator_traits.h>
+#include <__type_traits/remove_cvref.h>
 #include <__utility/move.h>
 #include <__utility/pair.h>
-#include <type_traits>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header
index 33f06d5..dde8ece 100644 (file)
@@ -12,7 +12,6 @@
 #include <__algorithm/move.h>
 #include <__config>
 #include <__iterator/iterator_traits.h>
-#include <type_traits>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header
index 14bc761..d4eee14 100644 (file)
@@ -15,7 +15,6 @@
 #include <__config>
 #include <__iterator/iterator_traits.h>
 #include <__utility/swap.h>
-#include <type_traits>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header
index 8249407..0dc9acc 100644 (file)
@@ -15,8 +15,9 @@
 #include <__algorithm/pop_heap.h>
 #include <__config>
 #include <__iterator/iterator_traits.h>
+#include <__type_traits/is_copy_assignable.h>
+#include <__type_traits/is_copy_constructible.h>
 #include <__utility/move.h>
-#include <type_traits>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header
index a49de6d..3b68bd3 100644 (file)
@@ -21,7 +21,6 @@
 #include <__utility/move.h>
 #include <__utility/pair.h>
 #include <new>
-#include <type_traits>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header
index 8e70978..e080147 100644 (file)
 #include <__memory/destruct_n.h>
 #include <__memory/temporary_buffer.h>
 #include <__memory/unique_ptr.h>
+#include <__type_traits/is_trivially_copy_assignable.h>
 #include <__utility/move.h>
 #include <__utility/pair.h>
 #include <new>
-#include <type_traits>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header
index 1e86074..b631a5d 100644 (file)
@@ -11,7 +11,7 @@
 
 #include <__config>
 #include <__functional/invoke.h>
-#include <type_traits>
+#include <__type_traits/remove_cvref.h>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header
index 1d65de0..113452b 100644 (file)
 #define _LIBCPP___RANDOM_IS_VALID_H
 
 #include <__config>
+#include <__type_traits/enable_if.h>
+#include <__type_traits/integral_constant.h>
+#include <__type_traits/is_same.h>
+#include <__type_traits/is_unsigned.h>
+#include <__utility/declval.h>
 #include <cstdint>
-#include <type_traits>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header
index 72bf075..4ccd1dd 100644 (file)
@@ -10,8 +10,8 @@
 #define _LIBCPP___RANDOM_LOG2_H
 
 #include <__config>
+#include <__type_traits/conditional.h>
 #include <cstddef>
-#include <type_traits>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header
index d0e548d..45f910b 100644 (file)
 #include <__config>
 #include <__random/is_valid.h>
 #include <__random/log2.h>
+#include <__type_traits/conditional.h>
+#include <__type_traits/make_unsigned.h>
 #include <bit>
 #include <cstddef>
 #include <cstdint>
 #include <iosfwd>
 #include <limits>
-#include <type_traits>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header
index 84a30b0..f4d1801 100644 (file)
@@ -13,7 +13,8 @@
 #include <__concepts/invocable.h>
 #include <__concepts/same_as.h>
 #include <__config>
-#include <type_traits>
+#include <__functional/invoke.h>
+#include <__type_traits/integral_constant.h>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header
index 52d9cc9..0f9767c 100644 (file)
@@ -1719,7 +1719,6 @@ template <class BidirectionalIterator, class Compare>
 #include <__config>
 #include <__debug>
 #include <cstddef>
-#include <type_traits>
 #include <version>
 
 #include <__algorithm/adjacent_find.h>
@@ -1933,6 +1932,7 @@ template <class BidirectionalIterator, class Compare>
 #  include <iterator>
 #  include <memory>
 #  include <stdexcept>
+#  include <type_traits>
 #  include <utility>
 #endif
 
index f4fb7a3..9fffb5f 100644 (file)
@@ -6869,6 +6869,7 @@ _LIBCPP_POP_MACROS
 #  include <iosfwd>
 #  include <iterator>
 #  include <new>
+#  include <type_traits>
 #  include <typeinfo>
 #  include <utility>
 #endif
index 92521ed..0dbb31e 100644 (file)
@@ -4935,6 +4935,7 @@ _LIBCPP_POP_MACROS
 #  include <concepts>
 #  include <cstring>
 #  include <functional>
+#  include <type_traits>
 #endif
 
 #endif // _LIBCPP_VALARRAY
index 9159e57..4781c9d 100644 (file)
@@ -8,7 +8,6 @@ algorithm initializer_list
 algorithm iosfwd
 algorithm limits
 algorithm new
-algorithm type_traits
 algorithm version
 any cstddef
 any cstdint
@@ -527,7 +526,6 @@ regex limits
 regex mutex
 regex stdexcept
 regex string
-regex type_traits
 regex vector
 regex version
 scoped_allocator cstddef
@@ -696,7 +694,6 @@ valarray initializer_list
 valarray limits
 valarray new
 valarray stdexcept
-valarray type_traits
 valarray version
 variant compare
 variant cstddef