http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57064
--- Comment #7 from Marc Glisse <glisse at gcc dot gnu.org> 2013-04-25 07:08:07
UTC ---
(In reply to comment #6)
> void f(A &&a)
> {
> std::move(a).p();
> }
>
> _Z1fO1A:
> .cfi_startproc
> jmp _ZNR1A1pEv@PLT #
> .cfi_endproc
>
> Then this looks like a bug in 4.8.1.
Indeed, I get s/R/O/ with 4.9.
> But then are we in agreement that a.p() in that function above should call the
> lvalue-ref overload?
Yes.
> It does make the feature sligthly less useful for me. It
> would require writing:
>
> return std::move(std::move(std::move(std::move(QString("%1 %2 %3 %4")
> .arg(42))
> .arg(47))
> .arg(-42))
> .arg(-47));
Why? You are not naming those return values, so they are still rvalues and will
use the && overload. (not sure why Qstring doesn't provide a mutating interface
for arg)