[range.iter.op.distance] (original) (raw)

23 Iterators library [iterators]

23.4 Iterator primitives [iterator.primitives]

23.4.4 Range iterator operations [range.iter.ops]

23.4.4.3 ranges​::​distance [range.iter.op.distance]

Preconditions: [first, last) denotes a range, or [last, first) denotes a range andS and I modelsame_­as<S, I> && sized_­sentinel_­for<S, I>.

Effects: If S and I model sized_­sentinel_­for<S, I>, returns (last - first); otherwise, returns the number of increments needed to get fromfirsttolast.

template<[range](range.range#concept:range "24.4.2 Ranges [range.range]") R> constexpr range_difference_t<R> ranges::distance(R&& r);

Effects: If R models sized_­range, equivalent to:return static_cast<range_difference_t<R>>(ranges::size(r));

Otherwise, equivalent to:return ranges::distance(ranges::begin(r), ranges::end(r));