Boost logo

Boost :

Subject: [boost] [outcome v2] How important is it that an Expected implementation is also provided?
From: Niall Douglas (s_sourceforge_at_[hidden])
Date: 2017-09-27 22:51:09


Dear list,

I know it's been a fair few months since any news on Outcome v2.
Ordinarily I'd be speaking at CppCon happening right now, but I instead
chose Jens' Meeting C++ in November where I'll be speaking on Expected.

Outcome v2 has undergone its period of maturation since it was
completely rewritten to reflect peer review feedback last May. The new
consensus design has fared very well after being put under heavy
production use these last few months, and I expect it to return here for
a second review before the end of this year. Outcome v2 will also be
appearing in the WG21 October mailing, watch out for:

* P0762R0: Concerns about `expected<T, E>` from the Boost.Outcome peer
review
* P0779R0: Proposing `operator try()`

Outcome v2 currently implements the not published yet D0323R3 Expected
proposal as part of its test suite as a refinement of what boost-dev
thought Expected ought to be instead of what it is (ahem!). We run it
against the Expected reference test suite, and it passes.

So here's the question before any second peer review. Should Outcome v2
provide:

1. No Expected implementation at all, not even under a different name.
Not its place.

2. The Expected implementation which the consensus on boost-dev felt the
WG21 Expected ought to be (this is the current situation, and no we
don't call it `expected<T, E>`).

3. A closely conforming, but not exactly conforming [1], implementation
of WG21 Expected.

Options 2 and 3 can be combined. But be aware that Peter rolled together
an even more conforming Expected implementation using his variant2
library. I had been assuming people would be better advised to use his
likely exactly conforming implementation, rather than Outcome v2's not
exactly conforming implementation. Less surprise.

Thoughts?

Niall

[1]: Known differences from P0323R3 `expected<T, E>` in this implementation:
  - `T` and `E` cannot be the same type.
  - No variant storage is implemented (note that technically speaking,
D0323R3 does not require variant storage).

-- 
ned Productions Limited Consulting
http://www.nedproductions.biz/ http://ie.linkedin.com/in/nialldouglas/

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk