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