std:: sentinel_for
| Iterator concepts | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Iterator primitives | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Algorithm concepts and utilities | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Indirect callable concepts | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Common algorithm requirements | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Utilities | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Iterator adaptors | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Definido en el encabezado
<iterator>
|
||
|
template
<
class
S,
class
I
>
concept sentinel_for
=
|
(desde C++20) | |
El concepto
sentinel_for
especifica la relación entre un tipo
input_or_output_iterator
y un tipo
semiregular
cuyos valores denotan un rango. El concepto solo de exposición
__WeaklyEqualityComparableWith
se describe en
equality_comparable
.
Requisitos semánticos
Sean
s
y
i
valores de tipo
S
y
I
, respectivamente, tales que
[
i
,
s
)
denota un
rango
.
sentinel_for<S, I>
se modela solo si:
- i == s está bien definido.
-
Si
bool
(
i
!
=
s
)
entonces
ies dereferenciable y[++ i,s)denota un rango. - std:: assignable_from < I & , S > está modelado o no se satisface.
El dominio de
==
puede cambiar con el tiempo. Dado un iterador
i
y un centinela
s
tal que
[
i
,
s
)
denota un rango y
i
!
=
s
,
[
i
,
s
)
no está obligado a continuar denotando un rango después de incrementar cualquier iterador igual a
i
(y por lo tanto
i
==
s
ya no está obligado a estar bien definido después de tal incremento).
Notas
Un tipo centinela y su tipo de iterador correspondiente no requieren modelar
equality_comparable_with
, porque el tipo centinela podría no ser comparable consigo mismo, y no se requiere que tengan un tipo de referencia común.
Se ha permitido utilizar un tipo centinela diferente del tipo iterador en el
bucle
for
basado en rangos
desde C++17.
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 3453 | C++20 |
los requisitos semánticos para
sentinel_for
eran demasiado flexibles para
ranges::advance
|
fortalecidos |