Namespaces
Variants

std::experimental::ranges:: WeaklyIncrementable

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

concept bool WeaklyIncrementable =
Semiregular < I > &&
requires ( I i ) {
typename ranges :: difference_type_t < I > ;
requires SignedIntegral < ranges :: difference_type_t < I >> ;
{ ++ i } - > Same < I > & ; /* no se requiere que preserve la igualdad */
i ++ ; /* no se requiere que preserve la igualdad */

} ;
(ranges TS)

El concepto WeaklyIncrementable<I> especifica los requisitos para un tipo que puede ser incrementado (con los operadores de pre-incremento y post-incremento). Las operaciones de incremento no necesitan preservar la igualdad, y el tipo no necesita ser EqualityComparable .

Sea i un objeto de tipo I . i se dice que es incrementable si está en el dominio tanto del pre-incremento como del post-incremento. WeaklyIncrementable<I> se satisface solamente si:

  • ++ i y i ++ tienen el mismo dominio;
  • Si i es incrementable, entonces:
    • ++ i y i ++ ambos avanzan i al siguiente elemento; y
    • ++ i se refiere al mismo objeto que i .

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.

Notas

Para tipos WeaklyIncrementable , a igual a b no implica que ++ a sea igual a ++ b . Los algoritmos en tales tipos deben ser de una sola pasada y nunca intentar pasar por el mismo valor dos veces.