The approximately_sized_range concept refines range
with the requirement that
an approximation of the number of elements in the range
can be determined in amortized constant time using ranges::reserve_hint.
ranges::reserve_hint(t) is amortized O(1),
does not modify t, and
has a value that
is not negative and is representable in range_difference_t<T>, and
ranges::reserve_hint(t) is otherwise not required to be well-defined
after evaluating ranges:: begin(t).
For example,
it is possible for ranges::reserve_hint(t) to be well-defined for
an approximately_sized_range whose
iterator type does not model forward_iterator
only if evaluated before the first call to ranges::begin(t).