Boost logo

Boost :

Subject: Re: [boost] [outcome] expected<T&>, result<T&>
From: Niall Douglas (s_sourceforge_at_[hidden])
Date: 2017-05-25 22:29:26


On 25/05/2017 18:33, Andrzej Krzemienski via Boost wrote:
> Niall,
> Are Boost.Outcome monads intended to work with references (at least lvalue
> references)?

The current code no. And I deliberately left out a static assert until
feedback came from here.

> I get lots of compiler errors. But the messages ("constructor cannot be
> overloaded") indicate that it was just an omission and not a design
> decision.

I did leave my options open just in case. But more support code would be
needed.

> If I try it with `outcome::expected` I also get these messages, but I also
> get a static assert saying that as per LWG decision T must be default
> constructible.
>
> Vicente, does this mean you cannot use `std::expected` to return references?

Neither std::variant nor std::optional support references, and neither
does std::expected in its current proposal.

Unless reviewers here are super keen on supporting outcome<T&>, I'll be
adding a static assert forever preventing them soon.

Niall

-- 
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