Boost logo

Boost :

Subject: Re: [boost] [outcome] High level summary of review feedback accepted so far
From: Peter Dimov (lists_at_[hidden])
Date: 2017-05-27 14:24:25


Niall Douglas wrote:

> I would assume an expected<T, E1, .., En> could only return a
> std::variant<E1, ..., En> from its .error(). I can't think what else it
> could do.

As the foremost authority on the nonexistent expected<T, E...>, I can tell
you what it does:

    // F shall be in E...
    template<class F> bool has_error() const;
    template<class F> F error() const;

    // if sizeof...(E) == 1
    bool has_error() const;
    E1 error() const;

It returns the equivalent of variant<E...> not from error(), but from

    unexpected<E...> unexpected() const;

which allows you to

    expected<T, E1, E2, E3> function()
    {
        expected<U, E1, E2> e1 = function1();
        if( !e1 ) return e1.unexpected();

        expected<V, E3> e2 = function2();
        if( !e2 ) return e2.unexpected();

        return e1.value() + e2.value();
    }


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