[libcxx-commits] [libcxx] [libc++] Correct `optional<T&>` implementation (PR #174537)

via libcxx-commits libcxx-commits at lists.llvm.org
Mon Jan 5 22:52:24 PST 2026


github-actions[bot] wrote:

<!--LLVM CODE FORMAT COMMENT: {clang-format}-->


:warning: C/C++ code formatter, clang-format found issues in your code. :warning:

<details>
<summary>
You can test this locally with the following command:
</summary>

``````````bash
git-clang-format --diff origin/main HEAD --extensions cpp,,h -- libcxx/test/std/utilities/optional/optional.object/optional.object.assign/emplace.compile.fail.cpp libcxx/include/optional libcxx/test/libcxx/utilities/optional/optional.object/optional.object.observe/value_or.compile.pass.cpp libcxx/test/std/utilities/optional/optional.monadic/and_then.pass.cpp libcxx/test/std/utilities/optional/optional.monadic/or_else.pass.cpp libcxx/test/std/utilities/optional/optional.monadic/transform.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/emplace.pass.cpp libcxx/test/std/utilities/optional/optional.object/optional.object.assign/nullopt_t.pass.cpp libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/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/in_place_t.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/optional_U.pass.cpp libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/ref_constructs_from_temporary.verify.cpp libcxx/test/std/utilities/optional/optional.object/optional.object.mod/reset.pass.cpp libcxx/test/std/utilities/optional/optional.object/optional.object.observe/bool.pass.cpp libcxx/test/std/utilities/optional/optional.object/optional.object.observe/dereference.pass.cpp libcxx/test/std/utilities/optional/optional.object/optional.object.observe/dereference_const.pass.cpp libcxx/test/std/utilities/optional/optional.object/optional.object.observe/dereference_const_rvalue.pass.cpp libcxx/test/std/utilities/optional/optional.object/optional.object.observe/dereference_rvalue.pass.cpp libcxx/test/std/utilities/optional/optional.object/optional.object.observe/has_value.pass.cpp libcxx/test/std/utilities/optional/optional.object/optional.object.observe/op_arrow.pass.cpp libcxx/test/std/utilities/optional/optional.object/optional.object.observe/op_arrow_const.pass.cpp libcxx/test/std/utilities/optional/optional.object/optional.object.observe/value_const.pass.cpp libcxx/test/std/utilities/optional/optional.object/optional.object.observe/value_const_rvalue.pass.cpp libcxx/test/std/utilities/optional/optional.object/optional.object.observe/value_or.pass.cpp libcxx/test/support/copy_move_types.h --diff_from_common_commit
``````````

:warning:
The reproduction instructions above might return results for more than one PR
in a stack if you are using a stacked PR workflow. You can limit the results by
changing `origin/main` to the base branch/commit you want to compare against.
:warning:

</details>

<details>
<summary>
View the diff from clang-format here.
</summary>

``````````diff
diff --git a/libcxx/include/optional b/libcxx/include/optional
index 487cfa1e7..710066c5b 100644
--- a/libcxx/include/optional
+++ b/libcxx/include/optional
@@ -1185,7 +1185,7 @@ public:
 
   [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _Tp&& value() &&
 #    if _LIBCPP_STD_VER >= 26
-      requires(!is_lvalue_reference_v<_Tp>)
+    requires(!is_lvalue_reference_v<_Tp>)
 #    endif
   {
     if (!this->has_value())
@@ -1193,9 +1193,9 @@ public:
     return std::move(this->__get());
   }
 
-      [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _Tp const&& value() const&&
+  [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr _Tp const&& value() const&&
 #    if _LIBCPP_STD_VER >= 26
-        requires(!is_lvalue_reference_v<_Tp>)
+    requires(!is_lvalue_reference_v<_Tp>)
 #    endif
   {
     if (!this->has_value())
diff --git a/libcxx/test/std/utilities/optional/optional.object/optional.object.observe/dereference_const.pass.cpp b/libcxx/test/std/utilities/optional/optional.object/optional.object.observe/dereference_const.pass.cpp
index ff6912603..e0a83b574 100644
--- a/libcxx/test/std/utilities/optional/optional.object/optional.object.observe/dereference_const.pass.cpp
+++ b/libcxx/test/std/utilities/optional/optional.object/optional.object.observe/dereference_const.pass.cpp
@@ -78,15 +78,15 @@ int main(int, char**) {
     constexpr optional<X> opt(X{});
     static_assert((*opt).test() == 3, "");
   }
-    {
-        constexpr optional<Y> opt(Y{});
-        assert((*opt).test() == 2);
-    }
+  {
+    constexpr optional<Y> opt(Y{});
+    assert((*opt).test() == 2);
+  }
 
 #if TEST_STD_VER >= 26
-    assert(test_ref());
-    static_assert(test_ref());
+  assert(test_ref());
+  static_assert(test_ref());
 #endif
 
-    return 0;
+  return 0;
 }

``````````

</details>


https://github.com/llvm/llvm-project/pull/174537


More information about the libcxx-commits mailing list