[libcxx-commits] [libcxx] [libc++] Implement P2988R12: `std::optional<T&>` (PR #155202)

A. Jiang via libcxx-commits libcxx-commits at lists.llvm.org
Fri Nov 7 04:05:32 PST 2025


================
@@ -754,6 +823,41 @@ public:
     this->__construct_from(std::move(__v));
   }
 
+  // deleted optional<T&> constructors
+#    if _LIBCPP_STD_VER >= 26
+  template <class _Up,
+            class... _Args,
+            enable_if_t<is_constructible_v<value_type, initializer_list<_Up>&, _Args...>, int> = 0>
+    requires __libcpp_opt_ref_ctor_deleted<_Up>
+  _LIBCPP_HIDE_FROM_ABI constexpr explicit optional(in_place_t, initializer_list<_Up> __il, _Args&&... __args) = delete;
----------------
frederick-vs-ja wrote:

It seems better to remove parameter names and `constexpr` from deleted overloads, ditto below. Not very sure for `_LIBCPP_HIDE_FROM_ABI`.
```suggestion
  _LIBCPP_HIDE_FROM_ABI explicit optional(in_place_t, initializer_list<_Up>, _Args&&...) = delete;
```

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


More information about the libcxx-commits mailing list