Otherwise, if T is an array type ([basic.compound]) and
remove_Βall_Βextents_Βt<T> is an incomplete type,
rangesβ::βbegin(E) is ill-formed with no diagnostic required.
Otherwise, if decay-copy(t.begin())
is a valid expression whose type models
input_Βor_Βoutput_Βiterator,
rangesβ::βbegin(E) is expression-equivalent to
decay-copy(t.begin()).
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
Diagnosable ill-formed cases above
result in substitution failure when rangesβ::βbegin(E)
appears in the immediate context of a template instantiation.