Namespaces
Variants

std::experimental::ranges:: SizedSentinel

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

concept bool SizedSentinel =
Sentinel < S, I > &&
! ranges :: disable_sized_sentinel < std:: remove_cv_t < S > , std:: remove_cv_t < I >> &&
requires ( const I & i, const S & s ) {
{ s - i } - > Same < ranges :: difference_type_t < I >> && ;
{ i - s } - > Same < ranges :: difference_type_t < I >> && ;

} ;
(1) (ranges TS)
template < class S, class I >
constexpr bool disable_sized_sentinel = false ;
(1) (ranges TS)

Le concept SizedSentinel spécifie qu'un objet du type d'itérateur I et un objet du type sentinelle S peuvent être soustraits pour calculer la distance entre eux en temps constant.

Soit i un itérateur de type I , et s un sentinelle de type S tel que [ i , s ) dénote un intervalle. Soit N le plus petit nombre d'applications de ++i nécessaire pour que bool ( i == s ) soit vrai. Alors SizedSentinel<S, I> est satisfait seulement si :

  • Si N est représentable par ranges :: difference_type_t < I > , alors s - i est bien défini et égal à N ; et
  • Si -N est représentable par ranges :: difference_type_t < I > , alors i - s est bien défini et égal à -N .

Le modèle de variable disable_sized_sentinel fournit un mécanisme permettant aux itérateurs et sentinelles qui peuvent être soustraits mais ne satisfont pas aux exigences sémantiques de SizedSentinel de se désengager du concept en spécialisant le modèle de variable pour qu'il ait la valeur true .

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.

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.

Variations d'expressions implicites

Une requires-expression qui utilise une expression non modifiante pour un opérande constant lvalue donné exige également implicitement des variations supplémentaires de cette expression qui acceptent un lvalue non constant ou un rvalue (éventuellement constant) pour l'opérande donné, sauf si une telle variation d'expression est explicitement exigée avec une sémantique différente. Ces variations d'expression implicites doivent satisfaire aux mêmes exigences sémantiques que l'expression déclarée. La mesure dans laquelle une implémentation valide la syntaxe des variations n'est pas spécifiée.