std:: variant_alternative, std:: variant_alternative_t
|
Definiert im Header
<variant>
|
||
|
template
<
std::
size_t
I,
class
T
>
struct variant_alternative ; /* undefined */ |
(1) | (seit C++17) |
|
template
<
std::
size_t
I,
class
...
Types
>
struct variant_alternative < I, variant < Types... >> ; |
(2) | (seit C++17) |
|
template
<
std::
size_t
I,
class
T
>
class
variant_alternative
<
I,
const
T
>
;
|
(3) | (seit C++17) |
|
template
<
std::
size_t
I,
class
T
>
class
variant_alternative
<
I,
volatile
T
>
;
|
(3) |
(seit C++17)
(veraltet in C++20) |
Bietet kompilierzeitlichen indexbasierten Zugriff auf die Typen der Alternativen des möglicherweise cv-qualifizierten Variants, wobei die CV-Qualifikationen des Variants (falls vorhanden) mit den CV-Qualifikationen der Alternative kombiniert werden.
Formal,
type
gleich dem Typ der Alternative mit Index
I
type
, der jeweils
std::
add_const_t
<
std
::
variant_alternative_t
<
I,T
>>
,
std::
add_volatile_t
<
std
::
variant_alternative_t
<
I,T
>>
und
std::
add_cv_t
<
std
::
variant_alternative_t
<
I,T
>>
benennt
Inhaltsverzeichnis |
Mitgliedertypen
| Mitgliedtyp | Definition |
| type |
der Typ der
I
-ten Alternative der Variante, wobei
I
in
[0, sizeof...(Types))
liegen muss, andernfalls ist das Programm fehlerhaft.
|
Hilfsvorlagen-Alias
|
template
<
size_t I,
class
T
>
using variant_alternative_t = typename variant_alternative < I, T > :: type ; |
(seit C++17) | |
Beispiel
#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>>); // cv-qualification on the variant type propagates to the extracted alternative type. 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"; }
Ausgabe:
All static assertions passed.
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrektes Verhalten |
|---|---|---|---|
| LWG 2974 | C++17 | Index außerhalb der Grenzen führte zu undefiniertem Verhalten | als fehlerhaft deklariert |
Siehe auch
|
(C++17)
|
ermittelt die Größe der Alternativenliste des
variant
zur Kompilierzeit
(Klassentemplate) (Variable-Template) |
|
(C++11)
|
ermittelt den Typ des angegebenen Elements
(Klassentemplate-Spezialisierung) |