[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>
diff --git a/src/include/to_chars_floating_point.h b/src/include/to_chars_floating_point.h
index 0bb45d0..b99d790 100644
--- a/src/include/to_chars_floating_point.h
+++ b/src/include/to_chars_floating_point.h
@@ -23,6 +23,7 @@
#include <__algorithm/min.h>
#include <__assert>
#include <__config>
+#include <__functional/operations.h>
#include <__iterator/access.h>
#include <__iterator/size.h>
#include <bit>
diff --git a/test/libcxx/algorithms/alg.modifying.operations/copy.pass.cpp b/test/libcxx/algorithms/alg.modifying.operations/copy.pass.cpp
index 11bf729..d12a238 100644
--- a/test/libcxx/algorithms/alg.modifying.operations/copy.pass.cpp
+++ b/test/libcxx/algorithms/alg.modifying.operations/copy.pass.cpp
@@ -18,6 +18,7 @@
#include <algorithm>
#include <cassert>
+#include <iterator>
#include <type_traits>
struct S {
diff --git a/test/libcxx/algorithms/specialized.algorithms/special.mem.concepts/nothrow_sentinel_for.compile.pass.cpp b/test/libcxx/algorithms/specialized.algorithms/special.mem.concepts/nothrow_sentinel_for.compile.pass.cpp
index e2c78de..1ae42da 100644
--- a/test/libcxx/algorithms/specialized.algorithms/special.mem.concepts/nothrow_sentinel_for.compile.pass.cpp
+++ b/test/libcxx/algorithms/specialized.algorithms/special.mem.concepts/nothrow_sentinel_for.compile.pass.cpp
@@ -12,6 +12,7 @@
// template<class S, class I>
// concept __nothrow_sentinel_for;
+#include <iterator>
#include <memory>
static_assert(std::ranges::__nothrow_sentinel_for<int*, int*>);
diff --git a/test/libcxx/fuzzing/fuzz.h b/test/libcxx/fuzzing/fuzz.h
index 1281879..5e70d0a 100644
--- a/test/libcxx/fuzzing/fuzz.h
+++ b/test/libcxx/fuzzing/fuzz.h
@@ -13,6 +13,7 @@
#include <cstddef>
#include <cstdint>
#include <cstring> // std::strlen
+#include <iterator>
#include <type_traits>
#include <utility> // std::swap
diff --git a/test/libcxx/numerics/numeric.ops/midpoint.integer.pass.cpp b/test/libcxx/numerics/numeric.ops/midpoint.integer.pass.cpp
index d0495df..ea9b10e 100644
--- a/test/libcxx/numerics/numeric.ops/midpoint.integer.pass.cpp
+++ b/test/libcxx/numerics/numeric.ops/midpoint.integer.pass.cpp
@@ -15,6 +15,7 @@
#include <numeric>
#include <cassert>
+#include <cstdint>
#include "test_macros.h"
// Users are not supposed to provide template argument lists for
diff --git a/test/std/algorithms/robust_against_adl.compile.pass.cpp b/test/std/algorithms/robust_against_adl.compile.pass.cpp
index 144d39c..d457baf 100644
--- a/test/std/algorithms/robust_against_adl.compile.pass.cpp
+++ b/test/std/algorithms/robust_against_adl.compile.pass.cpp
@@ -11,6 +11,7 @@
#include <algorithm>
#include <cstddef>
#include <functional>
+#include <iterator>
#include "test_macros.h"
diff --git a/test/std/containers/associative/map/map.cons/deduct_const.pass.cpp b/test/std/containers/associative/map/map.cons/deduct_const.pass.cpp
index 3da55fa..5b36d1e 100644
--- a/test/std/containers/associative/map/map.cons/deduct_const.pass.cpp
+++ b/test/std/containers/associative/map/map.cons/deduct_const.pass.cpp
@@ -29,6 +29,7 @@
#include <cassert>
#include <climits> // INT_MAX
#include <functional>
+#include <iterator>
#include <map>
#include <type_traits>
diff --git a/test/std/containers/associative/map/map.cons/move_alloc.pass.cpp b/test/std/containers/associative/map/map.cons/move_alloc.pass.cpp
index 5571167..bcfafe8 100644
--- a/test/std/containers/associative/map/map.cons/move_alloc.pass.cpp
+++ b/test/std/containers/associative/map/map.cons/move_alloc.pass.cpp
@@ -16,6 +16,7 @@
#include <map>
#include <cassert>
+#include <iterator>
#include "test_macros.h"
#include "MoveOnly.h"
diff --git a/test/std/containers/associative/multimap/multimap.cons/deduct_const.pass.cpp b/test/std/containers/associative/multimap/multimap.cons/deduct_const.pass.cpp
index 716c522..c8f25dc 100644
--- a/test/std/containers/associative/multimap/multimap.cons/deduct_const.pass.cpp
+++ b/test/std/containers/associative/multimap/multimap.cons/deduct_const.pass.cpp
@@ -29,6 +29,7 @@
#include <cassert>
#include <climits> // INT_MAX
#include <functional>
+#include <iterator>
#include <map>
#include <type_traits>
diff --git a/test/std/containers/associative/multiset/multiset.cons/move_alloc.pass.cpp b/test/std/containers/associative/multiset/multiset.cons/move_alloc.pass.cpp
index 620caae..d279dba 100644
--- a/test/std/containers/associative/multiset/multiset.cons/move_alloc.pass.cpp
+++ b/test/std/containers/associative/multiset/multiset.cons/move_alloc.pass.cpp
@@ -16,6 +16,7 @@
#include <set>
#include <cassert>
+#include <iterator>
#include "test_macros.h"
#include "MoveOnly.h"
diff --git a/test/std/containers/associative/set/insert_iter_rv.pass.cpp b/test/std/containers/associative/set/insert_iter_rv.pass.cpp
index ce490ac..5ce5182 100644
--- a/test/std/containers/associative/set/insert_iter_rv.pass.cpp
+++ b/test/std/containers/associative/set/insert_iter_rv.pass.cpp
@@ -16,6 +16,7 @@
#include <set>
#include <cassert>
+#include <iterator>
#include "test_macros.h"
#include "MoveOnly.h"
diff --git a/test/std/containers/associative/set/set.cons/move_alloc.pass.cpp b/test/std/containers/associative/set/set.cons/move_alloc.pass.cpp
index 2d9916c..59d536e 100644
--- a/test/std/containers/associative/set/set.cons/move_alloc.pass.cpp
+++ b/test/std/containers/associative/set/set.cons/move_alloc.pass.cpp
@@ -16,6 +16,7 @@
#include <set>
#include <cassert>
+#include <iterator>
#include "test_macros.h"
#include "MoveOnly.h"
diff --git a/test/std/containers/map_allocator_requirement_test_templates.h b/test/std/containers/map_allocator_requirement_test_templates.h
index 65d5773..de14d3f 100644
--- a/test/std/containers/map_allocator_requirement_test_templates.h
+++ b/test/std/containers/map_allocator_requirement_test_templates.h
@@ -21,6 +21,7 @@
// UNSUPPORTED: c++03
#include <cassert>
+#include <iterator>
#include "test_macros.h"
#include "count_new.h"
diff --git a/test/std/containers/sequences/array/array.data/data.pass.cpp b/test/std/containers/sequences/array/array.data/data.pass.cpp
index ed2d814..b0f9c3a 100644
--- a/test/std/containers/sequences/array/array.data/data.pass.cpp
+++ b/test/std/containers/sequences/array/array.data/data.pass.cpp
@@ -13,6 +13,7 @@
#include <array>
#include <cassert>
#include <cstddef> // for std::max_align_t
+#include <cstdint>
#include "test_macros.h"
diff --git a/test/std/containers/sequences/array/array.data/data_const.pass.cpp b/test/std/containers/sequences/array/array.data/data_const.pass.cpp
index d9336e3..f6c2e59 100644
--- a/test/std/containers/sequences/array/array.data/data_const.pass.cpp
+++ b/test/std/containers/sequences/array/array.data/data_const.pass.cpp
@@ -13,6 +13,7 @@
#include <array>
#include <cassert>
#include <cstddef> // for std::max_align_t
+#include <cstdint>
#include "test_macros.h"
diff --git a/test/std/containers/sequences/forwardlist/forwardlist.modifiers/clear.pass.cpp b/test/std/containers/sequences/forwardlist/forwardlist.modifiers/clear.pass.cpp
index 92427f8..55ce87c 100644
--- a/test/std/containers/sequences/forwardlist/forwardlist.modifiers/clear.pass.cpp
+++ b/test/std/containers/sequences/forwardlist/forwardlist.modifiers/clear.pass.cpp
@@ -12,6 +12,7 @@
#include <forward_list>
#include <cassert>
+#include <iterator>
#include "test_macros.h"
#include "../../../NotConstructible.h"
diff --git a/test/std/containers/sequences/forwardlist/forwardlist.modifiers/erase_after_many.pass.cpp b/test/std/containers/sequences/forwardlist/forwardlist.modifiers/erase_after_many.pass.cpp
index 23fd26f..5147655 100644
--- a/test/std/containers/sequences/forwardlist/forwardlist.modifiers/erase_after_many.pass.cpp
+++ b/test/std/containers/sequences/forwardlist/forwardlist.modifiers/erase_after_many.pass.cpp
@@ -12,6 +12,7 @@
#include <forward_list>
#include <cassert>
+#include <iterator>
#include "test_macros.h"
#include "min_allocator.h"
diff --git a/test/std/containers/sequences/forwardlist/forwardlist.modifiers/erase_after_one.pass.cpp b/test/std/containers/sequences/forwardlist/forwardlist.modifiers/erase_after_one.pass.cpp
index 06e1d8d..ce03595 100644
--- a/test/std/containers/sequences/forwardlist/forwardlist.modifiers/erase_after_one.pass.cpp
+++ b/test/std/containers/sequences/forwardlist/forwardlist.modifiers/erase_after_one.pass.cpp
@@ -12,6 +12,7 @@
#include <forward_list>
#include <cassert>
+#include <iterator>
#include "test_macros.h"
#include "min_allocator.h"
diff --git a/test/std/containers/sequences/forwardlist/forwardlist.modifiers/resize_size.pass.cpp b/test/std/containers/sequences/forwardlist/forwardlist.modifiers/resize_size.pass.cpp
index 64a6431..606440c 100644
--- a/test/std/containers/sequences/forwardlist/forwardlist.modifiers/resize_size.pass.cpp
+++ b/test/std/containers/sequences/forwardlist/forwardlist.modifiers/resize_size.pass.cpp
@@ -12,6 +12,7 @@
#include <forward_list>
#include <cassert>
+#include <iterator>
#include "test_macros.h"
#include "DefaultOnly.h"
diff --git a/test/std/containers/sequences/forwardlist/forwardlist.modifiers/resize_size_value.pass.cpp b/test/std/containers/sequences/forwardlist/forwardlist.modifiers/resize_size_value.pass.cpp
index 33e9c28..3c0b64e 100644
--- a/test/std/containers/sequences/forwardlist/forwardlist.modifiers/resize_size_value.pass.cpp
+++ b/test/std/containers/sequences/forwardlist/forwardlist.modifiers/resize_size_value.pass.cpp
@@ -12,6 +12,7 @@
#include <forward_list>
#include <cassert>
+#include <iterator>
#include "test_macros.h"
#include "DefaultOnly.h"
diff --git a/test/std/containers/sequences/forwardlist/forwardlist.spec/member_swap.pass.cpp b/test/std/containers/sequences/forwardlist/forwardlist.spec/member_swap.pass.cpp
index ba225b4..6b16d66 100644
--- a/test/std/containers/sequences/forwardlist/forwardlist.spec/member_swap.pass.cpp
+++ b/test/std/containers/sequences/forwardlist/forwardlist.spec/member_swap.pass.cpp
@@ -13,6 +13,7 @@
#include <forward_list>
#include <cassert>
+#include <iterator>
#include "test_macros.h"
#include "test_allocator.h"
diff --git a/test/std/containers/sequences/forwardlist/forwardlist.spec/non_member_swap.pass.cpp b/test/std/containers/sequences/forwardlist/forwardlist.spec/non_member_swap.pass.cpp
index 3edc8bc..e46a55c 100644
--- a/test/std/containers/sequences/forwardlist/forwardlist.spec/non_member_swap.pass.cpp
+++ b/test/std/containers/sequences/forwardlist/forwardlist.spec/non_member_swap.pass.cpp
@@ -14,6 +14,7 @@
#include <forward_list>
#include <cassert>
+#include <iterator>
#include "test_macros.h"
#include "test_allocator.h"
diff --git a/test/std/containers/sequences/vector.bool/erase_iter.pass.cpp b/test/std/containers/sequences/vector.bool/erase_iter.pass.cpp
index 483d2ac..53a3eac 100644
--- a/test/std/containers/sequences/vector.bool/erase_iter.pass.cpp
+++ b/test/std/containers/sequences/vector.bool/erase_iter.pass.cpp
@@ -13,6 +13,7 @@
#include <vector>
#include <cassert>
+#include <iterator>
#include "test_macros.h"
#include "min_allocator.h"
diff --git a/test/std/containers/sequences/vector.bool/erase_iter_iter.pass.cpp b/test/std/containers/sequences/vector.bool/erase_iter_iter.pass.cpp
index 5461d75..c2c6e56 100644
--- a/test/std/containers/sequences/vector.bool/erase_iter_iter.pass.cpp
+++ b/test/std/containers/sequences/vector.bool/erase_iter_iter.pass.cpp
@@ -13,6 +13,7 @@
#include <vector>
#include <cassert>
+#include <iterator>
#include "test_macros.h"
#include "min_allocator.h"
diff --git a/test/std/containers/sequences/vector.bool/vector_bool.pass.cpp b/test/std/containers/sequences/vector.bool/vector_bool.pass.cpp
index e2cf53e..cda5ba8 100644
--- a/test/std/containers/sequences/vector.bool/vector_bool.pass.cpp
+++ b/test/std/containers/sequences/vector.bool/vector_bool.pass.cpp
@@ -19,6 +19,7 @@
#include <vector>
#include <cassert>
+#include <iterator>
#include <type_traits>
#include "test_macros.h"
diff --git a/test/std/containers/set_allocator_requirement_test_templates.h b/test/std/containers/set_allocator_requirement_test_templates.h
index 78b0c82..68b77a2 100644
--- a/test/std/containers/set_allocator_requirement_test_templates.h
+++ b/test/std/containers/set_allocator_requirement_test_templates.h
@@ -20,6 +20,7 @@
#include <cassert>
+#include <iterator>
#include "test_macros.h"
#include "count_new.h"
diff --git a/test/std/containers/unord/unord.map/bucket.pass.cpp b/test/std/containers/unord/unord.map/bucket.pass.cpp
index 93c177a..0f2e721 100644
--- a/test/std/containers/unord/unord.map/bucket.pass.cpp
+++ b/test/std/containers/unord/unord.map/bucket.pass.cpp
@@ -17,6 +17,7 @@
#include <unordered_map>
#include <string>
#include <cassert>
+#include <iterator>
#include "test_macros.h"
#include "min_allocator.h"
diff --git a/test/std/containers/unord/unord.map/bucket_count.pass.cpp b/test/std/containers/unord/unord.map/bucket_count.pass.cpp
index ee1a125..6283408 100644
--- a/test/std/containers/unord/unord.map/bucket_count.pass.cpp
+++ b/test/std/containers/unord/unord.map/bucket_count.pass.cpp
@@ -17,6 +17,7 @@
#include <unordered_map>
#include <string>
#include <cassert>
+#include <iterator>
#include "test_macros.h"
#include "min_allocator.h"
diff --git a/test/std/containers/unord/unord.map/bucket_size.pass.cpp b/test/std/containers/unord/unord.map/bucket_size.pass.cpp
index 31adf31..110ac5e 100644
--- a/test/std/containers/unord/unord.map/bucket_size.pass.cpp
+++ b/test/std/containers/unord/unord.map/bucket_size.pass.cpp
@@ -17,6 +17,7 @@
#include <unordered_map>
#include <string>
#include <cassert>
+#include <iterator>
#include "test_macros.h"
#include "min_allocator.h"
diff --git a/test/std/containers/unord/unord.map/count.pass.cpp b/test/std/containers/unord/unord.map/count.pass.cpp
index fc83dc4..a003208 100644
--- a/test/std/containers/unord/unord.map/count.pass.cpp
+++ b/test/std/containers/unord/unord.map/count.pass.cpp
@@ -17,6 +17,7 @@
#include <unordered_map>
#include <string>
#include <cassert>
+#include <iterator>
#include "test_macros.h"
#include "min_allocator.h"
diff --git a/test/std/containers/unord/unord.map/eq.pass.cpp b/test/std/containers/unord/unord.map/eq.pass.cpp
index bcb6cb7..5b4dfe3 100644
--- a/test/std/containers/unord/unord.map/eq.pass.cpp
+++ b/test/std/containers/unord/unord.map/eq.pass.cpp
@@ -21,6 +21,7 @@
#include <unordered_map>
#include <string>
#include <cassert>
+#include <iterator>
#include "test_macros.h"
#include "min_allocator.h"
diff --git a/test/std/containers/unord/unord.map/equal_range_const.pass.cpp b/test/std/containers/unord/unord.map/equal_range_const.pass.cpp
index 3519fb5..eb8beae 100644
--- a/test/std/containers/unord/unord.map/equal_range_const.pass.cpp
+++ b/test/std/containers/unord/unord.map/equal_range_const.pass.cpp
@@ -17,6 +17,7 @@
#include <unordered_map>
#include <string>
#include <cassert>
+#include <iterator>
#include "test_macros.h"
#include "min_allocator.h"
diff --git a/test/std/containers/unord/unord.map/equal_range_non_const.pass.cpp b/test/std/containers/unord/unord.map/equal_range_non_const.pass.cpp
index 47dc892..f0e268e 100644
--- a/test/std/containers/unord/unord.map/equal_range_non_const.pass.cpp
+++ b/test/std/containers/unord/unord.map/equal_range_non_const.pass.cpp
@@ -17,6 +17,7 @@
#include <unordered_map>
#include <string>
#include <cassert>
+#include <iterator>
#include "test_macros.h"
#include "min_allocator.h"
diff --git a/test/std/containers/unord/unord.map/find_const.pass.cpp b/test/std/containers/unord/unord.map/find_const.pass.cpp
index 7da7a9c..fa8417b 100644
--- a/test/std/containers/unord/unord.map/find_const.pass.cpp
+++ b/test/std/containers/unord/unord.map/find_const.pass.cpp
@@ -17,6 +17,7 @@
#include <unordered_map>
#include <string>
#include <cassert>
+#include <iterator>
#include "test_macros.h"
#include "min_allocator.h"
diff --git a/test/std/containers/unord/unord.map/find_non_const.pass.cpp b/test/std/containers/unord/unord.map/find_non_const.pass.cpp
index e242a7d..00c5605 100644
--- a/test/std/containers/unord/unord.map/find_non_const.pass.cpp
+++ b/test/std/containers/unord/unord.map/find_non_const.pass.cpp
@@ -17,6 +17,7 @@
#include <unordered_map>
#include <string>
#include <cassert>
+#include <iterator>
#include "test_macros.h"
#include "min_allocator.h"
diff --git a/test/std/containers/unord/unord.map/load_factor.pass.cpp b/test/std/containers/unord/unord.map/load_factor.pass.cpp
index 7a5fde8..6bb7f89 100644
--- a/test/std/containers/unord/unord.map/load_factor.pass.cpp
+++ b/test/std/containers/unord/unord.map/load_factor.pass.cpp
@@ -19,6 +19,7 @@
#include <cassert>
#include <cmath>
#include <cfloat>
+#include <iterator>
#include "test_macros.h"
#include "min_allocator.h"
diff --git a/test/std/containers/unord/unord.map/swap_member.pass.cpp b/test/std/containers/unord/unord.map/swap_member.pass.cpp
index 2053e58..955aa31 100644
--- a/test/std/containers/unord/unord.map/swap_member.pass.cpp
+++ b/test/std/containers/unord/unord.map/swap_member.pass.cpp
@@ -18,6 +18,7 @@
#include <string>
#include <cassert>
#include <cstddef>
+#include <iterator>
#include "../../test_compare.h"
#include "../../test_hash.h"
diff --git a/test/std/containers/unord/unord.map/unord.map.cnstr/deduct.pass.cpp b/test/std/containers/unord/unord.map/unord.map.cnstr/deduct.pass.cpp
index d543e38..9a36348 100644
--- a/test/std/containers/unord/unord.map/unord.map.cnstr/deduct.pass.cpp
+++ b/test/std/containers/unord/unord.map/unord.map.cnstr/deduct.pass.cpp
@@ -58,6 +58,7 @@
#include <algorithm> // is_permutation
#include <cassert>
#include <climits> // INT_MAX
+#include <iterator>
#include <type_traits>
#include <unordered_map>
diff --git a/test/std/containers/unord/unord.map/unord.map.cnstr/deduct_const.pass.cpp b/test/std/containers/unord/unord.map/unord.map.cnstr/deduct_const.pass.cpp
index 506a2b7..547eef0 100644
--- a/test/std/containers/unord/unord.map/unord.map.cnstr/deduct_const.pass.cpp
+++ b/test/std/containers/unord/unord.map/unord.map.cnstr/deduct_const.pass.cpp
@@ -58,6 +58,7 @@
#include <algorithm> // std::is_permutation
#include <cassert>
#include <climits> // INT_MAX
+#include <iterator>
#include <type_traits>
#include <unordered_map>
diff --git a/test/std/containers/unord/unord.map/unord.map.modifiers/erase_range.pass.cpp b/test/std/containers/unord/unord.map/unord.map.modifiers/erase_range.pass.cpp
index 63346e1..f6baeec 100644
--- a/test/std/containers/unord/unord.map/unord.map.modifiers/erase_range.pass.cpp
+++ b/test/std/containers/unord/unord.map/unord.map.modifiers/erase_range.pass.cpp
@@ -17,6 +17,7 @@
#include <unordered_map>
#include <string>
#include <cassert>
+#include <iterator>
#include "test_macros.h"
#include "min_allocator.h"
diff --git a/test/std/containers/unord/unord.map/unord.map.modifiers/extract_key.pass.cpp b/test/std/containers/unord/unord.map/unord.map.modifiers/extract_key.pass.cpp
index 4b42db8..e1c893f 100644
--- a/test/std/containers/unord/unord.map/unord.map.modifiers/extract_key.pass.cpp
+++ b/test/std/containers/unord/unord.map/unord.map.modifiers/extract_key.pass.cpp
@@ -14,7 +14,9 @@
// node_type extract(key_type const&);
+#include <iterator>
#include <unordered_map>
+
#include "test_macros.h"
#include "min_allocator.h"
#include "Counter.h"
diff --git a/test/std/containers/unord/unord.map/unord.map.modifiers/insert_or_assign.pass.cpp b/test/std/containers/unord/unord.map/unord.map.modifiers/insert_or_assign.pass.cpp
index 6d7e945..1b7c9e0 100644
--- a/test/std/containers/unord/unord.map/unord.map.modifiers/insert_or_assign.pass.cpp
+++ b/test/std/containers/unord/unord.map/unord.map.modifiers/insert_or_assign.pass.cpp
@@ -23,6 +23,7 @@
#include <unordered_map>
#include <cassert>
+#include <iterator>
#include <tuple>
#include "test_macros.h"
diff --git a/test/std/containers/unord/unord.map/unord.map.modifiers/try.emplace.pass.cpp b/test/std/containers/unord/unord.map/unord.map.modifiers/try.emplace.pass.cpp
index 945d972..bf2c317 100644
--- a/test/std/containers/unord/unord.map/unord.map.modifiers/try.emplace.pass.cpp
+++ b/test/std/containers/unord/unord.map/unord.map.modifiers/try.emplace.pass.cpp
@@ -23,6 +23,7 @@
#include <unordered_map>
#include <cassert>
+#include <iterator>
#include <tuple>
#include "test_macros.h"
diff --git a/test/std/containers/unord/unord.multimap/bucket.pass.cpp b/test/std/containers/unord/unord.multimap/bucket.pass.cpp
index 981cb33..80c97dd 100644
--- a/test/std/containers/unord/unord.multimap/bucket.pass.cpp
+++ b/test/std/containers/unord/unord.multimap/bucket.pass.cpp
@@ -17,6 +17,7 @@
#include <unordered_map>
#include <string>
#include <cassert>
+#include <iterator>
#include "test_macros.h"
#include "min_allocator.h"
diff --git a/test/std/containers/unord/unord.multimap/bucket_count.pass.cpp b/test/std/containers/unord/unord.multimap/bucket_count.pass.cpp
index 9c07357..3515dbc 100644
--- a/test/std/containers/unord/unord.multimap/bucket_count.pass.cpp
+++ b/test/std/containers/unord/unord.multimap/bucket_count.pass.cpp
@@ -17,6 +17,7 @@
#include <unordered_map>
#include <string>
#include <cassert>
+#include <iterator>
#include "test_macros.h"
diff --git a/test/std/containers/unord/unord.multimap/bucket_size.pass.cpp b/test/std/containers/unord/unord.multimap/bucket_size.pass.cpp
index 7e0a947..1659fef 100644
--- a/test/std/containers/unord/unord.multimap/bucket_size.pass.cpp
+++ b/test/std/containers/unord/unord.multimap/bucket_size.pass.cpp
@@ -17,6 +17,7 @@
#include <unordered_map>
#include <string>
#include <cassert>
+#include <iterator>
#include "test_macros.h"
#include "min_allocator.h"
diff --git a/test/std/containers/unord/unord.multimap/count.pass.cpp b/test/std/containers/unord/unord.multimap/count.pass.cpp
index d3a82be..4ece256 100644
--- a/test/std/containers/unord/unord.multimap/count.pass.cpp
+++ b/test/std/containers/unord/unord.multimap/count.pass.cpp
@@ -17,6 +17,7 @@
#include <unordered_map>
#include <string>
#include <cassert>
+#include <iterator>
#include "test_macros.h"
#include "min_allocator.h"
diff --git a/test/std/containers/unord/unord.multimap/eq.pass.cpp b/test/std/containers/unord/unord.multimap/eq.pass.cpp
index 1ebf120..9b7ee30 100644
--- a/test/std/containers/unord/unord.multimap/eq.pass.cpp
+++ b/test/std/containers/unord/unord.multimap/eq.pass.cpp
@@ -21,6 +21,7 @@
#include <unordered_map>
#include <string>
#include <cassert>
+#include <iterator>
#include "test_macros.h"
#include "min_allocator.h"
diff --git a/test/std/containers/unord/unord.multimap/equal_range_const.pass.cpp b/test/std/containers/unord/unord.multimap/equal_range_const.pass.cpp
index e936b96..c827ae5 100644
--- a/test/std/containers/unord/unord.multimap/equal_range_const.pass.cpp
+++ b/test/std/containers/unord/unord.multimap/equal_range_const.pass.cpp
@@ -18,6 +18,7 @@
#include <string>
#include <set>
#include <cassert>
+#include <iterator>
#include "test_macros.h"
#include "min_allocator.h"
diff --git a/test/std/containers/unord/unord.multimap/equal_range_non_const.pass.cpp b/test/std/containers/unord/unord.multimap/equal_range_non_const.pass.cpp
index 7549103..6cfa586 100644
--- a/test/std/containers/unord/unord.multimap/equal_range_non_const.pass.cpp
+++ b/test/std/containers/unord/unord.multimap/equal_range_non_const.pass.cpp
@@ -18,6 +18,7 @@
#include <string>
#include <set>
#include <cassert>
+#include <iterator>
#include "test_macros.h"
#include "min_allocator.h"
diff --git a/test/std/containers/unord/unord.multimap/find_const.pass.cpp b/test/std/containers/unord/unord.multimap/find_const.pass.cpp
index b35bed3..d9ccd86 100644
--- a/test/std/containers/unord/unord.multimap/find_const.pass.cpp
+++ b/test/std/containers/unord/unord.multimap/find_const.pass.cpp
@@ -17,6 +17,7 @@
#include <unordered_map>
#include <string>
#include <cassert>
+#include <iterator>
#include "test_macros.h"
#include "min_allocator.h"
diff --git a/test/std/containers/unord/unord.multimap/find_non_const.pass.cpp b/test/std/containers/unord/unord.multimap/find_non_const.pass.cpp
index 2b82372..5f9b60f 100644
--- a/test/std/containers/unord/unord.multimap/find_non_const.pass.cpp
+++ b/test/std/containers/unord/unord.multimap/find_non_const.pass.cpp
@@ -17,6 +17,7 @@
#include <unordered_map>
#include <string>
#include <cassert>
+#include <iterator>
#include "test_macros.h"
#include "min_allocator.h"
diff --git a/test/std/containers/unord/unord.multimap/load_factor.pass.cpp b/test/std/containers/unord/unord.multimap/load_factor.pass.cpp
index 4e848ef..81284ed 100644
--- a/test/std/containers/unord/unord.multimap/load_factor.pass.cpp
+++ b/test/std/containers/unord/unord.multimap/load_factor.pass.cpp
@@ -19,6 +19,7 @@
#include <cassert>
#include <cfloat>
#include <cmath>
+#include <iterator>
#include "test_macros.h"
#include "min_allocator.h"
diff --git a/test/std/containers/unord/unord.multimap/swap_member.pass.cpp b/test/std/containers/unord/unord.multimap/swap_member.pass.cpp
index 25f19f9..257938b 100644
--- a/test/std/containers/unord/unord.multimap/swap_member.pass.cpp
+++ b/test/std/containers/unord/unord.multimap/swap_member.pass.cpp
@@ -19,6 +19,7 @@
#include <set>
#include <cassert>
#include <cstddef>
+#include <iterator>
#include "test_macros.h"
#include "../../test_compare.h"
diff --git a/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/deduct_const.pass.cpp b/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/deduct_const.pass.cpp
index c22f121..5a98a01 100644
--- a/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/deduct_const.pass.cpp
+++ b/test/std/containers/unord/unord.multimap/unord.multimap.cnstr/deduct_const.pass.cpp
@@ -59,6 +59,7 @@
#include <cassert>
#include <climits> // INT_MAX
#include <functional>
+#include <iterator>
#include <type_traits>
#include <unordered_map>
diff --git a/test/std/containers/unord/unord.multimap/unord.multimap.modifiers/emplace_hint.pass.cpp b/test/std/containers/unord/unord.multimap/unord.multimap.modifiers/emplace_hint.pass.cpp
index 9dcb0a4..2a6e3f6 100644
--- a/test/std/containers/unord/unord.multimap/unord.multimap.modifiers/emplace_hint.pass.cpp
+++ b/test/std/containers/unord/unord.multimap/unord.multimap.modifiers/emplace_hint.pass.cpp
@@ -20,6 +20,7 @@
#include <unordered_map>
#include <cassert>
+#include <iterator>
#include "../../../Emplaceable.h"
#include "min_allocator.h"
diff --git a/test/std/containers/unord/unord.multimap/unord.multimap.swap/swap_non_member.pass.cpp b/test/std/containers/unord/unord.multimap/unord.multimap.swap/swap_non_member.pass.cpp
index 692aa98..8aafbdd 100644
--- a/test/std/containers/unord/unord.multimap/unord.multimap.swap/swap_non_member.pass.cpp
+++ b/test/std/containers/unord/unord.multimap/unord.multimap.swap/swap_non_member.pass.cpp
@@ -19,6 +19,7 @@
#include <set>
#include <cassert>
#include <cstddef>
+#include <iterator>
#include "test_macros.h"
#include "../../../check_consecutive.h"
diff --git a/test/std/containers/views/views.span/span.cons/assign.pass.cpp b/test/std/containers/views/views.span/span.cons/assign.pass.cpp
index 0228386..7481987 100644
--- a/test/std/containers/views/views.span/span.cons/assign.pass.cpp
+++ b/test/std/containers/views/views.span/span.cons/assign.pass.cpp
@@ -13,6 +13,7 @@
#include <span>
#include <cassert>
+#include <iterator>
#include <string>
#include <utility>
diff --git a/test/std/containers/views/views.span/span.cons/deduct.pass.cpp b/test/std/containers/views/views.span/span.cons/deduct.pass.cpp
index e632fec..398862d 100644
--- a/test/std/containers/views/views.span/span.cons/deduct.pass.cpp
+++ b/test/std/containers/views/views.span/span.cons/deduct.pass.cpp
@@ -28,6 +28,7 @@
#include <span>
#include <array>
#include <cassert>
+#include <iterator>
#include <memory>
#include <string>
diff --git a/test/std/re/re.iter/re.regiter/re.regiter.incr/post.pass.cpp b/test/std/re/re.iter/re.regiter/re.regiter.incr/post.pass.cpp
index cf14ac6..9332158 100644
--- a/test/std/re/re.iter/re.regiter/re.regiter.incr/post.pass.cpp
+++ b/test/std/re/re.iter/re.regiter/re.regiter.incr/post.pass.cpp
@@ -14,6 +14,7 @@
#include <regex>
#include <cassert>
+#include <iterator>
#include "test_macros.h"
int main(int, char**)
diff --git a/test/std/re/re.iter/re.tokiter/re.tokiter.cnstr/array.pass.cpp b/test/std/re/re.iter/re.tokiter/re.tokiter.cnstr/array.pass.cpp
index 254909a..ed1d5ee 100644
--- a/test/std/re/re.iter/re.tokiter/re.tokiter.cnstr/array.pass.cpp
+++ b/test/std/re/re.iter/re.tokiter/re.tokiter.cnstr/array.pass.cpp
@@ -19,6 +19,8 @@
#include <regex>
#include <cassert>
+#include <iterator>
+
#include "test_macros.h"
int main(int, char**)
diff --git a/test/std/re/re.iter/re.tokiter/re.tokiter.cnstr/init.pass.cpp b/test/std/re/re.iter/re.tokiter/re.tokiter.cnstr/init.pass.cpp
index 018dca2..a508781 100644
--- a/test/std/re/re.iter/re.tokiter/re.tokiter.cnstr/init.pass.cpp
+++ b/test/std/re/re.iter/re.tokiter/re.tokiter.cnstr/init.pass.cpp
@@ -20,6 +20,8 @@
#include <regex>
#include <cassert>
+#include <iterator>
+
#include "test_macros.h"
int main(int, char**)
diff --git a/test/std/re/re.iter/re.tokiter/re.tokiter.cnstr/int.pass.cpp b/test/std/re/re.iter/re.tokiter/re.tokiter.cnstr/int.pass.cpp
index 1e5ba2e..2abed8e 100644
--- a/test/std/re/re.iter/re.tokiter/re.tokiter.cnstr/int.pass.cpp
+++ b/test/std/re/re.iter/re.tokiter/re.tokiter.cnstr/int.pass.cpp
@@ -17,6 +17,8 @@
#include <regex>
#include <cassert>
+#include <iterator>
+
#include "test_macros.h"
int main(int, char**)
diff --git a/test/std/re/re.iter/re.tokiter/re.tokiter.cnstr/vector.pass.cpp b/test/std/re/re.iter/re.tokiter/re.tokiter.cnstr/vector.pass.cpp
index 1d77deb..b2ef0b2 100644
--- a/test/std/re/re.iter/re.tokiter/re.tokiter.cnstr/vector.pass.cpp
+++ b/test/std/re/re.iter/re.tokiter/re.tokiter.cnstr/vector.pass.cpp
@@ -18,6 +18,8 @@
#include <regex>
#include <cassert>
+#include <iterator>
+
#include "test_macros.h"
int main(int, char**)
diff --git a/test/std/re/re.iter/re.tokiter/re.tokiter.deref/deref.pass.cpp b/test/std/re/re.iter/re.tokiter/re.tokiter.deref/deref.pass.cpp
index facd243..1785df2 100644
--- a/test/std/re/re.iter/re.tokiter/re.tokiter.deref/deref.pass.cpp
+++ b/test/std/re/re.iter/re.tokiter/re.tokiter.deref/deref.pass.cpp
@@ -14,6 +14,8 @@
#include <regex>
#include <cassert>
+#include <iterator>
+
#include "test_macros.h"
int main(int, char**)
diff --git a/test/std/re/re.iter/re.tokiter/re.tokiter.incr/post.pass.cpp b/test/std/re/re.iter/re.tokiter/re.tokiter.incr/post.pass.cpp
index 15f1bb7..8d44f3a 100644
--- a/test/std/re/re.iter/re.tokiter/re.tokiter.incr/post.pass.cpp
+++ b/test/std/re/re.iter/re.tokiter/re.tokiter.incr/post.pass.cpp
@@ -14,6 +14,8 @@
#include <regex>
#include <cassert>
+#include <iterator>
+
#include "test_macros.h"
int main(int, char**)
diff --git a/test/std/strings/string.view/string.view.access/data.pass.cpp b/test/std/strings/string.view/string.view.access/data.pass.cpp
index 715c8b7..1c8540a 100644
--- a/test/std/strings/string.view/string.view.access/data.pass.cpp
+++ b/test/std/strings/string.view/string.view.access/data.pass.cpp
@@ -14,6 +14,7 @@
#include <string_view>
#include <cassert>
+#include <iterator>
#include "test_macros.h"
diff --git a/test/std/strings/string.view/string.view.capacity/capacity.pass.cpp b/test/std/strings/string.view/string.view.capacity/capacity.pass.cpp
index ae6390c..fcc5b7f 100644
--- a/test/std/strings/string.view/string.view.capacity/capacity.pass.cpp
+++ b/test/std/strings/string.view/string.view.capacity/capacity.pass.cpp
@@ -18,6 +18,7 @@
#include <string_view>
#include <cassert>
+#include <iterator>
#include <limits>
#include "test_macros.h"
diff --git a/test/std/utilities/charconv/charconv.msvc/test.cpp b/test/std/utilities/charconv/charconv.msvc/test.cpp
index ed2bc16..8652a2d 100644
--- a/test/std/utilities/charconv/charconv.msvc/test.cpp
+++ b/test/std/utilities/charconv/charconv.msvc/test.cpp
@@ -11,6 +11,7 @@
#include <cmath>
#include <fstream>
#include <functional>
+#include <iterator>
#include <limits>
#include <locale>
#include <optional>
diff --git a/test/std/utilities/format/format.functions/format_tests.h b/test/std/utilities/format/format.functions/format_tests.h
index 4ee580b..d8ba8c5 100644
--- a/test/std/utilities/format/format.functions/format_tests.h
+++ b/test/std/utilities/format/format.functions/format_tests.h
@@ -11,9 +11,11 @@
#include <format>
#include <algorithm>
+#include <cassert>
#include <charconv>
#include <cmath>
#include <cstdint>
+#include <iterator>
#include "make_string.h"
#include "string_literal.h"
diff --git a/test/std/utilities/memory/allocator.traits/allocate_at_least.pass.cpp b/test/std/utilities/memory/allocator.traits/allocate_at_least.pass.cpp
index 2af85f7..f33dbff 100644
--- a/test/std/utilities/memory/allocator.traits/allocate_at_least.pass.cpp
+++ b/test/std/utilities/memory/allocator.traits/allocate_at_least.pass.cpp
@@ -15,6 +15,7 @@
// allocate_at_least(Allocator& a, size_t n);
#include <cassert>
+#include <concepts>
#include <memory>
// check that std::allocation_result exists and isn't restricted to pointers
diff --git a/test/std/utilities/memory/default.allocator/allocator.members/allocate_at_least.pass.cpp b/test/std/utilities/memory/default.allocator/allocator.members/allocate_at_least.pass.cpp
index a12c122..6ac63a4 100644
--- a/test/std/utilities/memory/default.allocator/allocator.members/allocate_at_least.pass.cpp
+++ b/test/std/utilities/memory/default.allocator/allocator.members/allocate_at_least.pass.cpp
@@ -13,6 +13,7 @@
// allocation_result<T*> allocate_at_least(size_t n)
#include <cassert>
+#include <concepts>
#include <memory>
#include "count_new.h"
diff --git a/test/std/utilities/memory/storage.iterator/types.compile.pass.cpp b/test/std/utilities/memory/storage.iterator/types.compile.pass.cpp
index 0772124..d11ab1a 100644
--- a/test/std/utilities/memory/storage.iterator/types.compile.pass.cpp
+++ b/test/std/utilities/memory/storage.iterator/types.compile.pass.cpp
@@ -12,6 +12,7 @@
// raw_storage_iterator associated types
#include <cstddef>
+#include <iterator>
#include <memory>
#include <type_traits>
diff --git a/test/support/archetypes.h b/test/support/archetypes.h
index 073f395..53545f6 100644
--- a/test/support/archetypes.h
+++ b/test/support/archetypes.h
@@ -11,6 +11,7 @@
#include <type_traits>
#include <cassert>
+#include <initializer_list>
#include "test_macros.h"
#include "test_workarounds.h"
diff --git a/test/support/deduction_guides_sfinae_checks.h b/test/support/deduction_guides_sfinae_checks.h
index a4910a1..767ff02 100644
--- a/test/support/deduction_guides_sfinae_checks.h
+++ b/test/support/deduction_guides_sfinae_checks.h
@@ -11,6 +11,7 @@
#include <functional>
#include <initializer_list>
+#include <iterator>
#include <memory>
#include <type_traits>
#include <utility>
diff --git a/test/support/min_allocator.h b/test/support/min_allocator.h
index 0cf050e..a216974 100644
--- a/test/support/min_allocator.h
+++ b/test/support/min_allocator.h
@@ -14,6 +14,7 @@
#include <cstddef>
#include <cassert>
#include <climits>
+#include <iterator>
#include <memory>
#include "test_macros.h"