[libc++] Granularize <iterator> includes

Reviewed By: ldionne, #libc

Spies: libcxx-commits, wenlei

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

NOKEYCHECK=True
GitOrigin-RevId: 3cd4531b9ba421d1d096e746d787fe3039a546bb
diff --git a/include/__algorithm/equal_range.h b/include/__algorithm/equal_range.h
index e332fa8..3e17772 100644
--- a/include/__algorithm/equal_range.h
+++ b/include/__algorithm/equal_range.h
@@ -16,7 +16,10 @@
 #include <__algorithm/upper_bound.h>
 #include <__config>
 #include <__functional/identity.h>
-#include <iterator>
+#include <__iterator/advance.h>
+#include <__iterator/distance.h>
+#include <__iterator/iterator_traits.h>
+#include <__utility/pair.h>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header
diff --git a/include/__algorithm/inplace_merge.h b/include/__algorithm/inplace_merge.h
index 83f8c2f..ffc160c 100644
--- a/include/__algorithm/inplace_merge.h
+++ b/include/__algorithm/inplace_merge.h
@@ -17,7 +17,10 @@
 #include <__algorithm/rotate.h>
 #include <__algorithm/upper_bound.h>
 #include <__config>
+#include <__iterator/advance.h>
+#include <__iterator/distance.h>
 #include <__iterator/iterator_traits.h>
+#include <__iterator/reverse_iterator.h>
 #include <__utility/swap.h>
 #include <memory>
 
diff --git a/include/__algorithm/lower_bound.h b/include/__algorithm/lower_bound.h
index 61625be..0334733 100644
--- a/include/__algorithm/lower_bound.h
+++ b/include/__algorithm/lower_bound.h
@@ -13,8 +13,12 @@
 #include <__algorithm/half_positive.h>
 #include <__config>
 #include <__functional/identity.h>
+#include <__functional/invoke.h>
+#include <__iterator/advance.h>
+#include <__iterator/distance.h>
+#include <__iterator/iterator_traits.h>
 #include <__type_traits/is_callable.h>
-#include <iterator>
+#include <type_traits>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header
diff --git a/include/__algorithm/partition_point.h b/include/__algorithm/partition_point.h
index c2fa841..1675534 100644
--- a/include/__algorithm/partition_point.h
+++ b/include/__algorithm/partition_point.h
@@ -11,7 +11,9 @@
 
 #include <__algorithm/half_positive.h>
 #include <__config>
-#include <iterator>
+#include <__iterator/advance.h>
+#include <__iterator/distance.h>
+#include <__iterator/iterator_traits.h>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header
diff --git a/include/__algorithm/ranges_count.h b/include/__algorithm/ranges_count.h
index 3cbcdc9..670df26 100644
--- a/include/__algorithm/ranges_count.h
+++ b/include/__algorithm/ranges_count.h
@@ -15,6 +15,7 @@
 #include <__functional/ranges_operations.h>
 #include <__iterator/concepts.h>
 #include <__iterator/incrementable_traits.h>
+#include <__iterator/iterator_traits.h>
 #include <__iterator/projected.h>
 #include <__ranges/access.h>
 #include <__ranges/concepts.h>
diff --git a/include/__algorithm/ranges_count_if.h b/include/__algorithm/ranges_count_if.h
index 9080631..0f34ee9 100644
--- a/include/__algorithm/ranges_count_if.h
+++ b/include/__algorithm/ranges_count_if.h
@@ -15,6 +15,7 @@
 #include <__functional/ranges_operations.h>
 #include <__iterator/concepts.h>
 #include <__iterator/incrementable_traits.h>
+#include <__iterator/iterator_traits.h>
 #include <__iterator/projected.h>
 #include <__ranges/access.h>
 #include <__ranges/concepts.h>
diff --git a/include/__algorithm/ranges_for_each_n.h b/include/__algorithm/ranges_for_each_n.h
index f40f849..ddf8b04 100644
--- a/include/__algorithm/ranges_for_each_n.h
+++ b/include/__algorithm/ranges_for_each_n.h
@@ -15,6 +15,7 @@
 #include <__functional/invoke.h>
 #include <__iterator/concepts.h>
 #include <__iterator/incrementable_traits.h>
