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:
> AMDG
>
> 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]:

https://github.com/eggs-cpp/variant/blob/master/include/eggs/variant/detail/storage.hpp#L88

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

-regards,
Larry


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