|
Boost : |
Subject: Re: [boost] Mother of all Variants
From: Jonathan Müller (jonathanmueller.dev_at_[hidden])
Date: 2019-04-16 09:28:40
On 16.04.19 03:51, Robert Ramey via Boost wrote:
> I'm way out of my depth in the variant discussion. Seems to me it
> revolves around all the trade offs regarding design choices. Could we
> perhaps decide not to decide. Suppose we create a type which looks like:
>
> template<
> Â bool BasicGuaranteeSupported,
> Â bool StrongGuaranteeSupported,
> Â bool EmptyStateProhibited,
> Â bool AssignmentSupported,
> Â bool MoveSupported,
> Â class T ...
> >
> struct mother_of_variants{
> Â // some trivial mp11 code
> };
>
I did something similar back when I did type_safe::variant: You have a
`VariantPolicy` that controls whether the variant can be empty and a has
a `change_value()` function that switches the type in whatever way it
seems fit.
With that I have a `rarely_empty_variant` that is like `std::variant`,
a `never_empty_variant` that assumes move is no-throw (and calls
terminate() if they throw) and an `optional_variant` that fully embraces
an empty state.
At the time I thought it was a good trade-off, but haven't re-evaluated
it since then.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk