[libcxx-commits] [libcxx] [libc++] Implement P2988R12:	`std::optional<T&> (PR #155202)
    Hristo Hristov via libcxx-commits 
    libcxx-commits at lists.llvm.org
       
    Mon Aug 25 01:44:02 PDT 2025
    
    
  
================
@@ -257,8 +257,88 @@ constexpr bool test() {
   return true;
 }
 
+#if TEST_STD_VER >= 26
+constexpr bool test_ref() {
+  // Test & overload
+  {
+    // Without & qualifier on F's operator()
+    {
+      int j = 42;
+      std::optional<int&> i{j};
+      assert(i.and_then(LVal{}) == 1);
+      assert(i.and_then(NOLVal{}) == std::nullopt);
+      ASSERT_SAME_TYPE(decltype(i.and_then(LVal{})), std::optional<int>);
----------------
H-G-Hristov wrote:
```suggestion
      int j = 42;
      std::optional<int&> i{j};
      
      std::same_as<std::optional<int> decltype(auto) r = i.and_then(LVal{});
      assert(r == 1);
      assert(i.and_then(NOLVal{}) == std::nullopt);
```
Sugestion as a preferred alternative AFAIK to `ASSERT_SAME_TYPE`: `std::same_as<std::optional<int> decltype(auto) ....` with C++20...
https://github.com/llvm/llvm-project/pull/155202
    
    
More information about the libcxx-commits
mailing list