[libcxx-commits] [libcxx] cad2ca9 - [libc++] Granularize includes of <optional> (#213433)

via libcxx-commits libcxx-commits at lists.llvm.org
Tue Aug 4 03:55:09 PDT 2026


Author: Michael G. Kazakov
Date: 2026-08-04T18:55:04+08:00
New Revision: cad2ca9a775c094f8e0687f1e2414a2ea25e1487

URL: https://github.com/llvm/llvm-project/commit/cad2ca9a775c094f8e0687f1e2414a2ea25e1487
DIFF: https://github.com/llvm/llvm-project/commit/cad2ca9a775c094f8e0687f1e2414a2ea25e1487.diff

LOG: [libc++] Granularize includes of <optional> (#213433)

Since `<optional>` is now granularized
(7ded638ea33b96d9fd628e2a5cbc06df12ede153), include its individual
pieces directly, instead of pulling in the whole `<optional>`.

This change is also needed for #211888.

Added: 
    

Modified: 
    libcxx/include/__algorithm/ranges_fold.h
    libcxx/include/__format/format_context.h
    libcxx/include/__format/format_functions.h
    libcxx/include/__node_handle
    libcxx/include/__pstl/backends/default.h
    libcxx/include/__pstl/backends/libdispatch.h
    libcxx/include/__pstl/backends/serial.h
    libcxx/include/__pstl/backends/std_thread.h
    libcxx/include/__pstl/cpu_algos/any_of.h
    libcxx/include/__pstl/cpu_algos/fill.h
    libcxx/include/__pstl/cpu_algos/find_if.h
    libcxx/include/__pstl/cpu_algos/for_each.h
    libcxx/include/__pstl/cpu_algos/merge.h
    libcxx/include/__pstl/cpu_algos/mismatch.h
    libcxx/include/__pstl/cpu_algos/stable_sort.h
    libcxx/include/__pstl/cpu_algos/transform.h
    libcxx/include/__pstl/cpu_algos/transform_reduce.h
    libcxx/include/__pstl/handle_exception.h
    libcxx/include/__ranges/join_view.h
    libcxx/include/__ranges/movable_box.h
    libcxx/include/__ranges/non_propagating_cache.h
    libcxx/include/algorithm
    libcxx/include/chrono
    libcxx/include/flat_map
    libcxx/include/flat_set
    libcxx/include/format
    libcxx/include/functional
    libcxx/include/iostream
    libcxx/include/map
    libcxx/include/numeric
    libcxx/include/ostream
    libcxx/include/print
    libcxx/include/random
    libcxx/include/ranges
    libcxx/include/set
    libcxx/include/syncstream
    libcxx/include/unordered_map
    libcxx/include/unordered_set
    libcxx/test/libcxx/transitive_includes/cxx26.csv

Removed: 
    


################################################################################
diff  --git a/libcxx/include/__algorithm/ranges_fold.h b/libcxx/include/__algorithm/ranges_fold.h
index a82d9acfcea8c..27e042395dad0 100644
--- a/libcxx/include/__algorithm/ranges_fold.h
+++ b/libcxx/include/__algorithm/ranges_fold.h
@@ -25,6 +25,7 @@
 #include <__iterator/next.h>
 #include <__iterator/prev.h>
 #include <__iterator/reverse_iterator.h>
+#include <__optional/optional.h>
 #include <__ranges/access.h>
 #include <__ranges/concepts.h>
 #include <__ranges/dangling.h>
@@ -33,7 +34,6 @@
 #include <__utility/forward.h>
 #include <__utility/in_place.h>
 #include <__utility/move.h>
-#include <optional>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header

diff  --git a/libcxx/include/__format/format_context.h b/libcxx/include/__format/format_context.h
index cf3131b80e52f..6c21d792ef331 100644
--- a/libcxx/include/__format/format_context.h
+++ b/libcxx/include/__format/format_context.h
@@ -12,6 +12,7 @@
 
 #include <__concepts/same_as.h>
 #include <__config>
+#include <__cstddef/size_t.h>
 #include <__format/buffer.h>
 #include <__format/format_arg.h>
 #include <__format/format_arg_store.h>
@@ -26,7 +27,8 @@
 
 #if _LIBCPP_HAS_LOCALIZATION
 #  include <__locale>
-#  include <optional>
+#  include <__optional/nullopt_t.h>
+#  include <__optional/optional.h>
 #endif
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)

diff  --git a/libcxx/include/__format/format_functions.h b/libcxx/include/__format/format_functions.h
index b58e487d7511e..8dfa0786c82b1 100644
--- a/libcxx/include/__format/format_functions.h
+++ b/libcxx/include/__format/format_functions.h
@@ -36,9 +36,10 @@
 #include <__iterator/concepts.h>
 #include <__iterator/incrementable_traits.h>
 #include <__iterator/iterator_traits.h> // iter_value_t
+#include <__optional/nullopt_t.h>
+#include <__optional/optional.h>
 #include <__variant/monostate.h>
 #include <array>
-#include <optional>
 #include <string>
 #include <string_view>
 

diff  --git a/libcxx/include/__node_handle b/libcxx/include/__node_handle
index 8f4e34d47ac59..44ce7cafec0d8 100644
--- a/libcxx/include/__node_handle
+++ b/libcxx/include/__node_handle
@@ -62,11 +62,13 @@ public:
 #include <__config>
 #include <__memory/allocator_traits.h>
 #include <__memory/pointer_traits.h>
+#include <__optional/comparison.h>
+#include <__optional/nullopt_t.h>
+#include <__optional/optional.h>
 #include <__type_traits/is_specialization.h>
 #include <__type_traits/remove_const.h>
 #include <__utility/exchange.h>
 #include <__utility/move.h>
-#include <optional>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header

diff  --git a/libcxx/include/__pstl/backends/default.h b/libcxx/include/__pstl/backends/default.h
index d2c382e1d479f..5562c23bf09f1 100644
--- a/libcxx/include/__pstl/backends/default.h
+++ b/libcxx/include/__pstl/backends/default.h
@@ -27,13 +27,15 @@
 #include <__iterator/next.h>
 #include <__iterator/prev.h>
 #include <__iterator/reverse_iterator.h>
+#include <__optional/comparison.h>
+#include <__optional/nullopt_t.h>
+#include <__optional/optional.h>
 #include <__pstl/backend_fwd.h>
 #include <__pstl/dispatch.h>
 #include <__type_traits/desugars_to.h>
 #include <__utility/empty.h>
 #include <__utility/forward.h>
 #include <__utility/move.h>
-#include <optional>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header

diff  --git a/libcxx/include/__pstl/backends/libdispatch.h b/libcxx/include/__pstl/backends/libdispatch.h
index 361c86937534c..ee698742152f3 100644
--- a/libcxx/include/__pstl/backends/libdispatch.h
+++ b/libcxx/include/__pstl/backends/libdispatch.h
@@ -21,6 +21,7 @@
 #include <__atomic/atomic.h>
 #include <__config>
 #include <__cstddef/ptr
diff _t.h>
+#include <__cstddef/size_t.h>
 #include <__exception/terminate.h>
 #include <__iterator/iterator_traits.h>
 #include <__iterator/move_iterator.h>
@@ -30,6 +31,8 @@
 #include <__memory/unique_ptr.h>
 #include <__new/exceptions.h>
 #include <__numeric/reduce.h>
+#include <__optional/nullopt_t.h>
+#include <__optional/optional.h>
 #include <__pstl/backend_fwd.h>
 #include <__pstl/cpu_algos/any_of.h>
 #include <__pstl/cpu_algos/cpu_traits.h>
@@ -46,7 +49,6 @@
 #include <__utility/exception_guard.h>
 #include <__utility/move.h>
 #include <__utility/pair.h>
-#include <optional>
 
 _LIBCPP_PUSH_MACROS
 #include <__undef_macros>

diff  --git a/libcxx/include/__pstl/backends/serial.h b/libcxx/include/__pstl/backends/serial.h
index 6dc062057f64c..13c515b356608 100644
--- a/libcxx/include/__pstl/backends/serial.h
+++ b/libcxx/include/__pstl/backends/serial.h
@@ -19,11 +19,11 @@
 #include <__algorithm/transform.h>
 #include <__config>
 #include <__numeric/transform_reduce.h>
+#include <__optional/optional.h>
 #include <__pstl/backend_fwd.h>
 #include <__utility/empty.h>
 #include <__utility/forward.h>
 #include <__utility/move.h>
-#include <optional>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header

diff  --git a/libcxx/include/__pstl/backends/std_thread.h b/libcxx/include/__pstl/backends/std_thread.h
index 5fdf6f8aeab90..d0b15c8ed1f00 100644
--- a/libcxx/include/__pstl/backends/std_thread.h
+++ b/libcxx/include/__pstl/backends/std_thread.h
@@ -10,6 +10,8 @@
 #define _LIBCPP___PSTL_BACKENDS_STD_THREAD_H
 
 #include <__config>
+#include <__cstddef/size_t.h>
+#include <__optional/optional.h>
 #include <__pstl/backend_fwd.h>
 #include <__pstl/cpu_algos/any_of.h>
 #include <__pstl/cpu_algos/cpu_traits.h>
@@ -24,7 +26,6 @@
 #include <__pstl/cpu_algos/transform_reduce.h>
 #include <__utility/empty.h>
 #include <__utility/move.h>
-#include <optional>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header

diff  --git a/libcxx/include/__pstl/cpu_algos/any_of.h b/libcxx/include/__pstl/cpu_algos/any_of.h
index 803db7974eca7..cb161542cbc5e 100644
--- a/libcxx/include/__pstl/cpu_algos/any_of.h
+++ b/libcxx/include/__pstl/cpu_algos/any_of.h
@@ -15,13 +15,14 @@
 #include <__atomic/memory_order.h>
 #include <__config>
 #include <__iterator/concepts.h>
+#include <__optional/nullopt_t.h>
+#include <__optional/optional.h>
 #include <__pstl/backend_fwd.h>
 #include <__pstl/cpu_algos/cpu_traits.h>
 #include <__type_traits/is_execution_policy.h>
 #include <__utility/move.h>
 #include <__utility/pair.h>
 #include <cstdint>
-#include <optional>
 
 _LIBCPP_PUSH_MACROS
 #include <__undef_macros>

diff  --git a/libcxx/include/__pstl/cpu_algos/fill.h b/libcxx/include/__pstl/cpu_algos/fill.h
index 3e5936589a6a6..83993669014e8 100644
--- a/libcxx/include/__pstl/cpu_algos/fill.h
+++ b/libcxx/include/__pstl/cpu_algos/fill.h
@@ -13,11 +13,11 @@
 #include <__assert>
 #include <__config>
 #include <__iterator/concepts.h>
+#include <__optional/optional.h>
 #include <__pstl/backend_fwd.h>
 #include <__pstl/cpu_algos/cpu_traits.h>
 #include <__type_traits/is_execution_policy.h>
 #include <__utility/empty.h>
-#include <optional>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header

diff  --git a/libcxx/include/__pstl/cpu_algos/find_if.h b/libcxx/include/__pstl/cpu_algos/find_if.h
index aae64b66eb0c0..cf54c4b0d4f52 100644
--- a/libcxx/include/__pstl/cpu_algos/find_if.h
+++ b/libcxx/include/__pstl/cpu_algos/find_if.h
@@ -16,12 +16,13 @@
 #include <__functional/operations.h>
 #include <__iterator/concepts.h>
 #include <__iterator/iterator_traits.h>
+#include <__optional/nullopt_t.h>
+#include <__optional/optional.h>
 #include <__pstl/backend_fwd.h>
 #include <__pstl/cpu_algos/cpu_traits.h>
 #include <__type_traits/is_execution_policy.h>
 #include <__utility/move.h>
 #include <__utility/pair.h>
-#include <optional>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header

diff  --git a/libcxx/include/__pstl/cpu_algos/for_each.h b/libcxx/include/__pstl/cpu_algos/for_each.h
index cec719bc47b88..908f82f01e6c8 100644
--- a/libcxx/include/__pstl/cpu_algos/for_each.h
+++ b/libcxx/include/__pstl/cpu_algos/for_each.h
@@ -13,11 +13,11 @@
 #include <__assert>
 #include <__config>
 #include <__iterator/concepts.h>
+#include <__optional/optional.h>
 #include <__pstl/backend_fwd.h>
 #include <__pstl/cpu_algos/cpu_traits.h>
 #include <__type_traits/is_execution_policy.h>
 #include <__utility/empty.h>
-#include <optional>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header

diff  --git a/libcxx/include/__pstl/cpu_algos/merge.h b/libcxx/include/__pstl/cpu_algos/merge.h
index a9069ca51de2f..7628f47e40e04 100644
--- a/libcxx/include/__pstl/cpu_algos/merge.h
+++ b/libcxx/include/__pstl/cpu_algos/merge.h
@@ -13,11 +13,12 @@
 #include <__assert>
 #include <__config>
 #include <__iterator/concepts.h>
+#include <__optional/nullopt_t.h>
+#include <__optional/optional.h>
 #include <__pstl/backend_fwd.h>
 #include <__pstl/cpu_algos/cpu_traits.h>
 #include <__type_traits/is_execution_policy.h>
 #include <__utility/move.h>
-#include <optional>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header

diff  --git a/libcxx/include/__pstl/cpu_algos/mismatch.h b/libcxx/include/__pstl/cpu_algos/mismatch.h
index 3d702b03d3afe..1aaec3e047c0b 100644
--- a/libcxx/include/__pstl/cpu_algos/mismatch.h
+++ b/libcxx/include/__pstl/cpu_algos/mismatch.h
@@ -15,13 +15,14 @@
 #include <__functional/operations.h>
 #include <__iterator/concepts.h>
 #include <__iterator/iterator_traits.h>
+#include <__optional/nullopt_t.h>
+#include <__optional/optional.h>
 #include <__pstl/backend_fwd.h>
 #include <__pstl/cpu_algos/cpu_traits.h>
 #include <__pstl/cpu_algos/find_if.h>
 #include <__type_traits/is_execution_policy.h>
 #include <__utility/move.h>
 #include <__utility/pair.h>
-#include <optional>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header

diff  --git a/libcxx/include/__pstl/cpu_algos/stable_sort.h b/libcxx/include/__pstl/cpu_algos/stable_sort.h
index 5afdd3fd629ba..d8d08325564e4 100644
--- a/libcxx/include/__pstl/cpu_algos/stable_sort.h
+++ b/libcxx/include/__pstl/cpu_algos/stable_sort.h
@@ -11,11 +11,11 @@
 
 #include <__algorithm/stable_sort.h>
 #include <__config>
+#include <__optional/optional.h>
 #include <__pstl/backend_fwd.h>
 #include <__pstl/cpu_algos/cpu_traits.h>
 #include <__type_traits/is_execution_policy.h>
 #include <__utility/empty.h>
-#include <optional>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header

diff  --git a/libcxx/include/__pstl/cpu_algos/transform.h b/libcxx/include/__pstl/cpu_algos/transform.h
index 30d117d754b31..61630ea8f9d47 100644
--- a/libcxx/include/__pstl/cpu_algos/transform.h
+++ b/libcxx/include/__pstl/cpu_algos/transform.h
@@ -14,11 +14,12 @@
 #include <__config>
 #include <__iterator/concepts.h>
 #include <__iterator/iterator_traits.h>
+#include <__optional/nullopt_t.h>
+#include <__optional/optional.h>
 #include <__pstl/backend_fwd.h>
 #include <__pstl/cpu_algos/cpu_traits.h>
 #include <__type_traits/is_execution_policy.h>
 #include <__utility/move.h>
-#include <optional>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header

diff  --git a/libcxx/include/__pstl/cpu_algos/transform_reduce.h b/libcxx/include/__pstl/cpu_algos/transform_reduce.h
index cc9d0b54dd394..ecf4b0a446251 100644
--- a/libcxx/include/__pstl/cpu_algos/transform_reduce.h
+++ b/libcxx/include/__pstl/cpu_algos/transform_reduce.h
@@ -11,9 +11,11 @@
 
 #include <__assert>
 #include <__config>
+#include <__cstddef/size_t.h>
 #include <__iterator/concepts.h>
 #include <__iterator/iterator_traits.h>
 #include <__numeric/transform_reduce.h>
+#include <__optional/optional.h>
 #include <__pstl/backend_fwd.h>
 #include <__pstl/cpu_algos/cpu_traits.h>
 #include <__type_traits/desugars_to.h>
@@ -22,7 +24,6 @@
 #include <__type_traits/is_arithmetic.h>
 #include <__type_traits/is_execution_policy.h>
 #include <__utility/move.h>
-#include <optional>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header

diff  --git a/libcxx/include/__pstl/handle_exception.h b/libcxx/include/__pstl/handle_exception.h
index 3b5fca86902b0..303371e8ce435 100644
--- a/libcxx/include/__pstl/handle_exception.h
+++ b/libcxx/include/__pstl/handle_exception.h
@@ -11,9 +11,11 @@
 
 #include <__config>
 #include <__new/exceptions.h>
+#include <__optional/comparison.h>
+#include <__optional/nullopt_t.h>
+#include <__optional/optional.h>
 #include <__utility/forward.h>
 #include <__utility/move.h>
-#include <optional>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header

diff  --git a/libcxx/include/__ranges/join_view.h b/libcxx/include/__ranges/join_view.h
index b8a75c4726eb2..def920648e67f 100644
--- a/libcxx/include/__ranges/join_view.h
+++ b/libcxx/include/__ranges/join_view.h
@@ -23,6 +23,8 @@
 #include <__iterator/iterator_with_data.h>
 #include <__iterator/segmented_iterator.h>
 #include <__memory/addressof.h>
+#include <__optional/comparison.h>
+#include <__optional/optional.h>
 #include <__ranges/access.h>
 #include <__ranges/all.h>
 #include <__ranges/concepts.h>
@@ -39,7 +41,6 @@
 #include <__utility/empty.h>
 #include <__utility/forward.h>
 #include <__utility/move.h>
-#include <optional>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header

diff  --git a/libcxx/include/__ranges/movable_box.h b/libcxx/include/__ranges/movable_box.h
index 20986d56dc503..117111698c04a 100644
--- a/libcxx/include/__ranges/movable_box.h
+++ b/libcxx/include/__ranges/movable_box.h
@@ -16,13 +16,13 @@
 #include <__config>
 #include <__memory/addressof.h>
 #include <__memory/construct_at.h>
+#include <__optional/optional.h>
 #include <__type_traits/is_constructible.h>
 #include <__type_traits/is_nothrow_constructible.h>
 #include <__type_traits/is_object.h>
 #include <__utility/forward.h>
 #include <__utility/in_place.h>
 #include <__utility/move.h>
-#include <optional>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header

diff  --git a/libcxx/include/__ranges/non_propagating_cache.h b/libcxx/include/__ranges/non_propagating_cache.h
index c2bfc443faa18..9d71827c94caa 100644
--- a/libcxx/include/__ranges/non_propagating_cache.h
+++ b/libcxx/include/__ranges/non_propagating_cache.h
@@ -14,9 +14,10 @@
 #include <__iterator/concepts.h>        // indirectly_readable
 #include <__iterator/iterator_traits.h> // iter_reference_t
 #include <__memory/addressof.h>
+#include <__optional/nullopt_t.h>
+#include <__optional/optional.h>
 #include <__type_traits/is_object.h>
 #include <__utility/forward.h>
-#include <optional>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #  pragma GCC system_header

diff  --git a/libcxx/include/algorithm b/libcxx/include/algorithm
index 9543c6b3b3239..1e1587cc56131 100644
--- a/libcxx/include/algorithm
+++ b/libcxx/include/algorithm
@@ -2104,6 +2104,9 @@ template <class BidirectionalIterator, class Compare>
 #    pragma GCC system_header
 #  endif
 
+#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER >= 17 && _LIBCPP_STD_VER <= 23
+#    include <optional>
+#  endif
 #endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
 
 #endif // _LIBCPP_ALGORITHM

diff  --git a/libcxx/include/chrono b/libcxx/include/chrono
index 59e9813afafd8..a7fd8428a652c 100644
--- a/libcxx/include/chrono
+++ b/libcxx/include/chrono
@@ -1149,6 +1149,9 @@ namespace std {
 #    pragma GCC system_header
 #  endif
 
+#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER >= 20 && _LIBCPP_STD_VER <= 23
+#    include <optional>
+#  endif
 #endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
 
 #endif // _LIBCPP_CHRONO

diff  --git a/libcxx/include/flat_map b/libcxx/include/flat_map
index f2566c7745c88..084a1232d6958 100644
--- a/libcxx/include/flat_map
+++ b/libcxx/include/flat_map
@@ -739,6 +739,10 @@ namespace std {
 #  if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #    pragma GCC system_header
 #  endif
+
+#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER == 23
+#    include <optional>
+#  endif
 #endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
 
 #endif // _LIBCPP_FLAT_MAP

diff  --git a/libcxx/include/flat_set b/libcxx/include/flat_set
index f41e825dbd77e..c8093b7e44970 100644
--- a/libcxx/include/flat_set
+++ b/libcxx/include/flat_set
@@ -615,6 +615,10 @@ namespace std {
 #  if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #    pragma GCC system_header
 #  endif
+
+#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER == 23
+#    include <optional>
+#  endif
 #endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
 
 #endif // _LIBCPP_FLAT_SET

diff  --git a/libcxx/include/format b/libcxx/include/format
index f6d74596314a0..12462d0560dac 100644
--- a/libcxx/include/format
+++ b/libcxx/include/format
@@ -233,6 +233,9 @@ namespace std {
 #    pragma GCC system_header
 #  endif
 
+#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER >= 20 && _LIBCPP_STD_VER <= 23
+#    include <optional>
+#  endif
 #endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
 
 #endif // _LIBCPP_FORMAT

diff  --git a/libcxx/include/functional b/libcxx/include/functional
index 9d80578f8e6e7..c612492426040 100644
--- a/libcxx/include/functional
+++ b/libcxx/include/functional
@@ -586,6 +586,9 @@ POLICY:  For non-variadic implementations, the number of arguments is limited
 #    pragma GCC system_header
 #  endif
 
+#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER >= 17 && _LIBCPP_STD_VER <= 23
+#    include <optional>
+#  endif
 #endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
 
 #endif // _LIBCPP_FUNCTIONAL

diff  --git a/libcxx/include/iostream b/libcxx/include/iostream
index 0e83f0002ae6e..f18bde506dfde 100644
--- a/libcxx/include/iostream
+++ b/libcxx/include/iostream
@@ -67,6 +67,9 @@ extern _LIBCPP_EXPORTED_FROM_ABI wostream wclog;
 
 _LIBCPP_END_NAMESPACE_STD
 
+#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER == 23
+#    include <optional>
+#  endif
 #endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
 
 #endif // _LIBCPP_IOSTREAM

diff  --git a/libcxx/include/map b/libcxx/include/map
index 1c9226f6e918c..e0c3493d83dd8 100644
--- a/libcxx/include/map
+++ b/libcxx/include/map
@@ -2338,6 +2338,9 @@ _LIBCPP_END_NAMESPACE_STD
 
 _LIBCPP_POP_MACROS
 
+#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 23
+#    include <optional>
+#  endif
 #endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
 
 #endif // _LIBCPP_MAP

diff  --git a/libcxx/include/numeric b/libcxx/include/numeric
index 66ba5e59003a1..876d36421f43c 100644
--- a/libcxx/include/numeric
+++ b/libcxx/include/numeric
@@ -190,6 +190,9 @@ constexpr T saturating_cast(U x) noexcept;                    // freestanding, S
 #    pragma GCC system_header
 #  endif
 
+#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER >= 17 && _LIBCPP_STD_VER <= 23
+#    include <optional>
+#  endif
 #endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
 
 #endif // _LIBCPP_NUMERIC

diff  --git a/libcxx/include/ostream b/libcxx/include/ostream
index 95ada9cfd6403..de9af433f8d46 100644
--- a/libcxx/include/ostream
+++ b/libcxx/include/ostream
@@ -193,6 +193,9 @@ void vprint_nonunicode(ostream& os, string_view fmt, format_args args);
 
 #  endif // _LIBCPP_HAS_LOCALIZATION
 
+#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER == 23
+#    include <optional>
+#  endif
 #endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
 
 #endif // _LIBCPP_OSTREAM

diff  --git a/libcxx/include/print b/libcxx/include/print
index a9c4ee686f5f9..1703e7126a218 100644
--- a/libcxx/include/print
+++ b/libcxx/include/print
@@ -382,6 +382,9 @@ _LIBCPP_END_NAMESPACE_STD
 
 #  endif // _LIBCPP_STD_VER >= 23
 
+#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER >= 20 && _LIBCPP_STD_VER <= 23
+#    include <optional>
+#  endif
 #endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
 
 #endif // _LIBCPP_PRINT

diff  --git a/libcxx/include/random b/libcxx/include/random
index c0f9882415939..65121be1c34f1 100644
--- a/libcxx/include/random
+++ b/libcxx/include/random
@@ -1726,6 +1726,9 @@ class piecewise_linear_distribution
 #    pragma GCC system_header
 #  endif
 
+#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER >= 17 && _LIBCPP_STD_VER <= 23
+#    include <optional>
+#  endif
 #endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
 
 #endif // _LIBCPP_RANDOM

diff  --git a/libcxx/include/ranges b/libcxx/include/ranges
index b764769095a86..cc6baa0f1e146 100644
--- a/libcxx/include/ranges
+++ b/libcxx/include/ranges
@@ -545,6 +545,9 @@ namespace std {
 #    pragma GCC system_header
 #  endif
 
+#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER >= 20 && _LIBCPP_STD_VER <= 23
+#    include <optional>
+#  endif
 #endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
 
 #endif // _LIBCPP_RANGES

diff  --git a/libcxx/include/set b/libcxx/include/set
index 92a47baa42aa2..8f59ac6adbec8 100644
--- a/libcxx/include/set
+++ b/libcxx/include/set
@@ -1700,6 +1700,9 @@ _LIBCPP_END_NAMESPACE_STD
 
 _LIBCPP_POP_MACROS
 
+#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 23
+#    include <optional>
+#  endif
 #endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
 
 #endif // _LIBCPP_SET

diff  --git a/libcxx/include/syncstream b/libcxx/include/syncstream
index ca1a89e6bfe0d..961d95705c50c 100644
--- a/libcxx/include/syncstream
+++ b/libcxx/include/syncstream
@@ -519,6 +519,10 @@ _LIBCPP_END_NAMESPACE_STD
 _LIBCPP_POP_MACROS
 
 #  endif // _LIBCPP_HAS_LOCALIZATION
+
+#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 23
+#    include <optional>
+#  endif
 #endif   // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
 
 #endif // _LIBCPP_SYNCSTREAM

diff  --git a/libcxx/include/unordered_map b/libcxx/include/unordered_map
index 4d9926ce0f686..7018967e08287 100644
--- a/libcxx/include/unordered_map
+++ b/libcxx/include/unordered_map
@@ -2381,6 +2381,9 @@ _LIBCPP_END_NAMESPACE_STD
 
 _LIBCPP_POP_MACROS
 
+#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 23
+#    include <optional>
+#  endif
 #endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
 
 #endif // _LIBCPP_UNORDERED_MAP

diff  --git a/libcxx/include/unordered_set b/libcxx/include/unordered_set
index c8da03272aded..9dc8fe250f673 100644
--- a/libcxx/include/unordered_set
+++ b/libcxx/include/unordered_set
@@ -1836,6 +1836,9 @@ _LIBCPP_END_NAMESPACE_STD
 
 _LIBCPP_POP_MACROS
 
+#  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 23
+#    include <optional>
+#  endif
 #endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
 
 #endif // _LIBCPP_UNORDERED_SET

diff  --git a/libcxx/test/libcxx/transitive_includes/cxx26.csv b/libcxx/test/libcxx/transitive_includes/cxx26.csv
index 9b047ca3d97db..caf94dc4b2ca5 100644
--- a/libcxx/test/libcxx/transitive_includes/cxx26.csv
+++ b/libcxx/test/libcxx/transitive_includes/cxx26.csv
@@ -9,7 +9,6 @@ algorithm cwctype
 algorithm initializer_list
 algorithm iosfwd
 algorithm limits
-algorithm optional
 algorithm ratio
 algorithm tuple
 algorithm version
@@ -117,7 +116,6 @@ chrono ios
 chrono iosfwd
 chrono istream
 chrono limits
-chrono optional
 chrono ratio
 chrono sstream
 chrono stdexcept
@@ -331,7 +329,6 @@ flat_map cwchar
 flat_map cwctype
 flat_map initializer_list
 flat_map limits
-flat_map optional
 flat_map stdexcept
 flat_map tuple
 flat_map version
@@ -344,7 +341,6 @@ flat_set cwchar
 flat_set cwctype
 flat_set initializer_list
 flat_set limits
-flat_set optional
 flat_set stdexcept
 flat_set tuple
 flat_set version
@@ -365,7 +361,6 @@ format initializer_list
 format ios
 format iosfwd
 format limits
-format optional
 format stdexcept
 format streambuf
 format string
@@ -419,7 +414,6 @@ functional cwchar
 functional cwctype
 functional initializer_list
 functional limits
-functional optional
 functional stdexcept
 functional tuple
 functional typeinfo
@@ -512,7 +506,6 @@ iostream ios
 iostream iosfwd
 iostream istream
 iostream limits
-iostream optional
 iostream ostream
 iostream print
 iostream stdexcept
@@ -611,7 +604,6 @@ map cwchar
 map cwctype
 map initializer_list
 map limits
-map optional
 map stdexcept
 map tuple
 map version
@@ -667,7 +659,6 @@ numeric cwchar
 numeric cwctype
 numeric initializer_list
 numeric limits
-numeric optional
 numeric ratio
 numeric tuple
 numeric version
@@ -696,7 +687,6 @@ ostream initializer_list
 ostream ios
 ostream iosfwd
 ostream limits
-ostream optional
 ostream print
 ostream stdexcept
 ostream streambuf
@@ -724,7 +714,6 @@ print initializer_list
 print ios
 print iosfwd
 print limits
-print optional
 print stdexcept
 print streambuf
 print string
@@ -765,7 +754,6 @@ random initializer_list
 random iosfwd
 random limits
 random numeric
-random optional
 random ratio
 random stdexcept
 random string
@@ -785,7 +773,6 @@ ranges initializer_list
 ranges iosfwd
 ranges iterator
 ranges limits
-ranges optional
 ranges span
 ranges stdexcept
 ranges tuple
@@ -837,7 +824,6 @@ set cwchar
 set cwctype
 set initializer_list
 set limits
-set optional
 set tuple
 set version
 shared_mutex cerrno
@@ -996,7 +982,6 @@ syncstream ios
 syncstream iosfwd
 syncstream limits
 syncstream map
-syncstream optional
 syncstream ostream
 syncstream print
 syncstream ratio
@@ -1085,7 +1070,6 @@ unordered_map cstdint
 unordered_map cstring
 unordered_map initializer_list
 unordered_map limits
-unordered_map optional
 unordered_map stdexcept
 unordered_map tuple
 unordered_map version
@@ -1094,7 +1078,6 @@ unordered_set cstdint
 unordered_set cstring
 unordered_set initializer_list
 unordered_set limits
-unordered_set optional
 unordered_set tuple
 unordered_set version
 utility compare


        


More information about the libcxx-commits mailing list