[libc++] Granularize <type_traits> includes in <iterator>
authorNikolas Klauser <nikolasklauser@berlin.de>
Tue, 20 Dec 2022 20:13:12 +0000 (21:13 +0100)
committerNikolas Klauser <nikolasklauser@berlin.de>
Tue, 27 Dec 2022 01:32:16 +0000 (02:32 +0100)
Reviewed By: Mordante, #libc

Spies: libcxx-commits

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

32 files changed:
libcxx/include/__algorithm/shuffle.h
libcxx/include/__algorithm/sort.h
libcxx/include/__debug
libcxx/include/__iterator/bounded_iter.h
libcxx/include/__iterator/common_iterator.h
libcxx/include/__iterator/counted_iterator.h
libcxx/include/__iterator/move_iterator.h
libcxx/include/__iterator/projected.h
libcxx/include/__iterator/size.h
libcxx/include/__iterator/wrap_iter.h
libcxx/include/__memory/uses_allocator_construction.h
libcxx/include/__tree
libcxx/include/experimental/iterator
libcxx/include/fstream
libcxx/include/iterator
libcxx/include/locale
libcxx/include/module.modulemap.in
libcxx/include/scoped_allocator
libcxx/include/tuple
libcxx/include/variant
libcxx/test/libcxx/iterators/iterator.requirements/iterator.concepts/cpp20_iter_concepts.pass.cpp
libcxx/test/libcxx/transitive_includes/cxx2b.csv
libcxx/test/std/iterators/iterator.requirements/iterator.concepts/iterator.concept.readable/indirectly_readable.compile.pass.cpp
libcxx/test/std/iterators/iterator.requirements/iterator.concepts/iterator.concept.readable/iter_common_reference_t.compile.pass.cpp
libcxx/test/std/iterators/predef.iterators/iterators.common/ctor.converting.pass.cpp
libcxx/test/std/iterators/predef.iterators/move.iterators/move.sentinel/assign.converting.pass.cpp
libcxx/test/std/iterators/predef.iterators/move.iterators/move.sentinel/ctor.converting.pass.cpp
libcxx/test/std/iterators/predef.iterators/move.iterators/move.sentinel/ctor.sentinel.pass.cpp
libcxx/test/std/library/description/conventions/expos.only.func/synth_three_way.pass.cpp
libcxx/test/std/utilities/tuple/tuple.general/ignore.pass.cpp
libcxx/test/std/utilities/tuple/tuple.tuple/tuple.cnstr/PR22806_constrain_tuple_like_ctor.pass.cpp
libcxx/test/support/min_allocator.h

index c2f5c37..f7bce68 100644 (file)
@@ -16,6 +16,7 @@
 #include <__random/uniform_int_distribution.h>
 #include <__utility/forward.h>
 #include <__utility/move.h>
+#include <__utility/swap.h>
 #include <cstddef>
 #include <cstdint>
 
index 5cb496d..76786ba 100644 (file)
 #include <__iterator/iterator_traits.h>
 #include <__memory/destruct_n.h>
 #include <__memory/unique_ptr.h>
+#include <__type_traits/conditional.h>
+#include <__type_traits/is_arithmetic.h>
 #include <__utility/move.h>
 #include <__utility/pair.h>
 #include <climits>
+#include <cstdint>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header
index ae0c1a5..140cc91 100644 (file)
@@ -12,8 +12,8 @@
 
 #include <__assert>
 #include <__config>
+#include <__type_traits/is_constant_evaluated.h>
 #include <cstddef>
-#include <type_traits>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header
index 64cdadb..69d237a 100644 (file)
@@ -14,8 +14,9 @@
 #include <__config>
 #include <__iterator/iterator_traits.h>
 #include <__memory/pointer_traits.h>
+#include <__type_traits/enable_if.h>
+#include <__type_traits/is_convertible.h>
 #include <__utility/move.h>
-#include <type_traits>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header
index d0947bb..e45f602 100644 (file)
@@ -25,6 +25,8 @@
 #include <__iterator/iter_swap.h>
 #include <__iterator/iterator_traits.h>
 #include <__iterator/readable_traits.h>
+#include <__type_traits/is_pointer.h>
+#include <__utility/declval.h>
 #include <variant>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
index 5edd9c9..5fdbff4 100644 (file)
 #include <__iterator/iterator_traits.h>
 #include <__iterator/readable_traits.h>
 #include <__memory/pointer_traits.h>
+#include <__type_traits/add_pointer.h>
+#include <__type_traits/conditional.h>
 #include <__utility/move.h>
 #include <compare>
-#include <type_traits>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header
index b4f2f9e..6475f72 100644 (file)
 #include <__iterator/iterator_traits.h>
 #include <__iterator/move_sentinel.h>
 #include <__iterator/readable_traits.h>
