constexpr void swap(optional& rhs) noexcept(see below);
*this contains a value | *this does not contain a value | ||
rhs contains a value | calls swap(val, rhs.val) | direct-non-list-initializes val
with std::move(rhs.val),
followed by rhs.val.T::~T();
postcondition is that *this contains a value and rhs does not contain a value | |
rhs does not contain a value | direct-non-list-initializes rhs.val
with std::move(val),
followed by val.T::~T();
postcondition is that *this does not contain a value and rhs contains a value | no effect |