The expression in the requires-clause is equivalent to:
indirectly_readable<const I>&&(requires(const I& i){ i.operator->(); }||
is_reference_v<iter_reference_t<I>>||constructible_from<iter_value_t<I>, iter_reference_t<I>>)
Otherwise, equivalent to:
returnproxy(*get<I>(v_)); where
proxy is the exposition-only class:
classproxy{
iter_value_t<I> keep_;
proxy(iter_reference_t<I>&& x): keep_(std::move(x)){}public:const iter_value_t<I>*operator->()const{return addressof(keep_);
}};