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