<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">