Namespaces
Variants

std::experimental::ranges:: ConvertibleTo

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

concept bool ConvertibleTo =
std:: is_convertible < From, To > :: value &&
requires ( From ( & f ) ( ) ) {
static_cast < To > ( f ( ) ) ;

} ;
(ranges TS)

Le concept ConvertibleTo < From, To > spécifie qu'une expression du type et de la catégorie de valeur spécifiés par From peut être convertie implicitement et explicitement vers le type To , et que les deux formes de conversion sont équivalentes.

Plus précisément, ConvertibleTo < From, To > est satisfait uniquement si, étant donnée la fonction inventée To test ( From ( & f ) ( ) ) { return f ( ) ; } et une fonction f de type From ( ) telle que l'expression f ( ) préserve l'égalité (voir ci-dessous),

  • Soit
    • To n'est ni un type d'objet ni un type référence-vers-objet, ou
    • static_cast < To > ( f ( ) ) est égal à test(f) , et
  • L'une des conditions suivantes est vraie :
    • From n'est pas un type référence-vers-objet, ou
    • From est une référence rvalue vers un type non qualifié const, et l'état résultant de l'objet référencé par f ( ) est valide mais non spécifié après l'une ou l'autre des expressions ci-dessus ; ou
    • l'objet référencé par f() n'est pas modifié par l'une ou l'autre des expressions ci-dessus.

Il n'est pas nécessaire qu'il y ait une relation de subsomption entre ConvertibleTo < From, To > et std:: is_convertible < From, To > :: value .

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 intervenue 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.

Voir aussi

vérifie si un type peut être converti en un autre type
(modèle de classe)