22 General utilities library [utilities]

22.5 Optional objects [optional]

22.5.4 Partial specialization of optional for reference types [optional.optional.ref]

22.5.4.5 Iterator support [optional.ref.iterators]

using iterator = implementation-defined;
This type models contiguous_iterator ([iterator.concept.contiguous]), meets the Cpp17RandomAccessIterator requirements ([random.access.iterators]), and meets the requirements for constexpr iterators ([iterator.requirements.general]), with value type remove_cv_t<T>.
The reference type is T& for iterator.
All requirements on container iterators ([container.reqmts]) apply to optional​::​iterator.
constexpr iterator begin() const noexcept;
Returns: If has_value() is true, an iterator referring to *val.
Otherwise, a past-the-end iterator value.
constexpr iterator end() const noexcept;
Returns: begin() + has_value().