std:: sentinel_for
| Iterator concepts | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Iterator primitives | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Algorithm concepts and utilities | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Indirect callable concepts | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Common algorithm requirements | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Utilities | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Iterator adaptors | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Défini dans l'en-tête
<iterator>
|
||
|
template
<
class
S,
class
I
>
concept sentinel_for
=
|
(depuis C++20) | |
Le concept
sentinel_for
spécifie la relation entre un type
input_or_output_iterator
et un type
semiregular
dont les valeurs dénotent un intervalle. Le concept uniquement à titre d'exposition
__WeaklyEqualityComparableWith
est décrit dans
equality_comparable
.
Exigences sémantiques
Soient
s
et
i
des valeurs de type
S
et
I
, respectivement, telles que
[
i
,
s
)
dénote un
intervalle
.
sentinel_for<S, I>
est modélisé seulement si :
- i == s est bien défini.
-
Si
bool
(
i
!
=
s
)
alors
iest déréférençable et[++ i,s)dénote un intervalle. - std:: assignable_from < I & , S > est soit modélisé soit non satisfait.
Le domaine de
==
peut changer au fil du temps. Étant donné un itérateur
i
et un sentinelle
s
tels que
[
i
,
s
)
dénote un intervalle et
i
!
=
s
,
[
i
,
s
)
n'est pas requis de continuer à dénoter un intervalle après incrémentation de tout itérateur égal à
i
(et donc
i
==
s
n'est plus requis d'être bien défini après une telle incrémentation).
Notes
Un type sentinelle et son type d'itérateur correspondant ne sont pas requis de modéliser
equality_comparable_with
, car le type sentinelle peut ne pas être comparable avec lui-même, et ils ne sont pas requis d'avoir un type de référence commun.
Il est permis d'utiliser un type sentinelle différent du type d'itérateur dans la
boucle
for
basée sur un intervalle
depuis C++17.
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | Applicable à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| LWG 3453 | C++20 |
les exigences sémantiques pour
sentinel_for
étaient trop permissives pour
ranges::advance
|
renforcées |