<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/113306>113306</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[clang-tidy] bugprone-use-after-move when "taking" class member's value
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang-tidy
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
dmitrmax
</td>
</tr>
</table>
<pre>
A false positive happens on the following code:
```
#include <string>
#include <iostream>
class A {
public:
A(const std::string& str) : m_string(str), m_unmovedString(str) {}
const std::string& getString() const& { return m_string; }
std::string&& getString() && { return std::move(m_string); }
const std::string& getUnmovedString() const { return m_unmovedString; }
private:
std::string m_string;
std::string m_unmovedString;
};
int main() {
A a("test");
std::cout << std::move(a).getString() << std::endl;
std::cout << a.getUnmovedString() << std::endl;
return 0;
}
```
Output looks like:
```
$ clang-tidy-19 main.cpp -checks=bugprone-use-after-move --
1 warning generated.
/tmp/tidy/main.cpp:22:18: warning: 'a' used after it was moved [bugprone-use-after-move]
22 | std::cout << a.getUnmovedString() << std::endl;
| ^
/tmp/tidy/main.cpp:21:31: note: move occurred here
21 | std::cout << std::move(a).getString() << std::endl;
| ^
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJysVU2T4jYQ_TXypcuU3QIbH3yAYbnmkMp5S7Yao4wsuSSZyfz7lMynmWWSw1KUAMn9Xr_X3Uh4rzpDVLPVlq12iRjD0bpa9iq4XvyTNFZ-1hs4CO0JButVUCeCoxgGMh6sgXAkOFit7YcyHbRWEuMblu1Ydl2L7PI-_0SuTKtHScD4mw9OmY7xH786VNYHR6K_H09rq4X3sAFWbs8bw9ho1d5oAQA2DNetNT6ADzKe8M2FCgvwwTGsgPEN9D-v2-vzLsM36H-Oprcnkn_OzybGcveYS-R6ydNRuCHE8OnBeMDKLTgKozP3BPgWbtgR9SveryAv2w-At7iogOH6rrCacfy__P96MuImY65h7tcjzeDUSYR7TzzzPBrwnNjXR595LhHl7ilamQC9UObq0rVTptYAMW1joFgNPBsz474Rt3YMsRMZf_tirGBYLb7U4-lZMlLf0GeaHqHF4oXV38LdQS91yGaOfDOC0_rHGIYxgLb23YNW7w9z-zyxS2i1MF0alPxM82qydtEOA6Ttkdp3z_iuGbvBWUPp6CkVh0AujXIgTc8gOXwIZ2IVOzLkRCC5uMLvQz_EVclPhvsrOOMbRMY3-ToO6iU6fmVYCoYljJ4kTFSgAnwID5OBwFbbF9mw1X3AEIGVb_CbazLh3YBnL7b68d-Cc8Y3PC5g7DQ1kyawbTs6RxKO5OguIf9ewu_p2BdyXmibN1Aiay4rXomE6rzEqsiyVZUlx7pdcbnkssCmapGyQyt4ucS1PIimypHniaoxw2WeIebIC6wWRUZFseaVWC-zImskW2bUC6UXWp_6hXVdorwfqc5zzrMi0aIh7adbDfHevXHeV7vE1TEqbcbOs2WmlQ_-jhNU0NN9-BC22sGrDv84koH4dyLeJ1cR4HxD9dQ35BiWHk5Cj5SMTtfHEAYfncY9w32nwnFsFq3tGe5jApePdHD2b2oDw_2kyjPcX4Sdavw3AAD__xv1Njw">