Namespaces
Variants

std:: sized_sentinel_for, std:: disable_sized_sentinel_for

From cppreference.net
Iterator library
Iterator concepts
sized_sentinel_for
(C++20)

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 sized_sentinel_for =
std:: sentinel_for < S, I > &&
! std :: disable_sized_sentinel_for < std:: remove_cv_t < S > ,
std:: remove_cv_t < I >> &&
requires ( const I & i, const S & s ) {
{ s - i } - > std:: same_as < std:: iter_difference_t < I >> ;
{ i - s } - > std:: same_as < std:: iter_difference_t < I >> ;

} ;
(1) (desde C++20)
template < class S, class I >
inline constexpr bool disable_sized_sentinel_for = false ;
(2) (desde C++20)
1) El concepto sized_sentinel_for especifica que un objeto del tipo iterador I y un objeto del tipo centinela S pueden restarse para calcular la distancia entre ellos en tiempo constante.
2) La disable_sized_sentinel_for plantilla de variable puede utilizarse para evitar que los iteradores y centinelas que pueden restarse pero que en realidad no modelan sized_sentinel_for satisfagan el concepto.
Un programa puede especializar disable_sized_sentinel_for para tipos de objeto no-array sin calificación cv S y I , siempre que al menos uno de ellos sea un tipo definido por el programa . Tales especializaciones son utilizables en expresiones constantes y tienen tipo const bool .

Contenidos

Requisitos semánticos

Sea i un iterador de tipo I , y s un centinela de tipo S tal que [ i , s ) denota un rango. Sea n el menor número de aplicaciones de ++ i necesarias para hacer que bool ( i == s ) sea true . I y S modelan sized_sentinel_for<S, I> solo si se satisfacen todas las siguientes condiciones:

Preservación de la igualdad

Las expresiones declaradas en las requires expressions de los conceptos de la biblioteca estándar deben ser equality-preserving (excepto cuando se indique lo contrario).

Variaciones de expresión implícita

Una requires expresión que utiliza una expresión que no modifica para algún operando constante lvalue también requiere variaciones de expresión implícitas .

Véase también

especifica que un rango conoce su tamaño en tiempo constante
(concepto)
devuelve un entero igual al tamaño de un rango
(objeto de punto de personalización)