Namespaces
Variants

std::experimental::ranges:: WeaklyIncrementable

From cppreference.net
Défini dans l'en-tête <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 > & ; /* non requis pour préserver l'égalité */
i ++ ; /* non requis pour préserver l'égalité */

} ;
(ranges TS)

Le concept WeaklyIncrementable<I> spécifie les exigences sur un type qui peut être incrémenté (avec les opérateurs de pré-incrémentation et de post-incrémentation). Les opérations d'incrémentation ne doivent pas nécessairement préserver l'égalité, et le type n'a pas besoin d'être EqualityComparable .

Soit i un objet de type I . i est dit incrémentable s'il se trouve dans le domaine de l'incrémentation préfixe et postfixe. WeaklyIncrementable<I> est satisfait seulement si :

  • ++ i et i ++ ont le même domaine ;
  • Si i est incrémentable, alors :
    • ++ i et i ++ font tous deux avancer i vers l'élément suivant ; et
    • ++ i fait référence au même objet que i .

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 sur ces objets d'entrée.

Notes

Pour les types WeaklyIncrementable , a égal à b n'implique pas que ++ a soit égal à ++ b . Les algorithmes sur de tels types doivent être à passage unique et ne doivent jamais tenter de passer deux fois par la même valeur.