On 30/05/2017 11:25, Vicente J. Botet Escriba wrote:
Le 29/05/2017 à 17:05, Niall Douglas a écrit :
- error_type& .error_raw() - reinterpret_cast
evidently we don't like the _raw suffix. .error_unsafe(), .unsafe_error(), .unchecked_error() all work for me too. How likes any of those? Who prefers error() to throw if there is a value? or return by value and return E{} when there is a value and I don't know hat when there is an exception_ptr?
FWIW, my preferred options would be (which I think were the originals): - value() throws if holding error or exception (or empty) - error() returns E{} if holding value or E{errc::has_exception} if holding exception, or E{errc::no_value} if empty (names made up on the spot, doesn't matter) - exception() returns nullptr if holding value or error or empty These seem like safe and reasonable defaults and permits code to always extract an error_code or exception_ptr even on success, which can aid certain interop scenarios with older APIs and otherwise simplify caller logic. I would prefer that unchecked_* (or whatever) versions did not exist as then nobody would accidentally call them and perhaps introduce UB. But I'm not strongly opposed to them.