+#include <__iterator/iterator_traits.h>
 #include <__iterator/projected.h>
 #include <__ranges/concepts.h>
 #include <__ranges/dangling.h>
diff --git a/include/__algorithm/rotate.h b/include/__algorithm/rotate.h
index ec7b999..c9ea5ba 100644
--- a/include/__algorithm/rotate.h
+++ b/include/__algorithm/rotate.h
@@ -18,7 +18,7 @@
 #include <__iterator/prev.h>
 #include <__utility/move.h>
 #include <__utility/swap.h>
-#include <iterator>
+#include <type_traits>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header
diff --git a/include/__algorithm/sample.h b/include/__algorithm/sample.h
index 5234961..e04466a 100644
--- a/include/__algorithm/sample.h
+++ b/include/__algorithm/sample.h
@@ -12,8 +12,10 @@
 #include <__algorithm/min.h>
 #include <__assert>
 #include <__config>
+#include <__iterator/distance.h>
+#include <__iterator/iterator_traits.h>
 #include <__random/uniform_int_distribution.h>
-#include <iterator>
+#include <type_traits>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header
diff --git a/include/__algorithm/sort.h b/include/__algorithm/sort.h
index c69df94..0f463e1 100644
--- a/include/__algorithm/sort.h
+++ b/include/__algorithm/sort.h
@@ -18,6 +18,7 @@
 #include <__config>
 #include <__debug>
 #include <__functional/operations.h>
+#include <__iterator/iterator_traits.h>
 #include <__utility/swap.h>
 #include <climits>
 #include <memory>
diff --git a/include/__algorithm/stable_partition.h b/include/__algorithm/stable_partition.h
index 1233cc1..a0f1360 100644
--- a/include/__algorithm/stable_partition.h
+++ b/include/__algorithm/stable_partition.h
@@ -11,6 +11,8 @@
 
 #include <__algorithm/rotate.h>
 #include <__config>
+#include <__iterator/advance.h>
+#include <__iterator/distance.h>
 #include <__iterator/iterator_traits.h>
 #include <__utility/swap.h>
 #include <memory>
diff --git a/include/__algorithm/unwrap_iter.h b/include/__algorithm/unwrap_iter.h
index 7261ff4..be33194 100644
--- a/include/__algorithm/unwrap_iter.h
+++ b/include/__algorithm/unwrap_iter.h
@@ -10,8 +10,8 @@
 #define _LIBCPP___ALGORITHM_UNWRAP_ITER_H
 
 #include <__config>
+#include <__iterator/iterator_traits.h>
 #include <__memory/pointer_traits.h>
-#include <iterator>
 #include <type_traits>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
diff --git a/include/__algorithm/upper_bound.h b/include/__algorithm/upper_bound.h
index cfa021e..c648360 100644
--- a/include/__algorithm/upper_bound.h
+++ b/include/__algorithm/upper_bound.h
@@ -12,7 +12,9 @@
 #include <__algorithm/comp.h>
 #include <__algorithm/half_positive.h>
 #include <__config>
-#include <iterator>
+#include <__iterator/advance.h>
+#include <__iterator/distance.h>
+#include <__iterator/iterator_traits.h>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header
diff --git a/include/__format/format_arg_store.h b/include/__format/format_arg_store.h
index 28c9c28..6602dfe 100644
--- a/include/__format/format_arg_store.h
+++ b/include/__format/format_arg_store.h
@@ -14,6 +14,8 @@
 #  pragma GCC system_header
 #endif
 
+#include <__concepts/arithmetic.h>
+#include <__concepts/same_as.h>
 #include <__config>
 #include <__format/concepts.h>
 #include <__format/format_arg.h>
