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