C++ Logo

std-discussion

Advanced search

Re: Placement new into static storage violates strict pointer safety?

From: language.lawyer_at <language.lawyer_at_[hidden]>
Date: Sat, 24 Aug 2019 15:16:19 +0300
On 24/08/2019 07:49, Andrew Tomazos wrote:
> On Fri, Aug 23, 2019 at 4:00 PM language.lawyer--- via Std-Discussion <
> std-discussion_at_[hidden]> wrote:
>
>> [basic.stc] is known to be completely broken.
>>
>> Consider:
>>
>> struct { int i; int j; } s;
>> int main()
>> {
>> ::new(&s.j) int{};
>> }
>>
>> The newly-created int object is a subobject of `s` ([intro.object]/2)
>>
>
> How did you conclude that this is defined behaviour? What happens to the
> old int subobject s.j? How did you conclude that the newly-created int
> object is a subobject of the s object?

http://eel.is/c++draft/intro.object#2
>> Since it was created using new-expression, it has dynamic storage duration
>> ([basic.stc]/2).
>> But [basic.stc.inherit]/1 says "The storage duration of subobjects and
>> reference members is that of their complete object", so it has static
>> storage duration.

Received on 2019-08-24 07:18:27