+#include <__type_traits/conditional.h>
+#include <__type_traits/is_assignable.h>
+#include <__type_traits/is_constructible.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
index 3a08b58..19c076b 100644 (file)
@@ -13,7 +13,7 @@
 #include <__config>
 #include <__iterator/concepts.h>
 #include <__iterator/incrementable_traits.h>
-#include <type_traits>
+#include <__type_traits/remove_cvref.h>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header
index e060134..1452bd1 100644 (file)
@@ -11,8 +11,9 @@
 #define _LIBCPP___ITERATOR_SIZE_H
 
 #include <__config>
+#include <__type_traits/common_type.h>
+#include <__type_traits/make_signed.h>
 #include <cstddef>
-#include <type_traits>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header
index 80be74e..16defc1 100644 (file)
@@ -15,7 +15,8 @@
 #include <__iterator/iterator_traits.h>
 #include <__memory/addressof.h>
 #include <__memory/pointer_traits.h>
-#include <type_traits>
+#include <__type_traits/enable_if.h>
+#include <__type_traits/is_convertible.h>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header
index 02e0668..0f63b08 100644 (file)
@@ -14,6 +14,8 @@
 #include <__memory/uses_allocator.h>
 #include <__type_traits/enable_if.h>
 #include <__type_traits/is_same.h>
+#include <__type_traits/remove_cv.h>
+#include <__utility/declval.h>
 #include <__utility/pair.h>
 #include <tuple>
 
index 05a3da1..f5d9d59 100644 (file)
@@ -14,6 +14,7 @@
 #include <__assert>
 #include <__config>
 #include <__debug>
+#include <__functional/invoke.h>
 #include <__iterator/distance.h>
 #include <__iterator/iterator_traits.h>
 #include <__iterator/next.h>
 #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_nothrow_copy_constructible.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/is_swappable.h>
+#include <__type_traits/remove_const_ref.h>
+#include <__type_traits/remove_cvref.h>
 #include <__utility/forward.h>
 #include <__utility/move.h>
 #include <__utility/pair.h>
