https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121433
Bug ID: 121433
Summary: -Wredundant-move false positive
Product: gcc
Version: 15.1.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: jylefort at gmail dot com
Target Milestone: ---
```
#include <optional>
#include <string>
std::optional<std::string> foo() {
std::string r;
return std::move(r);
}
```
Compiled as follows:
```
$ g++ -std=c++23 -Wall -Wextra -c test.cxx
test.cxx: In function ‘std::optional<std::__cxx11::basic_string<char> > foo()’:
test.cxx:6:19: warning: redundant move in return statement [-Wredundant-move]
6 | return std::move(r);
| ~~~~~~~~~^~~
test.cxx:6:19: note: remove ‘std::move’ call
```
In my understanding, this is a false positive: NRVO can't kick in as the type
of `r` (`std::string`) and the function return type
(`std::optional<std::string>`) differ.