------- Comment #5 from rguenth at gcc dot gnu dot org  2009-01-31 17:25 -------
Confirmed.

struct S
{
  S(): i(2) {}
  S(S const&);
  int i;
};

void f(S x) { x.i = 0; }

extern "C" void abort (void);
int main()
{
  S y;
  f(static_cast<S&&>(y));
  if (y.i != 2)
    abort ();
  return 0;
}

declaring S(S const&); makes f() take a reference type and neither the
caller nor the callee performs a copy before writing to the passed by value y.

declaring S(S const&&); does not have this effect.


-- 

rguenth at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
     Ever Confirmed|0                           |1
           Keywords|                            |wrong-code
      Known to fail|                            |4.4.0
   Last reconfirmed|0000-00-00 00:00:00         |2009-01-31 17:25:01
               date|                            |


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36744

Reply via email to