[libcxx-commits] [libcxx] [libc++] Remove `optional::iterator` from experimental mode (PR #203782)
Louis Dionne via libcxx-commits
libcxx-commits at lists.llvm.org
Wed Oct 7 12:47:23 PDT 2026
================
@@ -681,50 +682,77 @@ class _LIBCPP_DECLSPEC_EMPTY_BASES optional
using __base::reset;
-# if _LIBCPP_STD_VER >= 26 && _LIBCPP_HAS_EXPERIMENTAL_OPTIONAL_ITERATOR
+# if _LIBCPP_STD_VER >= 26
private:
using __pointer _LIBCPP_NODEBUG = add_pointer_t<_Tp>;
using __const_pointer _LIBCPP_NODEBUG = add_pointer_t<const _Tp>;
-public:
+ template <class _Up = _Tp, bool = std::__range_fits_in_alignment(alignof(_Up), 1)>
+ struct __iterator {
# ifdef _LIBCPP_ABI_BOUNDED_ITERATORS_IN_OPTIONAL
- using iterator = __bounded_iter<__pointer>;
- using const_iterator = __bounded_iter<__const_pointer>;
+ using __type _LIBCPP_NODEBUG = std::__bounded_iter<__pointer>;
+ using __const_type _LIBCPP_NODEBUG = std::__bounded_iter<__const_pointer>;
# else
- using iterator = __capacity_aware_iterator<__pointer, 1>;
- using const_iterator = __capacity_aware_iterator<__const_pointer, 1>;
+ using __type _LIBCPP_NODEBUG = std::__static_packed_bounded_iterator<__pointer, 1>;
+ using __const_type _LIBCPP_NODEBUG = std::__static_packed_bounded_iterator<__const_pointer, 1>;
# endif
- // [optional.iterators], iterator support
- [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr iterator begin() noexcept {
- auto* __ptr = std::addressof(this->__val_);
-
+ template <class _PtrType>
+ static auto __make(_PtrType __p, [[__maybe_unused__]] unsigned __end_offset) noexcept {
----------------
ldionne wrote:
Suggestion to pass `true|false /* is engaged */` instead and to compute the offset inside `__make` -- that way the rest of the code doesn't have to reason about how the iterator interacts with offsets.
https://github.com/llvm/llvm-project/pull/203782
More information about the libcxx-commits
mailing list