index 399365e..cf73b74 100644 (file)
@@ -54,6 +54,7 @@ namespace std {
 
 #include <__assert> // all public C++ headers provide the assertion handler
 #include <__memory/addressof.h>
+#include <__type_traits/decay.h>
 #include <__utility/forward.h>
 #include <__utility/move.h>
 #include <experimental/__config>
index 0c09f21..41e95bf 100644 (file)
@@ -1757,6 +1757,7 @@ _LIBCPP_POP_MACROS
 #  include <limits>
 #  include <new>
 #  include <stdexcept>
+#  include <type_traits>
 #endif
 
 #endif // _LIBCPP_FSTREAM
index 679b3da..35eca67 100644 (file)
@@ -719,7 +719,6 @@ template <class E> constexpr const E* data(initializer_list<E> il) noexcept;
 #include <__memory/pointer_traits.h>
 #include <cstddef>
 #include <initializer_list>
-#include <type_traits>
 #include <version>
 
 // standard-mandated includes
@@ -735,6 +734,7 @@ template <class E> constexpr const E* data(initializer_list<E> il) noexcept;
 #if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
 #  include <exception>
 #  include <new>
+#  include <type_traits>
 #  include <typeinfo>
 #  include <utility>
 #endif
index 3180455..f322a11 100644 (file)
@@ -4369,6 +4369,7 @@ _LIBCPP_POP_MACROS
 #  include <cstdarg>
 #  include <iterator>
 #  include <stdexcept>
+#  include <type_traits>
 #  include <typeinfo>
 #endif
 
index bff3f7e..5a69bea 100644 (file)
@@ -892,7 +892,10 @@ module std [system] {
       module hash                       { private header "__functional/hash.h" }
       module hash_fwd                   { private header "__fwd/hash.h" }
       module identity                   { private header "__functional/identity.h" }
-      module invoke                     { private header "__functional/invoke.h" }
+      module invoke                     {
+        private header "__functional/invoke.h"
+        export type_traits
+      }
       module is_transparent             { private header "__functional/is_transparent.h" }
       module mem_fn                     { private header "__functional/mem_fn.h" }
       module mem_fun_ref                { private header "__functional/mem_fun_ref.h" }
@@ -1408,7 +1411,10 @@ module std [system] {
     module is_convertible                      { private header "__type_traits/is_convertible.h" }
     module is_copy_assignable                  { private header "__type_traits/is_copy_assignable.h" }
     module is_copy_constructible               { private header "__type_traits/is_copy_constructible.h" }
-    module is_core_convertible                 { private header "__type_traits/is_core_convertible.h" }
+    module is_core_convertible                 {
+      private header "__type_traits/is_core_convertible.h"
+      export integral_constant
+    }
     module is_default_constructible            { private header "__type_traits/is_default_constructible.h" }
     module is_destructible                     { private header "__type_traits/is_destructible.h" }
     module is_empty                            { private header "__type_traits/is_empty.h" }
@@ -1469,7 +1475,10 @@ module std [system] {
     module is_unsigned                         { private header "__type_traits/is_unsigned.h" }
     module is_unsigned_integer                 { private header "__type_traits/is_unsigned_integer.h" }
     module is_valid_expansion                  { private header "__type_traits/is_valid_expansion.h" }
-    module is_void                             { private header "__type_traits/is_void.h" }
+    module is_void                             {
+      private header "__type_traits/is_void.h"
+      export integral_constant
+    }
     module is_volatile                         { private header "__type_traits/is_volatile.h" }
     module lazy                                { private header "__type_traits/lazy.h" }
     module make_32_64_or_128_bit               { private header "__type_traits/make_32_64_or_128_bit.h" }
index 56cb9ee..88e56c2 100644 (file)
@@ -118,6 +118,7 @@ template <class OuterA1, class OuterA2, class... InnerAllocs>
 #include <__type_traits/integral_constant.h>
 #include <__type_traits/is_constructible.h>
 #include <__type_traits/remove_reference.h>
+#include <__utility/declval.h>
 #include <__utility/forward.h>
 #include <__utility/move.h>
 #include <__utility/pair.h>
index 7149875..b75d00c 100644 (file)
@@ -205,11 +205,45 @@ template <class... Types>
 #include <__compare/common_comparison_category.h>
 #include <__compare/synth_three_way.h>
 #include <__config>
+#include <__functional/invoke.h>
 #include <__functional/unwrap_ref.h>
 #include <__fwd/array.h>
 #include <__memory/allocator_arg_t.h>
 #include <__memory/uses_allocator.h>
+#include <__type_traits/apply_cv.h>
+#include <__type_traits/common_reference.h>
+#include <__type_traits/common_type.h>
+#include <__type_traits/conditional.h>
+#include <__type_traits/conjunction.h>
+#include <__type_traits/copy_cvref.h>
+#include <__type_traits/disjunction.h>
+#include <__type_traits/is_arithmetic.h>
+#include <__type_traits/is_assignable.h>
+#include <__type_traits/is_constructible.h>
+#include <__type_traits/is_convertible.h>
+#include <__type_traits/is_copy_assignable.h>
+#include <__type_traits/is_copy_constructible.h>
+#include <__type_traits/is_default_constructible.h>
+#include <__type_traits/is_empty.h>
+#include <__type_traits/is_final.h>
+#include <__type_traits/is_implicitly_default_constructible.h>
+#include <__type_traits/is_move_assignable.h>
+#include <__type_traits/is_move_constructible.h>
+#include <__type_traits/is_nothrow_assignable.h>
+#include <__type_traits/is_nothrow_constructible.h>
+#include <__type_traits/is_nothrow_copy_assignable.h>
+#include <__type_traits/is_nothrow_copy_constructible.h>
+#include <__type_traits/is_nothrow_default_constructible.h>
+#include <__type_traits/is_nothrow_move_assignable.h>
+#include <__type_traits/is_reference.h>
+#include <__type_traits/is_same.h>
+#include <__type_traits/is_swappable.h>
+#include <__type_traits/lazy.h>
 #include <__type_traits/maybe_const.h>
+#include <__type_traits/nat.h>
+#include <__type_traits/negation.h>
+#include <__type_traits/remove_cvref.h>
+#include <__type_traits/remove_reference.h>
 #include <__utility/forward.h>
 #include <__utility/integer_sequence.h>
 #include <__utility/move.h>
@@ -217,7 +251,6 @@ template <class... Types>
 #include <__utility/piecewise_construct.h>
 #include <__utility/swap.h>
 #include <cstddef>
-#include <type_traits>
 #include <version>
 
 // standard-mandated includes
@@ -1822,6 +1855,7 @@ _LIBCPP_END_NAMESPACE_STD
 #  include <exception>
 #  include <iosfwd>
 #  include <new>
+#  include <type_traits>
 #  include <typeinfo>
 #  include <utility>
 #endif
index 001b86f..2379b22 100644 (file)
@@ -211,9 +211,26 @@ namespace std {
 #include <__compare/three_way_comparable.h>
 #include <__config>
 #include <__functional/hash.h>
+#include <__functional/invoke.h>
 #include <__functional/operations.h>
 #include <__functional/unary_function.h>
+#include <__type_traits/add_const.h>
+#include <__type_traits/add_cv.h>
+#include <__type_traits/add_pointer.h>
+#include <__type_traits/add_volatile.h>
 #include <__type_traits/dependent_type.h>
+#include <__type_traits/is_array.h>
+#include <__type_traits/is_destructible.h>
+#include <__type_traits/is_nothrow_move_constructible.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/is_void.h>
+#include <__type_traits/remove_const.h>
+#include <__type_traits/type_identity.h>
+#include <__type_traits/void_t.h>
 #include <__utility/forward.h>
 #include <__utility/in_place.h>
 #include <__utility/move.h>
@@ -224,7 +241,6 @@ namespace std {
 #include <limits>
 #include <new>
 #include <tuple>
-#include <type_traits>
 #include <version>
 
 // standard-mandated includes
@@ -1815,6 +1831,7 @@ _LIBCPP_END_NAMESPACE_STD
 _LIBCPP_POP_MACROS
 
 #if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+#  include <type_traits>
 #  include <typeinfo>
 #  include <utility>
 #endif
index 17ac69b..5eddf79 100644 (file)
 // random_access_iterator_tag.
 // (1.4) -- Otherwise, ITER_CONCEPT(I) does not denote a type.
 
+// ADDITIONAL_COMPILE_FLAGS: -Wno-private-header
+
 #include "test_macros.h"
 
+#include <__type_traits/is_valid_expansion.h>
 #include <iterator>
+
 struct OtherTag : std::input_iterator_tag {};
 struct OtherTagTwo : std::output_iterator_tag {};
 
index 61706cd..b200177 100644 (file)
@@ -305,7 +305,6 @@ fstream istream
 fstream mutex
 fstream ostream
 fstream string
-fstream type_traits
 fstream typeinfo
 fstream version
 functional array
@@ -367,7 +366,6 @@ iterator cstdlib
 iterator initializer_list
 iterator iosfwd
 iterator limits
-iterator type_traits
 iterator variant
 iterator version
 latch atomic
@@ -401,7 +399,6 @@ locale mutex
 locale new
 locale streambuf
 locale string
-locale type_traits
 locale version
 map compare
 map cstddef
@@ -655,7 +652,6 @@ thread type_traits
 thread version
 tuple compare
 tuple cstddef
-tuple type_traits
 tuple version
 type_traits cstddef
 type_traits cstdint
@@ -721,7 +717,6 @@ variant initializer_list
 variant limits
 variant new
 variant tuple
-variant type_traits
 variant version
 vector climits
 vector compare
index 97c9d40..741654e 100644 (file)
 //   requires convertible_to<const I2&, I> && convertible_to<const S2&, S>
 //     constexpr common_iterator(const common_iterator<I2, S2>& x);
 
-#include <iterator>
 #include <cassert>
-
-#include "test_macros.h"
+#include <iterator>
+#include <type_traits>
 
 constexpr bool test()
 {
index 57f9ad7..aa81390 100644 (file)
 //   requires assignable_from<S&, const S2&>
 //     constexpr move_sentinel& operator=(const move_sentinel<S2>& s);
 
-#include <iterator>
 #include <cassert>
 #include <concepts>
+#include <iterator>
+#include <type_traits>
 
 struct NonAssignable {
   NonAssignable& operator=(int i);
index 5f5be0c..21271b1 100644 (file)
 //    requires convertible_to<const S2&, S>
 //      constexpr move_sentinel(const move_sentinel<S2>& s);
 
-#include <iterator>
 #include <cassert>
 #include <concepts>
+#include <iterator>
+#include <type_traits>
 
 struct NonConvertible {
     explicit NonConvertible();
index d9a6706..158ea46 100644 (file)
@@ -21,6 +21,7 @@ TEST_MSVC_DIAGNOSTIC_IGNORED(4242 4244) // Various truncation warnings
 #include <compare>
 #include <limits>  // quiet_NaN
 #include <tuple>
+#include <type_traits>
 #include <utility> // declval
 
 template <typename T, typename U = T>
index ef819e2..769c55e 100644 (file)
@@ -12,8 +12,9 @@
 
 // UNSUPPORTED: c++03
 
-#include <tuple>
 #include <cassert>
+#include <tuple>
+#include <type_traits>
 
 #include "test_macros.h"
 
index 529c291..f27ac80 100644 (file)
@@ -9,14 +9,14 @@
 #ifndef MIN_ALLOCATOR_H
 #define MIN_ALLOCATOR_H
 
-#include <cstddef>
-#include <cstdlib>
-#include <cstddef>
 #include <cassert>
 #include <climits>
+#include <cstddef>
+#include <cstdlib>
 #include <iterator>
 #include <memory>
 #include <new>
+#include <type_traits>
 
 #include "test_macros.h"