Namespaces
Variants

std::experimental::ranges:: Incrementable

From cppreference.net
Défini dans l'en-tête <experimental/ranges/iterator>
template < class I >

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

} ;
(ranges TS)

Le concept Incrementable<I> spécifie les exigences pour un type qui peut être incrémenté (avec les opérateurs de pré-incrémentation et post-incrémentation). Les opérations d'incrémentation (y compris celles requises par WeaklyIncrementable ) doivent préserver l'égalité, et le type doit être EqualityComparable .

Soient a et b des objets incrémentables de type I . Incrementable<I> est satisfait seulement si :

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

Préservation de l'égalité

Une expression est préservatrice d'égalité si elle produit des résultats égaux pour des entrées égales.

  • Les entrées d'une expression consistent en ses opérandes.
  • Les sorties d'une expression consistent en son résultat et tous les opérandes modifiés par l'expression (le cas échéant).

Toute expression devant préserver l'égalité doit en outre être stable : deux évaluations d'une telle expression avec les mêmes objets d'entrée doivent produire des sorties égales en l'absence de toute modification explicite intervenant entre-temps de ces objets d'entrée.

Sauf indication contraire, toute expression utilisée dans une requires-expression doit être égalité-préservante et stable, et l'évaluation de l'expression ne peut modifier que ses opérandes non constants. Les opérandes constants ne doivent pas être modifiés.

Notes

L'exigence que a soit égal à b implique que ++a soit égal à ++b permet l'utilisation d'algorithmes multi-passes avec les types Incrementable .