|
|
Member functions | ||||
Observers | ||||
Modifiers | ||||
Visitation | ||||
(C++26) | ||||
Non-member functions | ||||
Helper classes | ||||
variant_alternative | ||||
Helper objects | ||||
Defined in header <variant> | ||
template<std::size_t I,class T> struct variant_alternative;/* undefined */ | (1) | (since C++17) |
template<std::size_t I,class...Types> struct variant_alternative<I, variant<Types...>>; | (2) | (since C++17) |
template<std::size_t I,class T>class variant_alternative<I,const T>; | (3) | (since C++17) |
template<std::size_t I,class T> class variant_alternative<I,volatile T>; | (3) | (since C++17) (deprecated in C++20) |
Provides compile-time indexed access to the types of the alternatives of the possibly cv-qualified variant, combining cv-qualifications of the variant (if any) with the cv-qualifications of the alternative.
Formally,
type
equal to the type of the alternative with indexI
type
that names, respectively,std::add_const_t<std::variant_alternative_t<I,T>>,std::add_volatile_t<std::variant_alternative_t<I,T>>, andstd::add_cv_t<std::variant_alternative_t<I,T>>Contents |
Member type | Definition |
type | the type ofI th alternative of the variant, whereI must be in[0, sizeof...(Types)) , otherwise the program is ill-formed. |
template<size_t I,class T> using variant_alternative_t=typename variant_alternative<I, T>::type; | (since C++17) | |
#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<constint, std::variant_alternative_t<0,const my_variant>>); int main(){std::cout<<"All static assertions passed.\n";}
Output:
All static assertions passed.
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR | Applied to | Behavior as published | Correct behavior |
---|---|---|---|
LWG 2974 | C++17 | out-of-bounds index resulted in undefined behavior | made ill-formed |
(C++17) | obtains the size of thevariant 's list of alternatives at compile time(class template)(variable template)[edit] |
obtains the type of the specified element (class template specialization)[edit] |