This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Volatile MEMs in statement expressions and functions inlined as trees


On Dec 14, 2001, Linus Torvalds <torvalds@transmeta.com> wrote:

> I already gave the simple example of the obvious "pp = &(p+1)" etc.

Except that this is not legal C++, since (p+1) is not an lvalue, and
`&' can only be applied to lvalues.

> Does C++ have some magic special cases? It sure as hell does.

There are at least two I can think of right now: one is when an object
is returned by value but it can still be used for a method invocation,
as in the example I posted.  The other is when an rvalue is passed as
an argument, be it by value or by reference.  In either case, the
argument or the temporary whose reference is passed is
copy-constructed from the rvalue, and the copy constructor takes the
rvalue as argument by reference, thus you can get its address.

-- 
Alexandre Oliva   Enjoy Guarana', see http://www.ic.unicamp.br/~oliva/
Red Hat GCC Developer                  aoliva@{cygnus.com, redhat.com}
CS PhD student at IC-Unicamp        oliva@{lsd.ic.unicamp.br, gnu.org}
Free Software Evangelist    *Please* write to mailing lists, not to me


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]