Namespaces
Variants

std:: sentinel_for

From cppreference.net
Iterator library
Iterator concepts
Iterator primitives
Algorithm concepts and utilities
Indirect callable concepts
Common algorithm requirements
(C++20)
(C++20)
(C++20)
Utilities
(C++20)
Iterator adaptors
Range access
(C++11) (C++14)
(C++14) (C++14)
(C++11) (C++14)
(C++14) (C++14)
(C++17) (C++20)
(C++17)
(C++17)
Défini dans l'en-tête <iterator>
template < class S, class I >

concept sentinel_for =
std:: semiregular < S > &&
std:: input_or_output_iterator < I > &&

__WeaklyEqualityComparableWith < S, I > ;
(depuis C++20)

Le concept sentinel_for spécifie la relation entre un type input_or_output_iterator et un type semiregular dont les valeurs dénotent un intervalle. Le concept uniquement à titre d'exposition __WeaklyEqualityComparableWith est décrit dans equality_comparable .

Exigences sémantiques

Soient s et i des valeurs de type S et I , respectivement, telles que [ i , s ) dénote un intervalle . sentinel_for<S, I> est modélisé seulement si :

  • i == s est bien défini.
  • Si bool ( i ! = s ) alors i est déréférençable et [ ++ i , s ) dénote un intervalle.
  • std:: assignable_from < I & , S > est soit modélisé soit non satisfait.

Le domaine de == peut changer au fil du temps. Étant donné un itérateur i et un sentinelle s tels que [ i , s ) dénote un intervalle et i ! = s , [ i , s ) n'est pas requis de continuer à dénoter un intervalle après incrémentation de tout itérateur égal à i (et donc i == s n'est plus requis d'être bien défini après une telle incrémentation).

Notes

Un type sentinelle et son type d'itérateur correspondant ne sont pas requis de modéliser equality_comparable_with , car le type sentinelle peut ne pas être comparable avec lui-même, et ils ne sont pas requis d'avoir un type de référence commun.

Il est permis d'utiliser un type sentinelle différent du type d'itérateur dans la boucle for basée sur un intervalle depuis C++17.

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Applicable à Comportement publié Comportement corrigé
LWG 3453 C++20 les exigences sémantiques pour sentinel_for étaient trop permissives pour ranges::advance renforcées