[libcxx-commits] [libcxx] [libc++] Implement P2988R12: `std::optional<T&> (PR #155202)
via libcxx-commits
libcxx-commits at lists.llvm.org
Sun Aug 24 21:26:15 PDT 2025
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 HEAD~1 HEAD --extensions h,,cpp -- libcxx/test/libcxx/utilities/optional/optional.object/optional.object.observe/value_or.compile.pass.cpp libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/ref_t.pass.cpp libcxx/include/__iterator/wrap_iter.h libcxx/include/optional libcxx/test/libcxx/utilities/optional/optional.iterator/iterator.compile.pass.cpp libcxx/test/std/utilities/optional/optional.iterator/begin.pass.cpp libcxx/test/std/utilities/optional/optional.iterator/end.pass.cpp libcxx/test/std/utilities/optional/optional.iterator/iterator.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.ctor/ctor.verify.cpp libcxx/test/std/utilities/optional/optional.object/optional.object.dtor/dtor.pass.cpp libcxx/test/std/utilities/optional/optional.object/optional.object.mod/reset.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/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.pass.cpp libcxx/test/std/utilities/optional/optional.object/optional.object.observe/value_or.pass.cpp libcxx/test/std/utilities/optional/optional.object/optional.object.observe/value_or_const.pass.cpp libcxx/test/std/utilities/optional/optional.object/optional_requires_destructible_object.verify.cpp
``````````
</details>
<details>
<summary>
View the diff from clang-format here.
</summary>
``````````diff
diff --git a/libcxx/test/libcxx/utilities/optional/optional.iterator/iterator.compile.pass.cpp b/libcxx/test/libcxx/utilities/optional/optional.iterator/iterator.compile.pass.cpp
index 472049a91..b604579e4 100644
--- a/libcxx/test/libcxx/utilities/optional/optional.iterator/iterator.compile.pass.cpp
+++ b/libcxx/test/libcxx/utilities/optional/optional.iterator/iterator.compile.pass.cpp
@@ -25,5 +25,5 @@ static_assert(has_iterator_aliases<std::optional<int>>);
static_assert(has_iterator_aliases<std::optional<const int>>);
static_assert(has_iterator_aliases<std::optional<int&>>);
static_assert(has_iterator_aliases<std::optional<const int&>>);
-static_assert(!has_iterator_aliases<std::optional<int(&)[1]>>);
-static_assert(!has_iterator_aliases<std::optional<int(&)()>>);
+static_assert(!has_iterator_aliases<std::optional<int (&)[1]>>);
+static_assert(!has_iterator_aliases<std::optional<int (&)()>>);
diff --git a/libcxx/test/libcxx/utilities/optional/optional.object/optional.object.observe/value_or.compile.pass.cpp b/libcxx/test/libcxx/utilities/optional/optional.object/optional.object.observe/value_or.compile.pass.cpp
index 298e2f6f5..7c2c9bc23 100644
--- a/libcxx/test/libcxx/utilities/optional/optional.object/optional.object.observe/value_or.compile.pass.cpp
+++ b/libcxx/test/libcxx/utilities/optional/optional.object/optional.object.observe/value_or.compile.pass.cpp
@@ -23,5 +23,5 @@ concept has_value_or = requires(Opt opt, T&& t) {
static_assert(has_value_or<std::optional<int>, int>);
static_assert(has_value_or<std::optional<int&>, int&>);
static_assert(has_value_or<std::optional<const int&>, const int&>);
-static_assert(!has_value_or<std::optional<int(&)[1]>&&, int(&)[1]>);
-static_assert(!has_value_or<std::optional<int(&)()>&&, int(&)()>);
+static_assert(!has_value_or<std::optional<int (&)[1]>&&, int (&)[1]>);
+static_assert(!has_value_or<std::optional<int (&)()>&&, int (&)()>);
diff --git a/libcxx/test/std/utilities/optional/optional.monadic/and_then.pass.cpp b/libcxx/test/std/utilities/optional/optional.monadic/and_then.pass.cpp
index 3d945e437..e9d44960c 100644
--- a/libcxx/test/std/utilities/optional/optional.monadic/and_then.pass.cpp
+++ b/libcxx/test/std/utilities/optional/optional.monadic/and_then.pass.cpp
@@ -307,7 +307,6 @@ constexpr bool test_ref() {
// Test && overload
{
-
//With & qualifier on F's operator()
{
int j = 42;
diff --git a/libcxx/test/std/utilities/optional/optional.monadic/transform.pass.cpp b/libcxx/test/std/utilities/optional/optional.monadic/transform.pass.cpp
index 0d14ceb3b..2faf58f79 100644
--- a/libcxx/test/std/utilities/optional/optional.monadic/transform.pass.cpp
+++ b/libcxx/test/std/utilities/optional/optional.monadic/transform.pass.cpp
@@ -238,7 +238,7 @@ constexpr bool test_ref() {
}
}
// const& overload
- {
+ {
// Without & qualifier on F's operator()
{
int i = 42;
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 d633f91dc..dda461e89 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
@@ -279,8 +279,7 @@ constexpr void test_with_ref() {
assert(static_cast<bool>(opt) == false);
}
}
-#endif
-
+#endif
int main(int, char**)
{
diff --git a/libcxx/test/std/utilities/optional/optional.object/optional.object.assign/emplace.pass.cpp b/libcxx/test/std/utilities/optional/optional.object/optional.object.assign/emplace.pass.cpp
index 1c921f749..69709a076 100644
--- a/libcxx/test/std/utilities/optional/optional.object/optional.object.assign/emplace.pass.cpp
+++ b/libcxx/test/std/utilities/optional/optional.object/optional.object.assign/emplace.pass.cpp
@@ -224,20 +224,20 @@ TEST_CONSTEXPR_CXX20 bool test_empty_emplace() {
#if TEST_STD_VER >= 26
template <class T, std::remove_reference_t<T> _Val>
constexpr bool test_ref() {
- using Opt = std::optional<T&>;
- T t{_Val};
- {
- Opt opt;
- auto & v = opt.emplace(t);
- static_assert(std::is_same_v<T&, decltype(v)>, "");
- assert(static_cast<bool>(opt) == true);
- assert(*opt == t);
- assert(&v == &*opt);
- assert(&t == &*opt);
- }
- return true;
+ using Opt = std::optional<T&>;
+ T t{_Val};
+ {
+ Opt opt;
+ auto& v = opt.emplace(t);
+ static_assert(std::is_same_v<T&, decltype(v)>, "");
+ assert(static_cast<bool>(opt) == true);
+ assert(*opt == t);
+ assert(&v == &*opt);
+ assert(&t == &*opt);
+ }
+ return true;
}
-#endif
+#endif
int main(int, char**)
{
@@ -314,6 +314,6 @@ int main(int, char**)
static_assert(test_ref<double, 15.0>());
assert((test_ref<int, 1>()));
assert((test_ref<double, 15.0>()));
-#endif
- return 0;
+#endif
+ return 0;
}
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 a484a26f4..81b29c9ca 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
@@ -25,12 +25,16 @@ int main(int, char**)
{
{
#if TEST_STD_VER >= 26
- std::optional<int&&> opt2; // expected-error-re at optional:* {{static assertion failed{{.*}}instantiation of optional with an rvalue reference type is ill-formed}}
-#else
- std::optional<char &> o1; // expected-error-re at optional:* {{static assertion failed{{.*}}instantiation of optional with a reference type is ill-formed}}
-#endif
- std::optional<NonDestructible> o2; // expected-error-re at optional:* {{static assertion failed{{.*}}instantiation of optional with a non-destructible type is ill-formed}}
- std::optional<char[20]> o3; // expected-error-re at optional:* {{static assertion failed{{.*}}instantiation of optional with an array type is ill-formed}}
+ std::optional<int&&>
+ opt2; // expected-error-re at optional:* {{static assertion failed{{.*}}instantiation of optional with an rvalue reference type is ill-formed}}
+#else
+ std::optional<char&>
+ o1; // expected-error-re at optional:* {{static assertion failed{{.*}}instantiation of optional with a reference type is ill-formed}}
+#endif
+ std::optional<NonDestructible>
+ o2; // expected-error-re at optional:* {{static assertion failed{{.*}}instantiation of optional with a non-destructible type is ill-formed}}
+ std::optional<char[20]>
+ o3; // expected-error-re at optional:* {{static assertion failed{{.*}}instantiation of optional with an array type is ill-formed}}
}
{
diff --git a/libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/ref_t.pass.cpp b/libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/ref_t.pass.cpp
index e3d225a82..3ef41f678 100644
--- a/libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/ref_t.pass.cpp
+++ b/libcxx/test/std/utilities/optional/optional.object/optional.object.ctor/ref_t.pass.cpp
@@ -25,8 +25,8 @@ constexpr bool test() {
assert(&(*opt) == &item);
}
{
- assert(*std::as_const(opt) == item);
- assert(&(*std::as_const(opt)) == &item);
+ assert(*std::as_const(opt) == item);
+ assert(&(*std::as_const(opt)) == &item);
}
return true;
diff --git a/libcxx/test/std/utilities/optional/optional.object/optional.object.dtor/dtor.pass.cpp b/libcxx/test/std/utilities/optional/optional.object/optional.object.dtor/dtor.pass.cpp
index f9744ae0c..a14e2dc21 100644
--- a/libcxx/test/std/utilities/optional/optional.object/optional.object.dtor/dtor.pass.cpp
+++ b/libcxx/test/std/utilities/optional/optional.object/optional.object.dtor/dtor.pass.cpp
@@ -66,10 +66,10 @@ int main(int, char**)
}
#if TEST_STD_VER >= 26
{
- typedef int& T;
- static_assert(std::is_trivially_destructible<T>::value, "");
- static_assert(std::is_trivially_destructible<optional<T>>::value, "");
+ typedef int& T;
+ static_assert(std::is_trivially_destructible<T>::value, "");
+ static_assert(std::is_trivially_destructible<optional<T>>::value, "");
}
-#endif
- return 0;
+#endif
+ return 0;
}
diff --git a/libcxx/test/std/utilities/optional/optional.object/optional.object.mod/reset.pass.cpp b/libcxx/test/std/utilities/optional/optional.object/optional.object.mod/reset.pass.cpp
index e633e3f1d..e23e481f6 100644
--- a/libcxx/test/std/utilities/optional/optional.object/optional.object.mod/reset.pass.cpp
+++ b/libcxx/test/std/utilities/optional/optional.object/optional.object.mod/reset.pass.cpp
@@ -78,7 +78,7 @@ int main(int, char**)
assert(X::dtor_called == false);
assert(static_cast<bool>(opt) == false);
}
-#endif
+#endif
- return 0;
+ return 0;
}
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 cbeb0c9e2..d2ebafbc3 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
@@ -45,21 +45,21 @@ int main(int, char**)
}
#if TEST_STD_VER >= 26
{
- X x{};
- const optional<X&> opt{x};
- ASSERT_SAME_TYPE(decltype(*opt), X&);
- ASSERT_NOEXCEPT(*opt);
+ X x{};
+ const optional<X&> opt{x};
+ ASSERT_SAME_TYPE(decltype(*opt), X&);
+ ASSERT_NOEXCEPT(*opt);
}
{
- X x{};
- const optional<const X&> opt{x};
- ASSERT_SAME_TYPE(decltype(*opt), const X&);
- ASSERT_NOEXCEPT(*opt);
+ X x{};
+ const optional<const X&> opt{x};
+ ASSERT_SAME_TYPE(decltype(*opt), const X&);
+ ASSERT_NOEXCEPT(*opt);
}
{
- static constexpr X x{};
- constexpr optional<const X&> opt(x);
- static_assert((*opt).test() == 3, "");
+ static constexpr X x{};
+ constexpr optional<const X&> opt(x);
+ static_assert((*opt).test() == 3, "");
}
#endif
{
diff --git a/libcxx/test/std/utilities/optional/optional.object/optional.object.observe/op_arrow.pass.cpp b/libcxx/test/std/utilities/optional/optional.object/optional.object.observe/op_arrow.pass.cpp
index ab5998fee..4e9d6cc1a 100644
--- a/libcxx/test/std/utilities/optional/optional.object/optional.object.observe/op_arrow.pass.cpp
+++ b/libcxx/test/std/utilities/optional/optional.object/optional.object.observe/op_arrow.pass.cpp
@@ -22,7 +22,7 @@ using std::optional;
struct X
{
int test() noexcept {return 3;}
- int test() const noexcept {return 3;}
+ int test() const noexcept { return 3; }
};
struct Y
diff --git a/libcxx/test/std/utilities/optional/optional.object/optional.object.observe/value_or_const.pass.cpp b/libcxx/test/std/utilities/optional/optional.object/optional.object.observe/value_or_const.pass.cpp
index d5df58dd8..304ea451b 100644
--- a/libcxx/test/std/utilities/optional/optional.object/optional.object.observe/value_or_const.pass.cpp
+++ b/libcxx/test/std/utilities/optional/optional.object/optional.object.observe/value_or_const.pass.cpp
@@ -77,10 +77,10 @@ int main(int, char**)
}
#if TEST_STD_VER >= 26
{
- X y{3};
- const optional<X&> opt;
- assert(opt.value_or(y) == 3);
+ X y{3};
+ const optional<X&> opt;
+ assert(opt.value_or(y) == 3);
}
-#endif
- return 0;
+#endif
+ return 0;
}
``````````
</details>
https://github.com/llvm/llvm-project/pull/155202
More information about the libcxx-commits
mailing list