Otherwise, if disable_sized_range<remove_cv_t<T>> ([range.sized])
is false and
decay-copy(t.size())
is a valid expression of integer-like type ([iterator.concept.winc]),
ranges::size(E) is expression-equivalent to
decay-copy(t.size()).
Otherwise, if T is a class or enumeration type,
disable_sized_range<remove_cv_t<T>> is false and
decay-copy(size(t))
is a valid expression of integer-like type
with overload resolution performed in a context in which
unqualified lookup for size finds only the declarations
Otherwise, if
to-unsigned-like(ranges::end(t)- ranges::begin(t)) ([ranges.syn])
is a valid expression and
the types I and S of ranges::begin(t) and
ranges::end(t) (respectively) model both
sized_sentinel_for<S, I> ([iterator.concept.sizedsentinel]) and
forward_iterator<I>,
then ranges::size(E) is expression-equivalent to
to-unsigned-like(ranges::end(t)- ranges::begin(t)).