Namespaces
Variants

std:: sentinel_for

From cppreference.net
Iterator library
Iterator concepts
Iterator primitives
Algorithm concepts and utilities
Indirect callable concepts
Common algorithm requirements
(C++20)
(C++20)
(C++20)
Utilities
(C++20)
Iterator adaptors
Range access
(C++11) (C++14)
(C++14) (C++14)
(C++11) (C++14)
(C++14) (C++14)
(C++17) (C++20)
(C++17)
(C++17)
Definido en el encabezado <iterator>
template < class S, class I >

concept sentinel_for =
std:: semiregular < S > &&
std:: input_or_output_iterator < I > &&

__WeaklyEqualityComparableWith < S, I > ;
(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 i es 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