diff --git a/include/__format/formatter.h b/include/__format/formatter.h
index d7370b0..c39e25b 100644
--- a/include/__format/formatter.h
+++ b/include/__format/formatter.h
@@ -15,6 +15,7 @@
 #include <__algorithm/transform.h>
 #include <__assert>
 #include <__availability>
+#include <__concepts/same_as.h>
 #include <__config>
 #include <__format/format_error.h>
 #include <__format/format_fwd.h>
diff --git a/include/__hash_table b/include/__hash_table
index be28a03..2022301 100644
--- a/include/__hash_table
+++ b/include/__hash_table
@@ -17,10 +17,10 @@
 #include <__config>
 #include <__debug>
 #include <__functional/hash.h>
+#include <__iterator/iterator_traits.h>
 #include <__utility/swap.h>
 #include <cmath>
 #include <initializer_list>
-#include <iterator>
 #include <memory>
 #include <type_traits>
 
diff --git a/include/__memory/raw_storage_iterator.h b/include/__memory/raw_storage_iterator.h
index f25f7b1..9b6594b 100644
--- a/include/__memory/raw_storage_iterator.h
+++ b/include/__memory/raw_storage_iterator.h
@@ -11,10 +11,11 @@
 #define _LIBCPP___MEMORY_RAW_STORAGE_ITERATOR_H
 
 #include <__config>
+#include <__iterator/iterator.h>
+#include <__iterator/iterator_traits.h>
 #include <__memory/addressof.h>
 #include <__utility/move.h>
 #include <cstddef>
-#include <iterator>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header
diff --git a/include/__tree b/include/__tree
index c493ff9..4e6aee3 100644
--- a/include/__tree
+++ b/include/__tree
@@ -11,10 +11,14 @@
 #define _LIBCPP___TREE
 
 #include <__algorithm/min.h>
+#include <__assert>
 #include <__config>
+#include <__debug>
+#include <__iterator/distance.h>
+#include <__iterator/iterator_traits.h>
+#include <__iterator/next.h>
 #include <__utility/forward.h>
 #include <__utility/swap.h>
-#include <iterator>
 #include <limits>
 #include <memory>
 #include <stdexcept>
diff --git a/include/algorithm b/include/algorithm
index f3436b7..0a9513f 100644
--- a/include/algorithm
+++ b/include/algorithm
@@ -1068,7 +1068,7 @@
 #include <cstddef>
 #include <cstring>
 #include <initializer_list>
-#include <iterator>
+#include <iterator> // TODO: Remove this include
 #include <memory>
 #include <type_traits>
 #include <version>
diff --git a/include/any b/include/any
index 308a49e..991d887 100644
--- a/include/any
+++ b/include/any
@@ -88,6 +88,7 @@
 #include <__utility/move.h>
 #include <__utility/unreachable.h>
 #include <cstdlib>
+#include <initializer_list>
 #include <memory>
 #include <type_traits>
 #include <typeinfo>
diff --git a/include/array b/include/array
index 786dc75..4258853 100644
--- a/include/array
+++ b/include/array
@@ -114,11 +114,13 @@
 #include <__algorithm/swap_ranges.h>
 #include <__assert> // all public C++ headers provide the assertion handler
 #include <__config>
+#include <__iterator/reverse_iterator.h>
 #include <__tuple>
 #include <__utility/integer_sequence.h>
 #include <__utility/move.h>
 #include <__utility/unreachable.h>
-#include <iterator>
+#include <compare>
+#include <iterator> // TODO: Remove this include
 #include <stdexcept>
 #include <type_traits>
 #include <version>
diff --git a/include/deque b/include/deque
index d782963..559de77 100644
--- a/include/deque
+++ b/include/deque
@@ -173,13 +173,16 @@
 #include <__config>
 #include <__format/enable_insertable.h>
 #include <__iterator/iterator_traits.h>
+#include <__iterator/next.h>
+#include <__iterator/prev.h>
+#include <__iterator/reverse_iterator.h>
 #include <__split_buffer>
 #include <__utility/forward.h>
 #include <__utility/move.h>
 #include <__utility/swap.h>
 #include <compare>
 #include <initializer_list>
