This function shall not participate in overload resolution unless
is_same_v<decay_t<T>, variant> is false, unless
is_assignable_v<Tj&, T> && is_constructible_v<Tj, T> is true,
and unless the expression FUN(std::forward<T>(t)) (with
FUN being the above-mentioned set of imaginary functions)
is well formed.
If an exception is thrown during the assignment of std::forward<T>(t)
to the value contained in *this, the state of the contained value and
t are as defined by the exception safety guarantee of the assignment
expression; valueless_by_exception() will be false.