[Bug c++/87300] New: -Wredundant-move gives false positives in C++11 mode
steinar+gcc at gunderson dot no
gcc-bugzilla@gcc.gnu.org
Fri Sep 14 09:46:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87300
Bug ID: 87300
Summary: -Wredundant-move gives false positives in C++11 mode
Product: gcc
Version: 9.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: steinar+gcc at gunderson dot no
Target Milestone: ---
Hi,
-Wredundant-move sometimes gives false positives in C++11 mode -- the std::move
calls are simply not redundant. Case in point:
atum17:~> cat test.cc
#include <memory>
#include <utility>
class B {};
class D : public B {};
std::unique_ptr<B> foo() {
std::unique_ptr<D> d;
return std::move(d);
}
atum17:~> /usr/lib/gcc-snapshot/bin/g++ -std=c++11 -Wall -Wextra -c test.cc
test.cc: In function 'std::unique_ptr<B> foo()':
test.cc:9:19: warning: redundant move in return statement [-Wredundant-move]
9 | return std::move(d);
| ~~~~~~~~~^~~
test.cc:9:19: note: remove 'std::move' call
If you follow the warning and remove the std::move() call, GCC will still allow
the program, but that's an extension; it's malformed in C++11, and Solaris
Developer Studio rejects it. The rule that returns of NRVO-capable objects
should look for overloads as if the return value were an rvalue went into
effect only in C++14, from what I can see (DR1579,
http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1579).
gcc version 9.0.0 20180908 (experimental) [trunk revision 264170] (Debian
20180908-1)
More information about the Gcc-bugs
mailing list