Namespaces
Variants

std::variant_alternative, std::variant_alternative_t

Aus de.cppreference.net
 
 
Hilfsmittelbibliothek
Sprachunterstützung
Typunterstützung (Basistypen, RTTI)
Bibliotheks-Feature-Test-Makros (C++20)
Programm-Hilfsmittel
Variadische Funktionen
Koroutinen-Unterstützung (C++20)
Vertragsunterstützung (C++26)
Drei-Wege-Vergleich
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Allgemeine Hilfsmittel
Relationale Operatoren (veraltet in C++20)
Ganzzahl-Vergleichsfunktionen
(C++20)(C++20)(C++20)    
(C++20)
Swap- und Typoperationen
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Allgemeine Vokabular-Typen
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)



 
 
Definiert in 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>;
template <std::size_t I, class T>
class variant_alternative<I, const volatile T>;
(3) (seit C++17)
(veraltet in C++20)

Bietet einen indizierten Zugriff auf die Typen der Alternativen der möglicherweise cv-qualifizierten Variante zur Compilezeit, wobei cv-Qualifizierungen der Variante (falls vorhanden) mit den cv-Qualifizierungen der Alternative kombiniert werden.

Formal,

2) erfüllt die TransformationTrait-Anforderungen mit einem Mitglieds-Typedef type gleich dem Typ der Alternative mit Index I
3) erfüllt die TransformationTrait-Anforderungen mit einem Mitglieds-Typedef 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>>

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

ermittelt die Größe der Alternativenliste des variant zur Kompilierzeit
(Klassentemplate) (Variable-Template)
ermittelt den Typ des angegebenen Elements
(Klassentemplate-Spezialisierung)