Subject: Re: [std-proposals] P1839 and the object representation of subobjects
From: Thiago Macieira (thiago_at_[hidden])
Date: 2020-07-21 18:29:48
On Tuesday, 21 July 2020 12:44:13 PDT language.lawyer--- via Std-Proposals
> auto qoptr2 = reinterpret_cast<QObject *>(
> reinterpret_cast<byte *>(c1ptr) - off
> assert(qoptr == qoptr2);
> if `c1ptr` really points to member subobject, `reinterpret_cast<byte
> *>(c1ptr)` points to the **first** element of its object representation, so
> subtracting a positive number from such a pointer value is UB because of
IIUC, what you're saying is that, given:
int i, j;
You can take a pointer to S and get to its underlying representation as an
array of bytes, so you can do arithmetic plus std::launder and get to the
expr.add/4 says about negative offsetting:
[...] the expression P - J points to the (possibly-hypothetical)
array element iâj of x if 0â¤iâjâ¤n.
Otherwise, the behavior is undefined.
IIUC, you're saying that casting the int pointer to a byte representation
returns the first (index 0) element of the representation, so subtracting a
positive number results in a negative index, which means UB.
Why can't it be understood to return the 5th element of S's representation?
-- Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org Software Architect - Intel DPG Cloud Engineering
STD-PROPOSALS list run by herb.sutter at gmail.com
Standard Proposals Archives on Google Groups