#include #include #include #include int main() { std::variant v, w; v = 42; // v contains int int i = std::get(v); assert(42 == i); // succeeds w = std::get(v); w = std::get<0>(v); // same effect as the previous line w = v; // same effect as the previous line // std::get(v); // error: no double in [int, float] // std::get<3>(v); // error: valid index values are 0 and 1 try { std::get(w); // w contains int, not float: will throw } catch (const std::bad_variant_access& ex) { std::cout << ex.what() << '\n'; } using namespace std::literals; std::variant x("abc"); // converting constructors work when unambiguous x = "def"; // converting assignment also works when unambiguous std::variant y("abc"); // casts to void const * when passed a char const * assert(std::holds_alternative(y)); // succeeds y = "xyz"s; assert(std::holds_alternative(y)); // succeeds }