<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/99474>99474</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            `cppcoreguidelines-missing-std-forward` should not warn when the intention to use as lvalue is made explicit
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          legrosbuffle
      </td>
    </tr>
</table>

<pre>
    When function wants to accept either a mutable value either as an lvalue or rvalue reference, but only use it as an lvalue reference, we have a false positive:

```
struct S {
    S();
 void mutate() &;
    void mutate() &&;
};

template <typename T>
void f(T&& t, int n) {
    for (int i = 0; i < n; ++i) {
 t.mutate();  // Cannot std::forward here because we want to call `mutate()&`.
    }
}

void G(int n) {
    f(S(), n);
    S s;
    f(s, n);
}
```

Real-life [example](https://github.com/abseil/abseil-cpp/blob/7795d0843a72b6c2994941763aee14519bbcfccd/absl/random/distributions.h#L241)

We should be able to convey that intention explicitly with `static_cast<T&>(t).mutate()`.

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJx8VMmO4zgM_RrmQiSwJcfLwYdOqjOXOU010MeBLNGxBopkSHTS9fcDObUkmAUIFIqbyccnqpTs2RP1sD_A_mWjFp5C7B2dY0jDMo6ONkMwb_3PiTyOi9dsg8eb8pyQAyqtaWYkyxNFVHhZWA2O8KrcQp_qhMqju-tCxHiXIo0UyWsCccRhYQzeveGSCC0_xzx53ggndSVUOCqXCOeQLNsrgfwGxQsUH2ddvP_Wa-K4aMZXhOZw1yAivoJoQXQgP3TXYM3aBNPdhCDqLzPif3g8OEHz8iWvJ9NldooJQR75bSavLoQ_QH6_m9eMI4j2xz0Tcm7Teka_pn8seAwRQbTZaBHkCxYgD6t4RJ9FEAcQB_scyLvHgrMbgjiBOOFReR8YE5sMn_w2hnhT0eBEkXAgrfI4brQOPM9bK-cQ6uIpn6ihLnZfRWYEPqF4wGFt9Lf38v-lNxDtx0DEcXV4Qv4V09M9-6d_eH5985kA9_MPUm7r7EgI-wP9UpfZEexfQLQT85wyCCswZ8vTMux0uIA4qSGRdZ_CVs8ziNPgwgDi1DTd3hRtJVUjhlqLrqu6qmxqqYjKal92w6BHrc09PGeJyps1r7GJox2W_KTSbgIhfxdVmZt5qPgnYZrC4gwOhOvbymMI_kpvyJPiTBTy66ukX7Oz2rJ7w5vlKc8psWKr_9QqMcjjSjD5HUTLILpnUnxOcGN6aTrZqQ31ZSNKWciyrjZTP9Sm2UshVdMUrSxJjVVhDGljirKUqtjYXhSiKpqyLcuqLspdO1BXibHt9kSm2VdQFXRR1u2cu152IZ43NqWF-q6rmmrj1EAurZtICE83XI0gRF5Msc8x22E5J6gKZxOnryxs2VEPdaHnWYdI58UactZT2l5sStaft4nN9p3cUBcfkGbu31T0eMvrjSd6QJPDuotU-thCNuFFGfqEebNE1_8PbXJ573_bOYa_SDOI09pUAnG6N33txd8BAAD__7_Fo_c">