The sized_range concept refines range with
the requirement that the number of elements in the range can be determined
in amortized constant time using rangesβ::βsize.
rangesβ::βsize(t) is amortized O(1), does not modify t,
and is equal to rangesβ::βdistance(βrangesβ::βbegin(t), rangesβ::βend(t)), and
rangesβ::βsize(t) is otherwise not required to be
well-defined after evaluating rangesβ::βbegin(t).
For example, it is possible for rangesβ::βsize(t) to be well-defined
for a sized_range whose iterator type
does not model forward_iterator
only if evaluated before the first call to rangesβ::βbegin(t).