*this contains a value | *this does not contain a value | ||
rhs contains a value | assigns *std::move(rhs) to the contained value | direct-non-list-initializes the contained value with *std::move(rhs) | |
rhs does not contain a value | destroys the contained value by calling val->T::~T() | no effect |