Created on 2022-12-20.00:00:00 last changed 1 month ago
Proposed resolution:
Modify [expected.object.obs] as indicated:
constexpr const T& value() const &; constexpr T& value() &;-?- Mandates: is_copy_constructible_v<E> is true.
-8- Returns: val, if has_value() is true.
-9- Throws: bad_expected_access(error()) if has_value() is false.
constexpr T&& value() &&; constexpr const T&& value() const &&;-?- Mandates: is_move_constructible_v<E> is true.
-10- Returns: std::move(val), if has_value() is true.
-11- Throws: bad_expected_access(std::move(error())) if has_value() is false.
[expected.object.obs] p9 says:
Throws: bad_expected_access(error()) if has_value() is false.
But if error() returns a reference to a move-only type then it can't be copied and the function body is ill-formed. Should it be constrained with is_copy_constructible_v<E>? Or just mandate it?
Similarly, the value()&& and value() const&& overloads require is_move_constructible_v<E> to be true for bad_expected_access(std::move(error())) to be valid.
History | |||
---|---|---|---|
Date | User | Action | Args |
2022-12-20 12:34:38 | admin | set | messages: + msg13164 |
2022-12-20 00:00:00 | admin | create |