On Thu, Aug 22, 2013 at 4:14 PM, Mike Stump <[email protected]> wrote:
> 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.
Please, elaborate.
>
>> 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.
>
but, this isn't what we are talking about -- that pointers to
character types can
alias pretty much anything is admitted and isn't under debate; GCC already copes
with that.
-- Gaby