<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/60179>60179</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
bugprone-forwarding-reference-overload shouldn't match some constructors with constraints
</td>
</tr>
<tr>
<th>Labels</th>
<td>
enhancement,
clang-tidy
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
cjdb
</td>
</tr>
</table>
<pre>
This can be more nuanced than the `std::enable_if` suppression that happens, as concepts are substantially more transparent.
```cpp
template<class T, class U>
concept different_to = not std::same_as<T, U>;
struct S {
// suppressed: std::input_iterator<S> is always false
template<std::input_iterator I>
S(I&& i) {}
// warns: std::copyable<S> is true
template<std::copyable T>
S(T&& t) {}
// suppressed: we have an explicit opt-out in the form of `not std::same_as<T>`
template<different_to<S> T>
requires std::copyable<T>
S(T&& t) {}
};
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyMk0GPozgQhX-NuZQSEZtA58ChJ-lIc-7ec6uAInhkbK-r6Gz-_YqQTmd2Z7QrRQFK9qvv2a-Q2Z48Ua2239T2kOEkQ0h1-6NrsiZ0l_ptsAwtemgIxpAI_IS-pQ5kQA8yEKgyZ-mUeVbmmTw2jt5tr8oceIoxEbMN80IUGDBG8qz0HpChDb6lKAyYCHhqWNCLRecuSyNJ6DliIi9rlR9U_nz7L_Pl18a4VITG6FBImX3rkBne5hbL6x_KvCyrbv2gs31Ps-q7BFDmAD4I3B0wjvSOrMz-KnLdbr499mdJUyvwCqq61QGUPip9vDumWexL0_o4ybsVSighKbN_VeYFLAO6M14YenRMN6kHL7_ZD9_vlgBelX76rnSpdAlW6d0Vqjo88t7pzpg8_wTWhniZL-wBSdL0ifJLls8t8PYPircbhfwHxc9ndCYY8IMAPdBf0dnWCoQoqzAJ2CVffUgjhH7O2W9vyrzMkfg39uNdf5p8BE_052QT8S-P5P87rA5fGflM5_KZdbXpdmaHGdWbsip0VW1Lkw110XVlTo1pNibvd-Wu0oXZPOFOb_qethud2Vrn2uQbvcm3eZmbtX4qtl3fFbuiM6bQWhU5jWjd2rmPcR3SKbPME9Vlvql2mcOGHF_HWmvywzy0I3lRWiu9V1q3Dv1pJba7zKXtIUv1LLRqphOrIneWhb-kxYqjuplOMQVPqz6kM6bO-tMq0fWEW1qFD0ouYAc8hMl1XulKYERpB-Aw0jzwy-yExHC2MtwqaL1wNiVXDyJxTugSlZOVYWrWbRiVPs4kt8cqpvCDWlH6eHXMSh-vpv8OAAD__xc5d0M">