23
Iterators library
[iterators]
23.3
Iterator requirements
[iterator.requirements]
23.3.5
C++17 iterator requirements
[iterator.cpp17]
23.3.5.2
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
&