-#include <iterator>
+#include <iterator> // TODO: Remove this include
 #include <limits>
 #include <stdexcept>
 #include <type_traits>
diff --git a/include/ext/hash_map b/include/ext/hash_map
index 92572c0..eec8a8a 100644
--- a/include/ext/hash_map
+++ b/include/ext/hash_map
@@ -207,6 +207,7 @@
 #include <algorithm>
 #include <ext/__hash>
 #include <functional>
+#include <iterator> // TODO: Remove this include
 #include <stdexcept>
 #include <type_traits>
 
diff --git a/include/ext/hash_set b/include/ext/hash_set
index eb61939..4b68bec 100644
--- a/include/ext/hash_set
+++ b/include/ext/hash_set
@@ -198,6 +198,7 @@
 #include <algorithm>
 #include <ext/__hash>
 #include <functional>
+#include <iterator> // TODO: Remove this include
 
 #if defined(__DEPRECATED) && __DEPRECATED
 #if defined(_LIBCPP_WARNING)
diff --git a/include/format b/include/format
index 98fa0b0..95d8512 100644
--- a/include/format
+++ b/include/format
@@ -146,6 +146,7 @@
 #include <__format/formatter_pointer.h>
 #include <__format/formatter_string.h>
 #include <__format/parser_std_format_spec.h>
+#include <__iterator/incrementable_traits.h>
 #include <__variant/monostate.h>
 #include <array>
 #include <concepts>
diff --git a/include/forward_list b/include/forward_list
index 23c1229..3dd0308 100644
--- a/include/forward_list
+++ b/include/forward_list
@@ -184,9 +184,13 @@
 #include <__algorithm/min.h>
 #include <__assert> // all public C++ headers provide the assertion handler
 #include <__config>
+#include <__iterator/distance.h>
+#include <__iterator/iterator_traits.h>
+#include <__iterator/move_iterator.h>
+#include <__iterator/next.h>
 #include <__utility/forward.h>
 #include <initializer_list>
-#include <iterator>
+#include <iterator> // TODO: Remove this include
 #include <limits>
 #include <memory>
 #include <type_traits>
diff --git a/include/istream b/include/istream
index c082be1..7af5dfa 100644
--- a/include/istream
+++ b/include/istream
@@ -160,6 +160,7 @@
 
 #include <__assert> // all public C++ headers provide the assertion handler
 #include <__config>
+#include <__iterator/istreambuf_iterator.h>
 #include <__utility/forward.h>
 #include <ostream>
 #include <version>
diff --git a/include/list b/include/list
index 45ccfec..2ad428a 100644
--- a/include/list
+++ b/include/list
@@ -188,11 +188,17 @@
 #include <__config>
 #include <__debug>
 #include <__format/enable_insertable.h>
+#include <__iterator/distance.h>
+#include <__iterator/iterator_traits.h>
+#include <__iterator/move_iterator.h>
+#include <__iterator/next.h>
+#include <__iterator/prev.h>
+#include <__iterator/reverse_iterator.h>
 #include <__utility/forward.h>
 #include <__utility/move.h>
 #include <__utility/swap.h>
 #include <initializer_list>
-#include <iterator>
+#include <iterator> // TODO: Remove this include
 #include <limits>
 #include <memory>
 #include <type_traits>
diff --git a/include/locale b/include/locale
index ecbb44a..9d58be4 100644
--- a/include/locale
+++ b/include/locale
@@ -196,6 +196,10 @@
 #include <__assert> // all public C++ headers provide the assertion handler
 #include <__config>
 #include <__debug>
+#include <__iterator/access.h>
+#include <__iterator/back_insert_iterator.h>
+#include <__iterator/istreambuf_iterator.h>
+#include <__iterator/ostreambuf_iterator.h>
 #include <__locale>
 #ifndef __APPLE__
 # include <cstdarg>
@@ -204,7 +208,7 @@
 #include <cstdlib>
 #include <ctime>
 #include <ios>
