std::get(std::variant)(3)
π NAME π
okay so bestie, this is the page for std::get(std::variant) β manual page std::get(std::variant)(3) β from the C++ Standard Libary manual (yes, that's the header spelling, not me ππ). It's literally the βhow do I get the thing out of my variantβ function, and it's giving very much C++17 main-character energy. β¨
πΈ Synopsis πΈ
Defined in header <variant>
template< std::size_t I, class... Types >
constexpr std::variant_alternative_t<I, std::variant<Types...>>&
get( std::variant<Types...>& v );
template< std::size_t I, class... Types >
constexpr std::variant_alternative_t<I, std::variant<Types...>>&&
get( std::variant<Types...>&& v );
template< std::size_t I, class... Types >
constexpr const std::variant_alternative_t<I, std::variant<Types...>>&
get( const std::variant<Types...>& v );
template< std::size_t I, class... Types >
constexpr const std::variant_alternative_t<I, std::variant<Types...>>&&
get( const std::variant<Types...>&& v );
template< class T, class... Types >
constexpr T& get( std::variant<Types...>& v );
template< class T, class... Types >
constexpr T&& get( std::variant<Types...>&& v );
template< class T, class... Types >
constexpr const T& get( const std::variant<Types...>& v );
template< class T, class... Types >
constexpr const T&& get( const std::variant<Types...>&& v );
The index-based overloads are (1), the type-based overloads are (2), and both are (since C++17). π«Ά
okay so there are two whole flavors of this iconic little accessor, and the numbered deets are:
- Index-based value accessor: If
v.index() == I, returns a reference to the value stored inv. Otherwise, throwsstd::bad_variant_access. The call is ill-formed ifIis not a valid index in the variant. - Type-based value accessor: If
vholds the alternativeT, returns a reference to the value stored inv. Otherwise, throwsstd::bad_variant_access. The call is ill-formed ifTis not a unique element ofTypes....
π Template parameters π
Iβ index to look up πTβ unique type to look up π¦Types...β types forming the variant π§
π Parameters π
vβ a variant. That's the whole parameter. slay. π
β¨ Return value β¨
Reference to the value stored in the variant. no cap. π«
π₯ Exceptions π₯
1,2)β throwsstd::bad_variant_accesson errors. bestie, it will absolutely let you know when the vibe check fails. π
π Example π
// Run this code
#include <variant>
#include <string>
#include <iostream>
int main()
{
std::variant<int, float> v{12}, w;
std::cout << std::get<int>(v) << '\n';
w = std::get<int>(v);
w = std::get<0>(v); // same effect as the previous line
// std::get<double>(v); // error: no double in [int, float]
// std::get<3>(v); // error: valid index values are 0 and 1
try
{
w = 42.0f;
std::cout << std::get<float>(w) << '\n'; // ok, prints 42
w = 42;
std::cout << std::get<float>(w) << '\n'; // throws
}
catch (std::bad_variant_access const& ex)
{
std::cout << ex.what() << ": w contained int, not float\n";
}
}
π¦ Possible output π¦
12
42
Unexpected index: w contained int, not float
β See also β
get_if(C++17)β obtains a pointer to the value of a pointed-to variant given the index or the type (if unique), returns null on error (function template)get(std::tuple)(C++11)β tuple accesses specified element (function template)get(std::array)(C++11)β accesses an element of an array (function template)get(std::pair)(C++11)β accesses an element of a pair (function template)get(std::ranges::subrange)(C++20)β obtains iterator or sentinel from astd::ranges::subrange(function template)
π Category π
* Uses of dcl rev begin with nonempty note
mwah π this lil' page was served fresh from http://cppreference.com, version/date 2024.06.10, and it's manual page std::get(std::variant)(3). byeee bestie π«Άππ
π¦ where this page comes from
- nixpkgs unstable: stdman 2024.07.05
- opensuse-leap 16.0: stdman 2024.07.05-bp160.1.9 Β· MIT
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms