Files
2025-10-25 03:02:53 +03:00

52 lines
2.1 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

[range.counted]
# 25 Ranges library [[ranges]](./#ranges)
## 25.7 Range adaptors [[range.adaptors]](range.adaptors#range.counted)
### 25.7.19 Counted view [range.counted]
[1](#1)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/ranges.tex#L9712)
A counted view presents a view of the elements
of the counted range ([[iterator.requirements.general]](iterator.requirements.general "24.3.1General")) i+[0, n) for an iterator i and non-negative integer n[.](#1.sentence-1)
[2](#2)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/ranges.tex#L9718)
The name views::counted denotes
a customization point object ([[customization.point.object]](customization.point.object "16.3.3.3.5Customization Point Object types"))[.](#2.sentence-1)
Let E and F be expressions,
let T be decay_t<decltype((E))>, and
let D be iter_difference_t<T>[.](#2.sentence-2)
If decltype((F)) does not model[convertible_to](concept.convertible#concept:convertible_to "18.4.4Concept convertible_­to[concept.convertible]")<D>,views::counted(E, F) is ill-formed[.](#2.sentence-3)
[*Note [1](#note-1)*:
This case can result in substitution failure
when views::counted(E, F) appears in the immediate context of a template instantiation[.](#2.sentence-4)
— *end note*]
Otherwise, views::counted(E, F) is expression-equivalent to:
- [(2.1)](#2.1)
If T models [contiguous_iterator](iterator.concept.contiguous#concept:contiguous_iterator "24.3.4.14Concept contiguous_­iterator[iterator.concept.contiguous]"),
then span(to_address(E), static_cast<size_t>(static_cast<D>(F)))[.](#2.1.sentence-1)
- [(2.2)](#2.2)
Otherwise, if T models [random_access_iterator](iterator.concept.random.access#concept:random_access_iterator "24.3.4.13Concept random_­access_­iterator[iterator.concept.random.access]"),
then subrange(E, E + static_cast<D>(F)),
except that E is evaluated only once[.](#2.2.sentence-1)
- [(2.3)](#2.3)
Otherwise,subrange(counted_iterator(E, F), default_sentinel)[.](#2.3.sentence-1)