[libcxx-commits] [libcxx] 7bf1ded - [libc++] Clean up headers that relied on `<optional>`'s transitive includes (#213158)

via libcxx-commits libcxx-commits at lists.llvm.org
Mon Aug 3 05:23:13 PDT 2026


Author: William Tran-Viet
Date: 2026-08-03T08:23:08-04:00
New Revision: 7bf1ded0e061cc388a31f4293afd527f76810ffb

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

LOG: [libc++] Clean up headers that relied on `<optional>`'s transitive includes (#213158)

Clear out the headers in <optional> that were left in to not break
other headers, and fix them also. Also fix tests.

Added: 
    

Modified: 
    libcxx/include/__algorithm/ranges_fold.h
    libcxx/include/__node_handle
    libcxx/include/__pstl/cpu_algos/transform_reduce.h
    libcxx/include/__ranges/join_view.h
    libcxx/include/__ranges/movable_box.h
    libcxx/include/__ranges/non_propagating_cache.h
    libcxx/include/optional
    libcxx/test/libcxx/input.output/iostream.format/quoted.manip/quoted_traits.compile.pass.cpp
    libcxx/test/libcxx/ranges/range.adaptors/range.move.wrap/types.h
    libcxx/test/std/concepts/concepts.object/regular.compile.pass.cpp
    libcxx/test/std/input.output/filesystems/class.path/path.nonmember/path.io.pass.cpp
    libcxx/test/std/thread/thread.stoptoken/stopsource/cons.copy.pass.cpp
    libcxx/test/std/utilities/optional/optional.object/optional.object.assign/assign_value.pass.cpp
    libcxx/test/std/utilities/optional/optional.object/optional.object.assign/const_optional_U.pass.cpp
    libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/const_optional_U.pass.cpp
    libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/copy.pass.cpp
    libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/ctor.verify.cpp
    libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/explicit_optional_U.pass.cpp
    libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/in_place_t.pass.cpp
    libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/initializer_list.pass.cpp
    libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/move.pass.cpp
    libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/rvalue_T.pass.cpp
    libcxx/test/std/utilities/optional/optional.object/optional.object.observe/value_or.pass.cpp
    libcxx/test/std/utilities/optional/optional.syn/optional_in_place_t.verify.cpp

Removed: 
    


################################################################################
diff  --git a/libcxx/include/__algorithm/ranges_fold.h b/libcxx/include/__algorithm/ranges_fold.h
index 87579b264296a..a82d9acfcea8c 100644
--- a/libcxx/include/__algorithm/ranges_fold.h
+++ b/libcxx/include/__algorithm/ranges_fold.h
@@ -31,6 +31,7 @@
 #include <__type_traits/decay.h>
 #include <__type_traits/invoke.h>
 #include <__utility/forward.h>
+#include <__utility/in_place.h>
 #include <__utility/move.h>
 #include <optional>
 

diff  --git a/libcxx/include/__node_handle b/libcxx/include/__node_handle
index 993283cc926da..8f4e34d47ac59 100644
--- a/libcxx/include/__node_handle
+++ b/libcxx/include/__node_handle
@@ -63,7 +63,9 @@ public:
 #include <__memory/allocator_traits.h>
 #include <__memory/pointer_traits.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)

diff  --git a/libcxx/include/__pstl/cpu_algos/transform_reduce.h b/libcxx/include/__pstl/cpu_algos/transform_reduce.h
index edfb28b4466fc..cc9d0b54dd394 100644
--- a/libcxx/include/__pstl/cpu_algos/transform_reduce.h
+++ b/libcxx/include/__pstl/cpu_algos/transform_reduce.h
@@ -17,6 +17,8 @@
 #include <__pstl/backend_fwd.h>
 #include <__pstl/cpu_algos/cpu_traits.h>
 #include <__type_traits/desugars_to.h>
+#include <__type_traits/enable_if.h>
+#include <__type_traits/invoke.h>
 #include <__type_traits/is_arithmetic.h>
 #include <__type_traits/is_execution_policy.h>
 #include <__utility/move.h>

