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.

3940. std::expected<void, E>::value() also needs E to be copy constructible

Section: 22.8.7.6 [expected.void.obs] Status: WP Submitter: Jiang An Opened: 2023-05-26 Last modified: 2023-06-19

Priority: Not Prioritized

View all issues with WP status.

Discussion:

LWG 3843 added Mandates: to std::expected::value, but the similar handling is missing for expected<cv void, E>.

[2023-06-01; Reflector poll]

Set status to Tentatively Ready after seven votes in favour during reflector poll.

[2023-06-17 Approved in Varna. Status changed: Voting → WP.]

Proposed resolution:

This wording is relative to N4950.

  1. Modify 22.8.7.6 [expected.void.obs] as indicated:

    constexpr void value() const &;
    

    -?- Mandates: is_copy_constructible_v<E> is true.

    -3- Throws: bad_expected_access(error()) if has_value() is false.

    constexpr void value() &&;
    

    -?- Mandates: is_copy_constructible_v<E> is true and is_move_constructible_v<E> is true.

    -4- Throws: bad_expected_access(std::move(error())) if has_value() is false.