C++ Logo

STD-PROPOSALS

Advanced search

Subject: Re: [std-proposals] P1839 and the object representation of subobjects
From: language.lawyer_at_[hidden]
Date: 2020-07-21 14:51:56


On 21/07/2020 22:44, language.lawyer_at_[hidden] wrote:> In the code:
>
> QObject *qoptr = ~~~;
> auto c1ptr = reinterpret_cast<C1 *>(
>   reinterpret_cast<byte *>(qoptr) + off
> );
> assert(c1ptr == &qoptr->c1);
>
> `reinterpret_cast<byte *>(qoptr) + off` still points to an element of object representation of the `*qoptr` object, not the first element of object representation of its member subobject at the specified offset. P1839R2's changes to reinterpret_cast wording allow conversion between a pointer to an object and its object representation or the first element of its object representation. This code requires std::launder to get a pointer to member subobject.
>
> ...
>
> So, P1839R2 makes well-defined none of the things we're worried about in the context of QProperty.

To be more correct: yes, the behavior of the first code example becomes well-defined in P1839R2, but the behavior is not what is expected.


STD-PROPOSALS list run by herb.sutter at gmail.com

Standard Proposals Archives on Google Groups