diff  --git a/libcxx/include/__ranges/join_view.h b/libcxx/include/__ranges/join_view.h
index 4f3f8d1c1e5b4..b8a75c4726eb2 100644
--- a/libcxx/include/__ranges/join_view.h
+++ b/libcxx/include/__ranges/join_view.h
@@ -31,10 +31,14 @@
 #include <__ranges/range_adaptor.h>
 #include <__ranges/view_interface.h>
 #include <__type_traits/common_type.h>
+#include <__type_traits/conditional.h>
+#include <__type_traits/is_reference.h>
 #include <__type_traits/maybe_const.h>
+#include <__type_traits/remove_cvref.h>
 #include <__utility/as_lvalue.h>
 #include <__utility/empty.h>
 #include <__utility/forward.h>
+#include <__utility/move.h>
 #include <optional>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)

diff  --git a/libcxx/include/__ranges/movable_box.h b/libcxx/include/__ranges/movable_box.h
index 5a456cc3a1b66..20986d56dc503 100644
--- a/libcxx/include/__ranges/movable_box.h
+++ b/libcxx/include/__ranges/movable_box.h
@@ -16,7 +16,11 @@
 #include <__config>
 #include <__memory/addressof.h>
 #include <__memory/construct_at.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>
 

diff  --git a/libcxx/include/__ranges/non_propagating_cache.h b/libcxx/include/__ranges/non_propagating_cache.h
index beae13a98e9e3..c2bfc443faa18 100644
--- a/libcxx/include/__ranges/non_propagating_cache.h
+++ b/libcxx/include/__ranges/non_propagating_cache.h
@@ -14,6 +14,7 @@
 #include <__iterator/concepts.h>        // indirectly_readable
 #include <__iterator/iterator_traits.h> // iter_reference_t
 #include <__memory/addressof.h>
+#include <__type_traits/is_object.h>
 #include <__utility/forward.h>
 #include <optional>
 