-#include <iterator>
+#include <iterator> // TODO: Remove this include
 #include <limits>
 #include <memory>
 #include <streambuf>
diff --git a/include/map b/include/map
index d48f3a2..33d8359 100644
--- a/include/map
+++ b/include/map
@@ -535,14 +535,16 @@
 #include <__functional/binary_function.h>
 #include <__functional/is_transparent.h>
 #include <__functional/operations.h>
+#include <__iterator/erase_if_container.h>
 #include <__iterator/iterator_traits.h>
+#include <__iterator/reverse_iterator.h>
 #include <__node_handle>
 #include <__tree>
 #include <__utility/forward.h>
 #include <__utility/swap.h>
 #include <compare>
 #include <initializer_list>
-#include <iterator> // __libcpp_erase_if_container
+#include <iterator> // TODO: Remove this include
 #include <memory>
 #include <type_traits>
 #include <version>
diff --git a/include/memory b/include/memory
index 1360f9d..f69fc4d 100644
--- a/include/memory
+++ b/include/memory
@@ -864,7 +864,7 @@
 #include <cstdint>
 #include <cstring>
 #include <iosfwd>
-#include <iterator>
+#include <iterator> // TODO: Remove this include
 #include <new>
 #include <stdexcept>
 #include <tuple>
diff --git a/include/numeric b/include/numeric
index 0a5843f..4b14275 100644
--- a/include/numeric
+++ b/include/numeric
@@ -147,7 +147,7 @@
 #include <__assert> // all public C++ headers provide the assertion handler
 #include <__config>
 #include <cmath> // for isnormal
-#include <iterator>
+#include <iterator> // TODO: Remove this include
 #include <version>
 
 #include <__numeric/accumulate.h>
diff --git a/include/ostream b/include/ostream
index 17b0813..9679e42 100644
--- a/include/ostream
+++ b/include/ostream
@@ -138,7 +138,7 @@
 #include <__config>
 #include <bitset>
 #include <ios>
-#include <iterator>
+#include <iterator> // TODO: Remove this include
 #include <locale>
 #include <streambuf>
 #include <version>
diff --git a/include/regex b/include/regex
index 5d07874..a6ad7d6 100644
--- a/include/regex
+++ b/include/regex
@@ -766,6 +766,8 @@
 #include <__algorithm/search.h>
 #include <__assert> // all public C++ headers provide the assertion handler
 #include <__config>
+#include <__iterator/access.h>
+#include <__iterator/back_insert_iterator.h>
 #include <__iterator/wrap_iter.h>
 #include <__locale>
 #include <__utility/move.h>
@@ -773,7 +775,7 @@
 #include <compare>
 #include <deque>
 #include <initializer_list>
-#include <iterator>
+#include <iterator> // TODO: Remove this include
 #include <memory>
 #include <stdexcept>
 #include <string>
diff --git a/include/set b/include/set
index be7af62..fb29e4d 100644
--- a/include/set
+++ b/include/set
@@ -477,13 +477,15 @@
 #include <__config>
 #include <__functional/is_transparent.h>
 #include <__functional/operations.h>
+#include <__iterator/erase_if_container.h>
 #include <__iterator/iterator_traits.h>
+#include <__iterator/reverse_iterator.h>
 #include <__node_handle>
 #include <__tree>
 #include <__utility/forward.h>
 #include <compare>
 #include <initializer_list>
-#include <iterator> // __libcpp_erase_if_container
+#include <iterator> // TODO: Remove this include
 #include <version>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
diff --git a/include/span b/include/span
index 38b2ae1..41100c9 100644
--- a/include/span
+++ b/include/span
@@ -132,7 +132,9 @@
 #include <__debug>
 #include <__fwd/span.h>
 #include <__iterator/concepts.h>
+#include <__iterator/iterator_traits.h>
 #include <__iterator/wrap_iter.h>
+#include <__memory/pointer_traits.h>
 #include <__ranges/concepts.h>
 #include <__ranges/data.h>
 #include <__ranges/enable_borrowed_range.h>
