Namespaces
Variants

std:: sized_sentinel_for, std:: disable_sized_sentinel_for

From cppreference.net
Iterator library
Iterator concepts
sized_sentinel_for
(C++20)

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 sized_sentinel_for =
std:: sentinel_for < S, I > &&
! std :: disable_sized_sentinel_for < std:: remove_cv_t < S > ,
std:: remove_cv_t < I >> &&
requires ( const I & i, const S & s ) {
{ s - i } - > std:: same_as < std:: iter_difference_t < I >> ;
{ i - s } - > std:: same_as < std:: iter_difference_t < I >> ;

} ;
(1) (depuis C++20)
template < class S, class I >
inline constexpr bool disable_sized_sentinel_for = false ;
(2) (depuis C++20)
1) Le concept sized_sentinel_for 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.
2) La variable template disable_sized_sentinel_for peut être utilisée pour empêcher que les itérateurs et sentinelles qui peuvent être soustraits mais ne modélisent pas réellement sized_sentinel_for ne satisfassent le concept.
Un programme peut spécialiser disable_sized_sentinel_for pour un type d'objet non-tableau sans qualificatif cv S et I , à condition qu'au moins l'un d'entre eux soit un type défini par le programme . De telles spécialisations sont utilisables dans les expressions constantes et ont le type const bool .

Table des matières

Exigences sémantiques

Soit i un itérateur de type I , et s une sentinelle de type S tels que [ i , s ) dénote un intervalle. Soit n le plus petit nombre d'applications de ++ i nécessaires pour que bool ( i == s ) soit true . I et S modélisent sized_sentinel_for<S, I> seulement si toutes les conditions suivantes sont satisfaites :

Préservation de l'égalité

Les expressions déclarées dans les requires expressions des concepts de la bibliothèque standard doivent être equality-preserving (sauf indication contraire).

Variations d'expressions implicites

Une requires expression qui utilise une expression non modifiante pour un opérande constant lvalue requiert également les variations d'expression implicites .

Voir aussi

spécifie qu'un range connaît sa taille en temps constant
(concept)
retourne un entier égal à la taille d'un range
(customization point object)