diff  --git a/libcxx/include/optional b/libcxx/include/optional
index 170062aa32497..ca421a55d45e9 100644
--- a/libcxx/include/optional
+++ b/libcxx/include/optional
@@ -269,21 +269,6 @@ namespace std {
 #  include <__optional/optional_ref.h>
 #  include <__optional/swap.h>
 
-// TODO: Some headers rely on these transitive includes
-#  include <__cstddef/size_t.h>
-#  include <__type_traits/conditional.h>
-#  include <__type_traits/enable_if.h>
-#  include <__type_traits/invoke.h>
-#  include <__type_traits/is_constructible.h>
-#  include <__type_traits/is_object.h>
-#  include <__type_traits/is_reference.h>
-#  include <__type_traits/remove_const.h>
-#  include <__type_traits/remove_cvref.h>
-#  include <__utility/declval.h>
-#  include <__utility/forward.h>
-#  include <__utility/in_place.h>
-#  include <__utility/move.h>
-
 #  include <initializer_list>
 
 // standard-mandated includes

diff  --git a/libcxx/test/libcxx/input.output/iostream.format/quoted.manip/quoted_traits.compile.pass.cpp b/libcxx/test/libcxx/input.output/iostream.format/quoted.manip/quoted_traits.compile.pass.cpp
index c16e0017822a9..9e0645f682e2d 100644
--- a/libcxx/test/libcxx/input.output/iostream.format/quoted.manip/quoted_traits.compile.pass.cpp
+++ b/libcxx/test/libcxx/input.output/iostream.format/quoted.manip/quoted_traits.compile.pass.cpp
@@ -25,6 +25,7 @@
 #include <string>
 #include <string_view>
 #include <type_traits>
+#include <utility>
 
 #include "test_allocator.h"
 #include "test_macros.h"

diff  --git a/libcxx/test/libcxx/ranges/range.adaptors/range.move.wrap/types.h b/libcxx/test/libcxx/ranges/range.adaptors/range.move.wrap/types.h
index 9e6bf5d89c18e..303c767ba1254 100644
--- a/libcxx/test/libcxx/ranges/range.adaptors/range.move.wrap/types.h
+++ b/libcxx/test/libcxx/ranges/range.adaptors/range.move.wrap/types.h
@@ -13,6 +13,7 @@
 #include <cassert>
 #include <concepts>
 #include <type_traits>
+#include <utility>
 
 #include "test_macros.h"
 

diff  --git a/libcxx/test/std/concepts/concepts.object/regular.compile.pass.cpp b/libcxx/test/std/concepts/concepts.object/regular.compile.pass.cpp
index ab5472f6c391d..af2e28f33de3c 100644
--- a/libcxx/test/std/concepts/concepts.object/regular.compile.pass.cpp
+++ b/libcxx/test/std/concepts/concepts.object/regular.compile.pass.cpp
@@ -22,6 +22,7 @@
 #include <stdexcept>
 #include <tuple>
 #include <unordered_map>
+#include <utility>
 #include <vector>
 
 #include "type_classification/moveconstructible.h"

diff  --git a/libcxx/test/std/input.output/filesystems/class.path/path.nonmember/path.io.pass.cpp b/libcxx/test/std/input.output/filesystems/class.path/path.nonmember/path.io.pass.cpp
index 0d667d0e2a7d8..0839d5e2754ed 100644
--- a/libcxx/test/std/input.output/filesystems/class.path/path.nonmember/path.io.pass.cpp
+++ b/libcxx/test/std/input.output/filesystems/class.path/path.nonmember/path.io.pass.cpp
@@ -27,6 +27,7 @@
 #include <sstream>
 #include <cassert>
 #include <iostream>
+#include <utility>
 
 #include "count_new.h"
 #include "make_string.h"

diff  --git a/libcxx/test/std/thread/thread.stoptoken/stopsource/cons.copy.pass.cpp b/libcxx/test/std/thread/thread.stoptoken/stopsource/cons.copy.pass.cpp
index eadde8da44e5a..ff3cbc2b7fe89 100644
--- a/libcxx/test/std/thread/thread.stoptoken/stopsource/cons.copy.pass.cpp
+++ b/libcxx/test/std/thread/thread.stoptoken/stopsource/cons.copy.pass.cpp
@@ -15,6 +15,7 @@
 #include <optional>
 #include <stop_token>
 #include <type_traits>
+#include <utility>
 
 #include "test_macros.h"
 

diff  --git a/libcxx/test/std/utilities/optional/optional.object/optional.object.assign/assign_value.pass.cpp b/libcxx/test/std/utilities/optional/optional.object/optional.object.assign/assign_value.pass.cpp
index f1e2493954d38..07dd1a9e3db6f 100644
--- a/libcxx/test/std/utilities/optional/optional.object/optional.object.assign/assign_value.pass.cpp
+++ b/libcxx/test/std/utilities/optional/optional.object/optional.object.assign/assign_value.pass.cpp
@@ -15,6 +15,7 @@
 #include <type_traits>
 #include <cassert>
 #include <memory>
+#include <utility>
 
 #include "test_macros.h"
 #include "archetypes.h"

diff  --git a/libcxx/test/std/utilities/optional/optional.object/optional.object.assign/const_optional_U.pass.cpp b/libcxx/test/std/utilities/optional/optional.object/optional.object.assign/const_optional_U.pass.cpp
index 6b6dcbf428380..da0fda6d86270 100644
--- a/libcxx/test/std/utilities/optional/optional.object/optional.object.assign/const_optional_U.pass.cpp
+++ b/libcxx/test/std/utilities/optional/optional.object/optional.object.assign/const_optional_U.pass.cpp
@@ -16,6 +16,7 @@
 #include <optional>
 #include <type_traits>
 #include <cassert>
+#include <utility>
 
 #include "test_macros.h"
 #include "archetypes.h"

diff  --git a/libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/const_optional_U.pass.cpp b/libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/const_optional_U.pass.cpp
index 844317c8570d9..5163a04dd2d3d 100644
--- a/libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/const_optional_U.pass.cpp
+++ b/libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/const_optional_U.pass.cpp
@@ -16,6 +16,7 @@
 #include <cassert>
 #include <optional>
 #include <type_traits>
+#include <utility>
 
 #include "../optional_helper_types.h"
 #include "test_macros.h"

diff  --git a/libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/copy.pass.cpp b/libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/copy.pass.cpp
index fd7332f3b422b..56886f9a8c65e 100644
--- a/libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/copy.pass.cpp
+++ b/libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/copy.pass.cpp
@@ -14,6 +14,7 @@
 #include <cassert>
 #include <optional>
 #include <type_traits>
+#include <utility>
 
 #include "test_macros.h"
 #include "archetypes.h"

diff  --git a/libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/ctor.verify.cpp b/libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/ctor.verify.cpp
index a13b4334da332..dc9dd9ab25aae 100644
--- a/libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/ctor.verify.cpp
+++ b/libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/ctor.verify.cpp
@@ -15,6 +15,7 @@
 
 #include <cassert>
 #include <optional>
+#include <utility>
 
 #include "test_macros.h"
 

diff  --git a/libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/explicit_optional_U.pass.cpp b/libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/explicit_optional_U.pass.cpp
index bddbd4ba93d5a..3baa7d5dfdd6a 100644
--- a/libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/explicit_optional_U.pass.cpp
+++ b/libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/explicit_optional_U.pass.cpp
@@ -15,6 +15,7 @@
 #include <cassert>
 #include <optional>
 #include <type_traits>
+#include <utility>
 
 #include "test_macros.h"
 

diff  --git a/libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/in_place_t.pass.cpp b/libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/in_place_t.pass.cpp
index c3b498e56a5a1..22398d33f99a1 100644
--- a/libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/in_place_t.pass.cpp
+++ b/libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/in_place_t.pass.cpp
@@ -18,6 +18,7 @@
 #include <cassert>
 #include <optional>
 #include <type_traits>
+#include <utility>
 
 #include "test_macros.h"
 

diff  --git a/libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/initializer_list.pass.cpp b/libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/initializer_list.pass.cpp
index 1993476792878..e1967e9f7ff8b 100644
--- a/libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/initializer_list.pass.cpp
+++ b/libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/initializer_list.pass.cpp
@@ -17,6 +17,7 @@
 #include <memory>
 #include <optional>
 #include <type_traits>
+#include <utility>
 #include <vector>
 
 #include "test_macros.h"

diff  --git a/libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/move.pass.cpp b/libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/move.pass.cpp
index bb36283a5e3ea..4772b8ca672d9 100644
--- a/libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/move.pass.cpp
+++ b/libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/move.pass.cpp
@@ -15,6 +15,7 @@
 #include <cassert>
 #include <optional>
 #include <type_traits>
+#include <utility>
 
 #include "test_macros.h"
 #include "archetypes.h"

diff  --git a/libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/rvalue_T.pass.cpp b/libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/rvalue_T.pass.cpp
index e73eef4592256..7abaa7a54b101 100644
--- a/libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/rvalue_T.pass.cpp
+++ b/libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/rvalue_T.pass.cpp
@@ -15,6 +15,7 @@
 #include <cassert>
 #include <optional>
 #include <type_traits>
+#include <utility>
 
 #include "test_macros.h"
 #include "archetypes.h"

diff  --git a/libcxx/test/std/utilities/optional/optional.object/optional.object.observe/value_or.pass.cpp b/libcxx/test/std/utilities/optional/optional.object/optional.object.observe/value_or.pass.cpp
index f4ad896ed9816..5c0fd262805fb 100644
--- a/libcxx/test/std/utilities/optional/optional.object/optional.object.observe/value_or.pass.cpp
+++ b/libcxx/test/std/utilities/optional/optional.object/optional.object.observe/value_or.pass.cpp
@@ -14,6 +14,7 @@
 #include <optional>
 #include <type_traits>
 #include <cassert>
+#include <utility>
 
 #include "test_macros.h"
 

diff  --git a/libcxx/test/std/utilities/optional/optional.syn/optional_in_place_t.verify.cpp b/libcxx/test/std/utilities/optional/optional.syn/optional_in_place_t.verify.cpp
index 8731b0b37e9bc..ff79b10ea9d69 100644
--- a/libcxx/test/std/utilities/optional/optional.syn/optional_in_place_t.verify.cpp
+++ b/libcxx/test/std/utilities/optional/optional.syn/optional_in_place_t.verify.cpp
@@ -14,6 +14,7 @@
 // (possibly cv-qualified) in_place_t is ill-formed.
 
 #include <optional>
+#include <utility>
 
 #include "test_macros.h"
 


        


More information about the libcxx-commits mailing list