24 Ranges library [ranges]

24.7 Range adaptors [range.adaptors]

24.7.12 Counted view [range.counted]

A counted view presents a view of the elements of the counted range ([iterator.requirements.general]) for an iterator i and non-negative integer n.
The name views​::​counted denotes a customization point object ([customization.point.object]).
Let E and F be expressions, let T be decay_­t<decltype((E))>, and let D be iter_­difference_­t<T>.
If decltype((F)) does not model convertible_­to<D>, views​::​counted(E, F) is ill-formed.
[Note:
This case can result in substitution failure when views​::​counted(E, F) appears in the immediate context of a template instantiation.
— end note]
Otherwise, views​::​counted(E, F) is expression-equivalent to:
  • If T models contiguous_­iterator, then span{to_­address(E), static_­cast<D>(F)}.
  • Otherwise, if T models random_­access_­iterator, then subrange{E, E + static_­cast<D>(F)}, except that E is evaluated only once.
  • Otherwise, subrange{counted_­iterator{E, F}, default_­sentinel}.