@@ -141,7 +143,7 @@
 #include <__utility/forward.h>
 #include <array>        // for array
 #include <cstddef>      // for byte
-#include <iterator>     // for iterators
+#include <iterator> // TODO: Remove this include
 #include <limits>
 #include <type_traits>  // for remove_cv, etc
 #include <version>
diff --git a/include/string b/include/string
index cb32392..a5e1290 100644
--- a/include/string
+++ b/include/string
@@ -527,6 +527,9 @@
 #include <__functional/hash.h>
 #include <__functional/unary_function.h>
 #include <__ios/fpos.h>
+#include <__iterator/distance.h>
+#include <__iterator/iterator_traits.h>
+#include <__iterator/reverse_iterator.h>
 #include <__iterator/wrap_iter.h>
 #include <__memory/allocate_at_least.h>
 #include <__string/char_traits.h>
@@ -542,7 +545,7 @@
 #include <cstring>
 #include <initializer_list>
 #include <iosfwd>
-#include <iterator>
+#include <iterator> // TODO: Remove this include
 #include <limits>
 #include <memory>
 #include <stdexcept>
diff --git a/include/string_view b/include/string_view
index 88df90a..9e60bae 100644
--- a/include/string_view
+++ b/include/string_view
@@ -202,6 +202,10 @@
 #include <__functional/hash.h>
 #include <__functional/unary_function.h>
 #include <__fwd/string_view.h>
+#include <__iterator/concepts.h>
+#include <__iterator/readable_traits.h>
+#include <__iterator/reverse_iterator.h>
+#include <__memory/pointer_traits.h>
 #include <__ranges/concepts.h>
 #include <__ranges/data.h>
 #include <__ranges/enable_borrowed_range.h>
@@ -210,7 +214,7 @@
 #include <__string/char_traits.h>
 #include <compare>
 #include <iosfwd>
-#include <iterator>
+#include <iterator> // TODO: Remove this include
 #include <limits>
 #include <stdexcept>
 #include <type_traits>
diff --git a/include/unordered_map b/include/unordered_map
index c1cd7f4..4fc068d 100644
--- a/include/unordered_map
+++ b/include/unordered_map
@@ -521,12 +521,14 @@
 #include <__functional/is_transparent.h>
 #include <__functional/operations.h>
 #include <__hash_table>
+#include <__iterator/distance.h>
+#include <__iterator/erase_if_container.h>
 #include <__iterator/iterator_traits.h>
 #include <__memory/addressof.h>
 #include <__node_handle>
 #include <__utility/forward.h>
 #include <compare>
-#include <iterator> // __libcpp_erase_if_container
+#include <iterator> // TODO: Remove this include
 #include <stdexcept>
 #include <tuple>
 #include <version>
diff --git a/include/unordered_set b/include/unordered_set
index a74116d..48c6ff4 100644
--- a/include/unordered_set
+++ b/include/unordered_set
@@ -466,11 +466,14 @@
 #include <__functional/is_transparent.h>
 #include <__functional/operations.h>
 #include <__hash_table>
+#include <__iterator/distance.h>
+#include <__iterator/erase_if_container.h>
+#include <__iterator/iterator_traits.h>
 #include <__memory/addressof.h>
 #include <__node_handle>
 #include <__utility/forward.h>
 #include <compare>
-#include <iterator> // __libcpp_erase_if_container
+#include <iterator> // TODO: Remove this include
 #include <version>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
diff --git a/include/vector b/include/vector
index 19c6349..f3710ea 100644
--- a/include/vector
+++ b/include/vector
@@ -286,7 +286,9 @@
 #include <__format/enable_insertable.h>
 #include <__functional/hash.h>
 #include <__functional/unary_function.h>
+#include <__iterator/advance.h>
 #include <__iterator/iterator_traits.h>
+#include <__iterator/reverse_iterator.h>
 #include <__iterator/wrap_iter.h>
 #include <__memory/allocate_at_least.h>
 #include <__split_buffer>