2.5 KiB
[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.2 Header <iterator> synopsis [iterator.synopsis]")<const I>;
Hardened preconditions: holds_alternative(v_) is true.
Effects: Equivalent to: return *get(v_);
constexpr auto operator->() const requires see below;
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>)
Hardened preconditions: holds_alternative(v_) is true.
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_); }};