[cfe-dev] (Request for comments) Implicit cast kind for initialization of references.
Abramo Bagnara
abramo.bagnara at gmail.com
Mon Oct 24 15:20:17 PDT 2011
Il 24/10/2011 23:50, Johannes Schaub ha scritto:
> Abramo Bagnara wrote:
>
>> Il 24/10/2011 19:47, Ahmed Charles ha scritto:
>>> a[i] becomes *(a+i), which dereferences the address, i.e. undefined
>>> behavior, in your case.
>>
>> Not without an lvalue to rvalue conversion.
>
> That may be the ultimate goal of the C++ committee to word into the Standard
> some time in the future, but the current C++11 does not incorporate that
> understanding yet. It leaves undefined the effects of evaluating an lvalue
> referring to nothing. So evaluating *(a+i) is UB *if* there is no object at
> address a+i. Since whether there is an object in this case is unspecified,
> the Standard does not require anything from the implementation - in other
> words, the behavior is undefined.
Note that from C99 times &*E is considered equivalent to E, so starting
from the original
int a[5];
int *p = &a[5];
we have the following equivalent transformations:
&a[5] => &*(a+5) => a + 5
IMHO following a different line of thought we'd soon come to nonsense.
More information about the cfe-dev
mailing list