Difference between revisions of "cpp/iterator/incrementable"
m (→See also: P1754R1) |
Andreas Krug (Talk | contribs) m (fmt, .) |
||
(One intermediate revision by one user not shown) | |||
Line 3: | Line 3: | ||
{{dcl begin}} | {{dcl begin}} | ||
{{dcl header|iterator|since=c++20}} | {{dcl header|iterator|since=c++20}} | ||
− | {{dcl | since=c++20 | 1= | + | {{dcl|since=c++20|1= |
− | template<class I> | + | template< class I > |
concept incrementable = | concept incrementable = | ||
std::regular<I> && | std::regular<I> && | ||
Line 14: | Line 14: | ||
{{dcl end}} | {{dcl end}} | ||
− | This concept specifies requirements on types that can be incremented with the pre- and post-increment operators, whose increment operations are equality-preserving, and the type is {{lc|std::equality_comparable}}. | + | This concept specifies requirements on types that can be incremented with the pre- and post-increment operators, whose increment operations are [[cpp/concepts#Equality preservation|equality-preserving]], and the type is {{lc|std::equality_comparable}}. |
Unlike with {{lc|std::weakly_incrementable}}, which only support single-pass algorithms, multi-pass one-directional algorithms can be used with types that model {{tt|std::incrementable}}. | Unlike with {{lc|std::weakly_incrementable}}, which only support single-pass algorithms, multi-pass one-directional algorithms can be used with types that model {{tt|std::incrementable}}. | ||
Line 20: | Line 20: | ||
===Semantic requirements=== | ===Semantic requirements=== | ||
{{tt|I}} models {{tt|std::incrementable}} only if given any two incrementable objects {{tt|a}} and {{tt|b}} of type {{tt|I}}: | {{tt|I}} models {{tt|std::incrementable}} only if given any two incrementable objects {{tt|a}} and {{tt|b}} of type {{tt|I}}: | ||
− | * {{c|bool(a | + | * {{c|1=bool(a == b)}} implies {{c|1=bool(a++ == b)}}, and |
− | * {{c|bool(a | + | * {{c|1=bool(a == b)}} implies {{c|1=bool(((void)a++, a) == ++b)}}. |
{{cpp/concepts/equality preservation}} | {{cpp/concepts/equality preservation}} | ||
− | === See also === | + | ===See also=== |
{{dsc begin}} | {{dsc begin}} | ||
− | {{dsc inc | cpp/iterator/dsc weakly_incrementable}} | + | {{dsc inc|cpp/iterator/dsc weakly_incrementable}} |
− | {{dsc inc | cpp/concepts/dsc same_as}} | + | {{dsc inc|cpp/concepts/dsc same_as}} |
{{dsc end}} | {{dsc end}} | ||
{{langlinks|de|es|ja|ru|zh}} | {{langlinks|de|es|ja|ru|zh}} |
Latest revision as of 22:03, 30 September 2023
Defined in header <iterator>
|
||
template< class I > concept incrementable = |
(since C++20) | |
This concept specifies requirements on types that can be incremented with the pre- and post-increment operators, whose increment operations are equality-preserving, and the type is std::equality_comparable.
Unlike with std::weakly_incrementable, which only support single-pass algorithms, multi-pass one-directional algorithms can be used with types that model std::incrementable
.
[edit] Semantic requirements
I
models std::incrementable
only if given any two incrementable objects a
and b
of type I
:
- bool(a == b) implies bool(a++ == b), and
- bool(a == b) implies bool(((void)a++, a) == ++b).
[edit] Equality preservation
Expressions declared in requires expressions of the standard library concepts are required to be equality-preserving (except where stated otherwise).
[edit] See also
(C++20) |
specifies that a semiregular type can be incremented with pre- and post-increment operators (concept) |
(C++20) |
specifies that a type is the same as another type (concept) |