Otherwise, if
T is a class or enumeration type and
decay-copy(begin(t))
is a valid expression whose type models
input_or_output_iterator
with overload resolution performed in a context in which
unqualified lookup for
begin finds only the declarations
void begin(auto&) = delete;
void begin(const auto&) = delete;
then
ranges::begin(E) is expression-equivalent to
decay-copy(begin(t))
with overload resolution performed in the above context
.