Created on 2025-06-27.00:00:00 last changed 1 month ago
[ 2025-10-16; Reflector poll ]
Set priority to 3 after reflector poll.
[ 2025-10-15; would be resolved by LWG 4406 ]
In [expected.object.obs]/19, the return value of `value_or()` is specified as follows:
Returns:
has_value() ? **this : static_cast<T>(std::forward<U>(v)).
Meanwhile, the return value of `error_or()` is specified as follows ([expected.object.obs]/23):
Returns:Since these functions appear to be dual in nature, it would be preferable to maintain consistent notation.std::forward<G>(e)ifhas_value()istrue,error()otherwise.
Jonathan adds: The wording in `expected::error_or` is newer, having been added by P2505R5, and intentionally avoided a conditional expression (the problems with conditional expressions explained in p3177r0 don't actually affect these member functions, due to the non-const prvalue return type, but determining that there are no pessimized copies in `value_or` wouldn't be necessary if we didn't specify it with a conditional expression). The `error_or` wording also avoids using an explicit conversion when the Mandates: element requires implicit conversion to work anyway. We might want to rephrase the `value_or` wording to match `error_or`, or possibly make `value_or` and `error_or` even more explicit, specifying them in terms of `if`-`else`: :
Effects: Equivalent to:if (has_value()) return **this; else return std::forward<U>(v);
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2025-10-16 11:35:46 | admin | set | messages: + msg15181 |
| 2025-10-15 11:20:55 | admin | set | messages: + msg15176 |
| 2025-06-27 00:00:00 | admin | create | |