23
Iterators library
[iterators]
23.3
Iterator requirements
[iterator.requirements]
23.3.5
C++17 iterator requirements
[iterator.cpp17]
23.3.5.1
Cpp17Iterator
[iterator.iterators]
1
#
The
Cpp17Iterator
requirements form the basis of the iterator taxonomy; every iterator meets 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
meets the
Cpp17Iterator
requirements if:
(2.1)
X
meets the
Cpp17CopyConstructible
,
Cpp17CopyAssignable
, and
Cpp17Destructible
requirements (
[utility.arg.requirements]
) and lvalues of type
X
are swappable (
[swappable.requirements]
), and
(2.2)
iterator_traits
<
X
>
::
difference_type
is a signed integer type or
void
, and
(2.3)
the expressions in Table
84
are valid and have the indicated semantics
.
Table
84
:
Cpp17Iterator
requirements [tab:iterator]
Expression
Return type
Operational
Assertion/note
semantics
pre-/post-condition
*
r
unspecified
Preconditions:
r
is dereferenceable
.
+
+
r
X
&