Boost logo

Boost :

Subject: Re: [boost] Outcome v2 is feature complete
From: Peter Dimov (lists_at_[hidden])
Date: 2017-07-11 14:41:27


Andrzej Krzemienski wrote:

> maybe result<int, int> indeed looks suspicious, but using
> result<error_code, error_code> might come as quite natural:
>
> auto select_first_error(vector<error_code> v)
> -> result<error_code>
> {
> if (!v.empty())
> return result<error_code>{in_place_index<0>, v[0]};
> else
> return result<error_code>{in_place_index<1>, MyErrc::NoFirstElement};
> }

Yes, and the next logical step is to look at those magic constants 0 and 1
and say, hey, why not name these, would help readability.

if( !v.empty() )
{
    return { in_place_value, v[0] };
}
else
{
    return { in_place_error, MyErrc::NoFirstElement };
}

Re the multi-arg constructor, one obvious use case is this:

    return { errno, std::generic_category() };

or

    return { GetLastError(), std::system_category() };

although the main purpose is to forward arguments to custom ECs.

I'm working on a prototype that showcases these but it's not ready yet.


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