Files
2025-10-25 03:02:53 +03:00

2.5 KiB
Raw Permalink Blame History

[common.iter.access]

24 Iterators library [iterators]

24.5 Iterator adaptors [predef.iterators]

24.5.5 Common iterators [iterators.common]

24.5.5.4 Accessors [common.iter.access]

🔗

constexpr decltype(auto) operator*(); constexpr decltype(auto) operator*() const requires [dereferenceable](iterator.synopsis#concept:dereferenceable "24.2Header <iterator>&nbsp;synopsis[iterator.synopsis]")<const I>;

1

#

Hardened preconditions: holds_alternative(v_) is true.

2

#

Effects: Equivalent to: return *get(v_);

🔗

constexpr auto operator->() const requires see below;

3

#

The expression in the requires-clause is equivalent to:indirectly_readable &&(requires(const I& i) { i.operator->(); } || is_reference_v<iter_reference_t> ||constructible_from<iter_value_t, iter_reference_t>)

4

#

Hardened preconditions: holds_alternative(v_) is true.

5

#

Effects:

If I is a pointer type or if the expressionget(v_).operator->() is well-formed, equivalent to: return get(v_);

Otherwise, if iter_reference_t is a reference type, equivalent to:auto&& tmp = *get(v_);return addressof(tmp);

Otherwise, equivalent to:return proxy(get(v_)); whereproxy* is the exposition-only class:class proxy { iter_value_t keep_; constexpr proxy(iter_reference_t&& x): keep_(std::move(x)) {}public:constexpr const iter_value_t* operator->() const noexcept {return addressof(keep_); }};