[
Note 1:
A
variant might not hold a value if an exception is thrown during a
type-changing assignment or emplacement
. The latter means that even a
variant<float, int> can become valueless_by_exception(), for
instance by
struct S { operator int() { throw 42; }};
variant<float, int> v{12.f};
v.emplace<1>(S());
—
end note]