So you're saying that, even without any pointer arithmetic, just this code:

int x = 100000;
std::cout << *reinterpret_cast<char*>(&x);

has undefined behaviour?

If that's the case then this is even more insane than I thought. Please clarify whether this is really what you're saying here!


On 21 Aug 2019, at 21:33, sdkrystian via Std-Proposals <> wrote:

Ah, ignore my example then.

Sent from my Samsung Galaxy smartphone.

-------- Original message --------
From: " via Std-Proposals" <>
Date: 8/21/19 15:31 (GMT-05:00)
Subject: Re: [std-proposals] Allowing access to object representations

On 21/08/2019 22:11, Timur Doumler wrote:
> This doesn't make sense to me.

That's why some people think this should be fixed.

> If I have an object of type int (or, say, a struct containing an int), then the value has 4 bytes. If I access that value by dereferencing a char pointer that aliases that object, all I can ever get from that char is a single byte. How can this be "the object"?

The standard just says what result you get, it is an implementation's problem to answer the "how" question.
However, could help some implementations:
> If during the evaluation of an expression, the result is not mathematically defined or not in the range of representable values for its type, the behavior is undefined.

If you have an int object and try to access its value through a char lvalue and the value stored in the int object is not in the range representable by the char type, the behavior is undefined.

[expr.pre]/4 helps little-endian machine implementations, because they just can fetch the first byte of the int object and this would give the right value when there is no UB.
IDK how a big-endian maching implementation can achieve the standard-conforming behavior :-)
> Cheers,
> Timur
>> On 21 Aug 2019, at 20:59, via Std-Proposals <> wrote:
>>> On 21/08/2019 21:55, Krystian Stasiowski via Std-Proposals wrote:
>>> Yes, you access the value of the object of the object, however, since its not specified what exactly you get
>> It is specified: you get the value contained in the object.
>> Indeed, it is specified here.
>> --
>> Std-Proposals mailing list
Std-Proposals mailing list
Std-Proposals mailing list