------- Comment #4 from dgregor at gcc dot gnu dot org 2008-09-24 20:20 ------- GCC is doing the right thing here. In this constructor:
Thing2(Thing2&& o) : Thing(o) { } the parameter "o" is treated as an lvalue, because it has a name. Using std::move(o) to treat it as an rvalue. Similarly, there are no automatically generated move constructors or move-assignment operators, so if you leave Thing2() empty, you'll just get the copy constructor and therefore do a copy. -- dgregor at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |RESOLVED Resolution| |INVALID http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36461