Boost logo

Boost :

Subject: [boost] [variant2] Review of Variant2
From: Emil Dotchevski (emildotchevski_at_[hidden])
Date: 2019-04-09 02:42:47


I vote *ACCEPT*.

*Design*

I consider it a shortcoming that std::variant does not have the
never-valueless guarantee of variant2. The point of variant<A,B> is that
after a successful initialization, it will either have a valid A or a valid
B. If I wanted to have to deal with some other alternative, I would have
specified a third type.

The main objection to the never-valueless semantics is that after a failed
assignment, the programmer could be surprised to find that the target
variant object may have switched from a valid value of the previously
stored type, to a valid value of one of the other alternative types. While
it is true that the change of type can be surprising, this is the good old
basic guarantee in action -- nothing less, nothing more.

I also like the addition of the narrowing operation subset<U...>, seems
useful.

*Did you try to use the library?*

I tried variant2 on Mac/clang.

*How much effort did you put into your evaluation?*

I spent a 3 hours reading the documentation and experimenting. I also tried
using expected<T, std::error_code> as a result type in LEAF.

*Are you knowledgeable about the problem domain?*

Yes.


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