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-08 09:14:18


On 04/04/2015 07:55 PM, Eric Niebler wrote:
> On 4/4/2015 4:42 PM, Larry Evans wrote:
>> On 04/04/2015 06:25 PM, Steven Watanabe wrote:
>>> AMDG
>>>
>>> On 04/04/2015 05:20 PM, Larry Evans wrote:
>>>> On 04/04/2015 06:18 PM, Steven Watanabe wrote:
>>>>> The reason that aligned storage doesn't work has nothing to
>>>>> do with calculating the alignment.
>>>>
>>>> Why does using aligned_storage not work, please?
>>>>
>>>
>>> On 04/04/2015 04:06 PM, Matt Calabrese wrote:
>>>> You need to use a recursive union if you are to get some
>>>> constexpr support.
>>>
>> OK. So Matt, could you please elaborate on why constexpr support
>> requires a recursive union?
>
> To put an object into aligned storage requires placement new, which is
> not constexpr. Using a recursive union avoids the need for placement new.
>
Thanks Eric.

I see the restriction about new expression here:

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3652.html

I can see how a new expression which is not a placement new
would be disallowed; however, I don't see a reason why
placement new would be disallowed when the void* 2nd argument
is a pointer to a constexpr aligned_union member variable.
Could you please provide a reference or explanation of why
placement new is not allowed in a constexpr?

-regards,
Larry


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