std:: variant_alternative, std:: variant_alternative_t
|
Défini dans l'en-tête
<variant>
|
||
|
template
<
std::
size_t
I,
class
T
>
struct variant_alternative ; /* indéfini */ |
(1) | (depuis C++17) |
|
template
<
std::
size_t
I,
class
...
Types
>
struct variant_alternative < I, variant < Types... >> ; |
(2) | (depuis C++17) |
|
template
<
std::
size_t
I,
class
T
>
class
variant_alternative
<
I,
const
T
>
;
|
(3) | (depuis C++17) |
|
template
<
std::
size_t
I,
class
T
>
class
variant_alternative
<
I,
volatile
T
>
;
|
(3) |
(depuis C++17)
(obsolète en C++20) |
Fournit un accès indexé à la compilation aux types des alternatives du variant éventuellement qualifié cv, en combinant les qualifications cv du variant (le cas échéant) avec les qualifications cv de l'alternative.
Formellement,
type
égal au type de l'alternative avec l'index
I
type
qui désigne, respectivement,
std::
add_const_t
<
std
::
variant_alternative_t
<
I,T
>>
,
std::
add_volatile_t
<
std
::
variant_alternative_t
<
I,T
>>
, et
std::
add_cv_t
<
std
::
variant_alternative_t
<
I,T
>>
Table des matières |
Types membres
| Type de membre | Définition |
| type |
le type de la
I
-ème alternative du variant, où
I
doit être dans
[0, sizeof...(Types))
, sinon le programme est mal formé.
|
Alias de modèle d'assistance
|
template
<
size_t I,
class
T
>
using variant_alternative_t = typename variant_alternative < I, T > :: type ; |
(depuis C++17) | |
Exemple
#include <variant> #include <iostream> using my_variant = std::variant<int, float>; static_assert(std::is_same_v <int, std::variant_alternative_t<0, my_variant>>); static_assert(std::is_same_v <float, std::variant_alternative_t<1, my_variant>>); // La qualification cv sur le type variant se propage au type alternatif extrait. static_assert(std::is_same_v <const int, std::variant_alternative_t<0, const my_variant>>); int main() { std::cout << "All static assertions passed.\n"; }
Sortie :
All static assertions passed.
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 | Appliqué à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| LWG 2974 | C++17 | un indice hors limites entraînait un comportement indéfini | rendu mal formé |
Voir aussi
|
(C++17)
|
obtient la taille de la liste d'alternatives de la
variant
au moment de la compilation
(modèle de classe) (modèle de variable) |
|
(C++11)
|
obtient le type de l'élément spécifié
(spécialisation de modèle de classe) |