2018-01-27 2:54 GMT+01:00 Niall Douglas via Boost
For instance, you can say "default-constructed error_code is considered an error, and treated as such by the library", or "the library sometimes may make use of the fact that a default-constructed EC/EP is not an error, so make sure not to pass us such values": I am fine with any answer, but I need you to spell it out, so that I know what to expect.
Can you show me the exact page where I say the second sentence? Maybe it's because it's 1:50 am and I'm too tired after a 6am start, but I cannot find that sentence in the documentation.
You do not say it in the docs. But one could get that impression. E.g. from the previous versions, where function .error() default-constructed EC if it was absent, and it was recommended to use .error() to check both existence of error and its value. Also, I got confused with the consequences of this bug: ``` #include "outcome.hpp" namespace out = OUTCOME_V2_NAMESPACE; int main() { out::outcome<int> o {std::error_code{}}; assert (o.has_error()); out::outcome<int> p = o.as_failure(); assert (!p.has_error()); } ``` Somewhere in the interaction between outcome and failure_type there is a bug that treats default-constructed EC as no EC. And now I wonder: is it a bug, or is it my fault that I used default-constructed code.
3. Similarly, I request that you put in the docs what is the "value" of an object of type `outcome<>` or `result<>` in the sense in which John Lakos talks about "salient attributes". I know that T, EC, and EP constitute the value. But in the middle of the tutorial we learn that apart from these you also store "spare_storage" -- is it also included in copying and comparisons?
Yes in copying where copying is not explicitly done (i.e. type conversion is performed).
No in comparisons.
I will add this to the documentation. Tracked at https://github.com/ned14/outcome/issues/117
Also, what does it mean that result is equal to optional. Define it somewhere and paste links to it.
Do you mean `optional<T>` being equal to `result
` or something? Or do you mean via the `ValueOrNone` concept, or something else entirely?
Sorry, I am recovering from flu, and sometimes some bug sneaks in. I meant comparing an `outcome<>` with a `result<>`. What are the semantics then? Regards, &rzej;