$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
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.