This commit is contained in:
2025-10-25 03:02:53 +03:00
commit 043225d523
3416 changed files with 681196 additions and 0 deletions

View File

@@ -0,0 +1,60 @@
[iterator.concepts.general]
# 24 Iterators library [[iterators]](./#iterators)
## 24.3 Iterator requirements [[iterator.requirements]](iterator.requirements#iterator.concepts.general)
### 24.3.4 Iterator concepts [[iterator.concepts]](iterator.concepts#general)
#### 24.3.4.1 General [iterator.concepts.general]
[1](#1)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L1252)
For a type I, let *ITER_TRAITS*(I) denote
the type I if iterator_traits<I> names
a specialization generated from the primary template[.](#1.sentence-1)
Otherwise, *ITER_TRAITS*(I) denotesiterator_traits<I>[.](#1.sentence-2)
- [(1.1)](#1.1)
If the [*qualified-id*](expr.prim.id.qual#nt:qualified-id "7.5.5.3Qualified names[expr.prim.id.qual]")*ITER_TRAITS*(I)::iterator_concept is valid
and names a type, then *ITER_CONCEPT*(I) denotes that
type[.](#1.1.sentence-1)
- [(1.2)](#1.2)
Otherwise, if the [*qualified-id*](expr.prim.id.qual#nt:qualified-id "7.5.5.3Qualified names[expr.prim.id.qual]")*ITER_TRAITS*(I)::iterator_category is valid and names a type, then *ITER_CONCEPT*(I) denotes that type[.](#1.2.sentence-1)
- [(1.3)](#1.3)
Otherwise, if iterator_traits<I> names a specialization generated
from the primary template, then *ITER_CONCEPT*(I) denotes random_access_iterator_tag[.](#1.3.sentence-1)
- [(1.4)](#1.4)
Otherwise, *ITER_CONCEPT*(I) does not denote a type[.](#1.4.sentence-1)
[2](#2)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L1273)
[*Note [1](#note-1)*:
*ITER_TRAITS* enables independent syntactic determination
of an iterator's category and concept[.](#2.sentence-1)
— *end note*]
[*Example [1](#example-1)*:
struct I {using value_type = int; using difference_type = int; int operator*() const;
I& operator++();
I operator++(int);
I& operator--();
I operator--(int); bool operator==(I) const;};iterator_traits<I>::iterator_category denotes input_iterator_tag,
and *ITER_CONCEPT*(I) denotes random_access_iterator_tag[.](#2.sentence-2)
— *end example*]