On Thu, Aug 22, 2013 at 4:14 PM, Mike Stump <mikest...@comcast.net> wrote:
> On Aug 22, 2013, at 9:45 AM, Gabriel Dos Reis <g...@integrable-solutions.net> 
> 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

Reply via email to