22
Iterators library
[iterators]
22.3
Iterator requirements
[iterator.requirements]
22.3.5
C++17 iterator requirements
[iterator.cpp17]
22.3.5.1
Cpp17Iterator
[iterator.iterators]
1
#
The
Cpp17Iterator
requirements form the basis of the iterator taxonomy; every iterator satisfies the
Cpp17Iterator
requirements
.
This set of requirements specifies operations for dereferencing and incrementing an iterator
.
Most algorithms will require additional operations to read (
[input.iterators]
) or write (
[output.iterators]
) values, or to provide a richer set of iterator movements (
[forward.iterators]
,
[bidirectional.iterators]
,
[random.access.iterators]
)
.
2
#
A type
X
satisfies the
Cpp17Iterator
requirements if:
(2.1)
X
satisfies the
Cpp17CopyConstructible
,
Cpp17CopyAssignable
, and
Cpp17Destructible
requirements (
[utility.arg.requirements]
) and lvalues of type
X
are swappable (
[swappable.requirements]
), and
(2.2)
the expressions in Table
73
are valid and have the indicated semantics
.
Table
73
—
Cpp17Iterator
requirements
Expression
Return type
Operational
Assertion/note
semantics
pre-/post-condition
*
r
unspecified
Requires:
r
is dereferenceable
.
+
+
r
X
&