[libcxx-commits] [libcxx] [libc++] P3168R2 Give std::optional Range Support (PR #146491)

Yanzuo Liu via libcxx-commits libcxx-commits at lists.llvm.org
Wed Jul 2 00:46:36 PDT 2025


================
@@ -976,6 +1120,29 @@ public:
   }
 #    endif // _LIBCPP_STD_VER >= 23
 
+// P3168R2
+#    if _LIBCPP_STD_VER >= 26
+
+  _LIBCPP_HIDE_FROM_ABI constexpr iterator begin() {
+    if (!this->has_value())
+      return end();
+    return iterator(__wrap_iter(static_cast<_Tp*>(this->__get())));
+  }
+
+  _LIBCPP_HIDE_FROM_ABI constexpr const_iterator begin() const {
+    if (!this->has_value())
+      return end();
+    return const_iterator(__wrap_iter(static_cast<const _Tp*>(this->__get())));
+  }
+
+  _LIBCPP_HIDE_FROM_ABI constexpr iterator end() { return iterator(__wrap_iter(static_cast<_Tp*>(nullptr))); }
+
+  _LIBCPP_HIDE_FROM_ABI constexpr const_iterator end() const {
+    return const_iterator(__wrap_iter(static_cast<const _Tp*>(nullptr)));
+  }
----------------
zwuis wrote:

Seems wrong after updating implementation of `operator++`.

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


More information about the libcxx-commits mailing list