On Aug 22, 2013, at 9:45 AM, Gabriel Dos Reis <[email protected]>
wrote:
>> I.e. can I have something like
>>
>> int a;
>> test()
>> {
>> int *b=new (int);
>> }
>>
>> with custom implementation of new that returns &a?
>
> If the user-supplied operator new returns &a, then it must
> also ensure that 'a' is not used anywhere else -- e.g. I you can't
> do lvalue-to-value conversion on 'a' to see what is written there.
This is wrong, in the c++97 standard there is no such limitation or restriction.
> Because its storage has been reused. That is, aliasing is framed
> in terms of object lifetime and uniqueness of ownership.
Nope, this is wrong. Example:
int i, j;
main() {
i = 1;
j = i;
i = 2;
char *cpi = (char*)&i;
char *cpj = (char*)&j;
for (k= 0; k < sizeof (int); ++k)
cpj[k] = cpi[k];
}
This is well defined. i and j exist, as do the character objects that are
pointed to by cpi and cpj. One can use them and interleave them, they can
alias, and the character objects are not unique from i and j.