std::experimental::ranges:: ConvertibleTo
|
Défini dans l'en-tête
<experimental/ranges/concepts>
|
||
|
template
<
class
From,
class
To
>
concept
bool
ConvertibleTo
=
|
(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
-
Ton'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 :
-
Fromn'est pas un type référence-vers-objet, ou -
Fromest 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
|
(C++11)
(C++20)
|
vérifie si un type peut être converti en un autre type
(modèle de classe) |