Init
This commit is contained in:
60
cppdraft/iterator/concepts/general.md
Normal file
60
cppdraft/iterator/concepts/general.md
Normal 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.3 Qualified 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.3 Qualified 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*]
|
||||
Reference in New Issue
Block a user