Namespaces
Variants

std::experimental::ranges:: Incrementable

From cppreference.net
Definido en el encabezado <experimental/ranges/iterator>
template < class I >

concept bool Incrementable =
Regular < I > &&
WeaklyIncrementable < I > &&
requires ( I i ) {
{ i ++ } - > Same < I > && ;

} ;
(ranges TS)

El concepto Incrementable<I> especifica los requisitos para un tipo que puede ser incrementado (con los operadores de pre-incremento y post-incremento). Las operaciones de incremento (incluyendo aquellas requeridas por WeaklyIncrementable ) deben preservar la igualdad, y se requiere que el tipo sea EqualityComparable .

Sean a y b objetos incrementables de tipo I . Incrementable<I> se satisface solo si:

  • Si bool ( a == b ) entonces bool ( a ++ == b ) .
  • Si bool ( a == b ) entonces bool ( void ( a ++ ) , a ) == ++ b ) .

Preservación de la igualdad

Una expresión es equality preserving si produce salidas iguales dadas entradas iguales.

  • Las entradas de una expresión consisten en sus operandos.
  • Las salidas de una expresión consisten en su resultado y todos los operandos modificados por la expresión (si los hay).

Toda expresión que deba preservar la igualdad debe además ser estable : dos evaluaciones de dicha expresión con los mismos objetos de entrada deben producir salidas iguales, a menos que exista una modificación explícita e intermedia de esos objetos de entrada.

A menos que se indique lo contrario, cada expresión utilizada en una requires-expression debe ser de preservación de igualdad y estable, y la evaluación de la expresión solo puede modificar sus operandos no constantes. Los operandos que son constantes no deben modificarse.

Notas

El requisito de que a sea igual a b implique que ++a sea igual a ++b permite el uso de algoritmos multipaso con tipos Incrementable .