This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of WP status.
Section: 220.127.116.11 [expected.void.assign] Status: WP Submitter: Jonathan Wakely Opened: 2022-03-23 Last modified: 2022-07-30
Priority: Not Prioritized
View all issues with WP status.
For expected<cv void>::operator=(expected&&) we have this in the last bullet of the Effects element:
Otherwise, equivalent to unex = rhs.error().
That should be a move assignment, not a copy assignment.
[2022-05-17; Reflector poll]
Set status to Tentatively Ready after eight votes in favour during reflector poll.
[2022-07-15; LWG telecon: move to Ready]
[2022-07-25 Approved at July 2022 virtual plenary. Status changed: Ready → WP.]
This wording is relative to N4910.
Modify 18.104.22.168 [expected.void.assign] as indicated:
constexpr expected& operator=(expected&& rhs) noexcept(see below);
(4.1) — If this->has_value() && rhs.has_value() is true, no effects.
(4.2) — Otherwise, if this->has_value() is true, equivalent to:construct_at(addressof(unex), std::move(rhs.unex)); has_val = false;
(4.3) — Otherwise, if rhs.has_value() is true, destroys unex and sets has_val to true.
(4.4) — Otherwise, equivalent to unex = rhs.error().