Remarks:
If an exception is thrown during the call to function
swap(get<i>(*this), get<i>(rhs)),
the states of the contained values of
*this and of
rhs are
determined by the exception safety guarantee of
swap for lvalues of
with
i being
index(). If an exception is thrown during the exchange of the values of
*this
and
rhs, the states of the values of
*this and of
rhs
are determined by the exception safety guarantee of
variant's move constructor
. The expression inside
noexcept is equivalent to the logical AND of
is_nothrow_move_constructible_v<> && is_nothrow_swappable_v<> for all
i.