Boost logo

Boost :

Subject: Re: [boost] [outcome] Andrzej's review
From: Andrzej Krzemienski (akrzemi1_at_[hidden])
Date: 2018-01-27 12:00:49

2018-01-27 2:54 GMT+01:00 Niall Douglas via Boost <boost_at_[hidden]>:

> > 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
> > 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<T, void>` 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?


Boost list run by bdawes at, gregod at, cpdaniel at, john at