[range.iter.op.distance] (original) (raw)
24 Iterators library [iterators]
24.4 Iterator primitives [iterator.primitives]
24.4.4 Range iterator operations [range.iter.ops]
24.4.4.3 ranges::distance [range.iter.op.distance]
Preconditions: [first, last) denotes a range.
Effects: Increments first until last is reached and returns the number of increments.
template<class I, [sized_sentinel_for](iterator.concept.sizedsentinel#concept:sized%5Fsentinel%5Ffor "24.3.4.8 Concept sized_sentinel_for [iterator.concept.sizedsentinel]")<decay_t<I>> S> constexpr iter_difference_t<decay_t<I>> ranges::distance(I&& first, S last);
Effects: Equivalent to:if constexpr (!is_array_v<remove_reference_t<I>>) return last - first;else return last - static_cast<decay_t<I>>(first);
template<[range](range.range#concept:range "25.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));