https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110162
Bug ID: 110162
Summary: redundant move in initialization
Product: gcc
Version: 13.1.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: jincikang at gmail dot com
Target Milestone: ---
$ cat main.cpp
```cpp
// main.cpp
#include <string>
class HttpMessage {
public:
std::string* body() noexcept {
return &body_;
}
const std::string* body() const noexcept {
return &body_;
}
void set_body(std::string s) {
body_ = std::move(s);
}
private:
std::string body_;
};
class HttpResponse : private HttpMessage {
public:
using HttpMessage::body;
using HttpMessage::set_body;
private:
};
class HttpRequest : private HttpMessage {
public:
using HttpMessage::body;
using HttpMessage::set_body;
};
int main() {
[[maybe_unused]]auto post = [](const HttpRequest& request, HttpResponse*
response) {
response->set_body(std::move(*request.body()));
};
}
```
$ g++ -std=c++2a -Werror -Wall -Wextra main.cpp
Error: redundant move in initialization [-Werror=redundant-move]
35 | response->set_body(std::move(*request.body()));
| ~~~~~~~~~^~~~~~~~~~~~~~~~~
# OK.
$ clang++ -std=c++2a -Werror -Wall -Wextra main.cpp
# Ok
$ g++-12 -std=c++2a -Werror -Wall -Wextra main.cpp