std:: sentinel_for
| Iterator concepts | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Iterator primitives | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Algorithm concepts and utilities | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Indirect callable concepts | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Common algorithm requirements | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Utilities | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Iterator adaptors | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Definiert in Header
<iterator>
|
||
|
template
<
class
S,
class
I
>
concept sentinel_for
=
|
(seit C++20) | |
Das
sentinel_for
-Konzept spezifiziert die Beziehung zwischen einem
input_or_output_iterator
-Typ und einem
semiregular
-Typ, dessen Werte einen Bereich bezeichnen. Das nur zur Darstellung dienende Konzept
__WeaklyEqualityComparableWith
wird beschrieben in
equality_comparable
.
Semantische Anforderungen
Seien
s
und
i
Werte vom Typ
S
bzw.
I
, sodass
[
i
,
s
)
einen
Range
bezeichnet.
sentinel_for<S, I>
wird nur modelliert, wenn:
- i == s ist wohldefiniert.
-
Falls
bool
(
i
!
=
s
)
dann ist
idereferenzierbar und[++ i,s)bezeichnet einen Bereich. - std:: assignable_from < I & , S > wird entweder modelliert oder nicht erfüllt.
Der Bereich von
==
kann sich im Laufe der Zeit ändern. Gegeben ein Iterator
i
und ein Sentinel
s
, sodass
[
i
,
s
)
einen Bereich bezeichnet und
i
!
=
s
,
[
i
,
s
)
muss nach dem Inkrementieren eines beliebigen Iterators, der gleich
i
ist, nicht weiterhin einen Bereich bezeichnen (und somit ist
i
==
s
nach einem solchen Inkrement nicht länger zwingend wohldefiniert).
Hinweise
Ein Sentinel-Typ und sein entsprechender Iterator-Typ müssen nicht das Konzept
equality_comparable_with
modellieren, da der Sentinel-Typ möglicherweise nicht mit sich selbst vergleichbar ist, und sie müssen keinen gemeinsamen Referenztyp besitzen.
Es ist seit C++17 erlaubt, einen Sentinel-Typ zu verwenden, der sich vom Iterator-Typ im
bereichsbasierten
for
-Loop
unterscheidet.
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 3453 | C++20 |
Semantische Anforderungen für
sentinel_for
waren zu locker für
ranges::advance
|
verstärkt |