Boost logo

Boost :

Subject: Re: [boost] Another variant type (was: [peer review queue tardiness] [was Cleaning out the Boost review queue] Review Queue mem
From: Larry Evans (cppljevans_at_[hidden])
Date: 2015-04-04 20:31:15

On 04/04/2015 05:49 PM, Steven Watanabe wrote:
> On 04/04/2015 04:33 PM, Larry Evans wrote:
>> On 04/04/2015 05:08 PM, Matt Calabrese wrote:
>>> On Sat, Apr 4, 2015 at 3:06 PM, Matt Calabrese <rivorus_at_[hidden]> wrote:
>>>> You need to use a recursive union if you are to get some constexpr support.
>>> Well, let me rephrase, you can expand it out by preprocessor to a certain
>>> limit and get that too, but you can't just use aligned storage. At some
>>> point you need to hit a recursive case.
>> Could you please elaborate on why recursion cannot be avoided?
> Variadic parameter packs can't be expanded on
> class (or in this case union) members.
> template<class... T>
> union variant_storage {
> T t;... // illegal
> };

Why not:

  template<class... T>
  struct variant_storage
  : std::aligned_union
    < 0 //Let aligned_union decide the size needed.
    , char //handle case where size_of...(T) == 0.
    , T...

This provides the storage needed. No constexpr functions
yet. The egg code mentioned by gonzalobg88_at_[hidden]:

had several constexpr( or at least EGGS_CXX11_CONSTEXPR) functions.
Are one of those requiring a recursive union for implementation?


Boost list run by bdawes at, gregod at, cpdaniel at, john at