https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120822

Jonathan Wakely <redi at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
         Resolution|---                         |INVALID

--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> ---
The spec says that `return `b;` treats b as an rvalue, and it has said that
since C++17.

So std::move(b) is redundant, the warning is correct.

If you want a warning for the fb() case then use -Wpessimizing-move (or -Wall)
which is a  separate warning from -Wredundant-move.

move.cc: In function ‘A fa()’:
move.cc:6:25: warning: redundant move in return statement [-Wredundant-move]
    6 |         return std::move(b); // 1. should not warn
      |                ~~~~~~~~~^~~
move.cc:6:25: note: remove ‘std::move’ call
move.cc: In function ‘B fb()’:
move.cc:10:25: warning: moving a local object in a return statement prevents
copy elision [-Wpessimizing-move]
   10 |         return std::move(b); // 2. should warn
      |                ~~~~~~~~~^~~
move.cc:10:25: note: remove ‘std::move’ call


I don't see any GCC bug here.

Reply via email to