<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/121172>121172</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[clang-tidy] Check request: use `std::addressof` in generic code for objects of user-defined types
</td>
</tr>
<tr>
<th>Labels</th>
<td>
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
denzor200
</td>
</tr>
</table>
<pre>
Because `operator&` may be overloaded, generic libraries use `std::addressof` to obtain addresses of objects of user-defined types.
```
template<typename T>
void process_0(T& a, int& b, int& c) {
process_a(&a); // INCORRECT
process_b(&b); // OK
process_c(std::addressof(c)); // OK but redundant
}
template<typename T>
void process_1(T& a, int& b, int& c) {
process_a(std::addressof(a)); // OK
process_b(&b); // OK
process_c(std::addressof(c)); // OK but redundant
}
void process_notemplate(int& a, int& b, int& c) {
process_a(&a); // OK
process_b(&b); // OK
process_c(std::addressof(c)); // OK but redundant
}
template<typename T>
void process_pointers(T* a, std::unique_ptr<T>& b, T* c) {
process_pointer_to_pointer(&a); // OK
process_pointer_to_unique_pointer(&b); // OK
process_pointer_to_pointer(std::addressof(c)); // OK but redundant
}
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzElM-O2jAQxp9mcrFAzoT8O-QQ2EWqKnWl1d5XTjwBt8HO2g4SffoqECilsCD1UGSJEfq-8cyP8Qjn1EoTFRDPIX4KRO_XxhaS9E9jkfOgMnJXAC_nVIveEYOEm46s8MYCJpBwthE7VhEzW7KtEZIk4IKtSJNVNWtVZYVV5Nhodl5CVEJUCiktOWeaIYc3zFReKM3Gn8kx0zBTfafa78PekZ1IapQmyfyuIzcFXg4n4ePhpadN1wpPEC0GiRYbYm8QPQMvt0ZJ1llTk3PvHDB7A0yYGGpV2g9xdRbXgDmDdA68ZIydfAIwA0wEYA7RnAEuAZfsy7fFy-vr8-LtQl0d1NWovvYZM7x8HaxHXw2YXcGE2VDVebKTm1W9Z5Zkr6XQfoCSPh3oPEok_AciV2sVF7X-2eptSrdkD0N5hMpl99qcOGE2NvwIiBtzcf-v_s_9PzoVnVHak3WH4SgPTE5V9Fp99PTeeQvRYm8_otqLb0zMmPPdm2N49VH9BeDMd7z43H75yq6-rKt336N6l-fZAgpkEck8ykVARZhGMSYYp1GwLjAVWdjM6jqWlGGaC16FIm1mSElCjYgCVSDHWYiY8hAxjqY8zxLKwjCbhbWgXMKM00aodtq2283U2FWgnOupCDEMUwxaUVHrjmvcFoNqUvUrBzPeKufdb59Xvt0v_LoVejXxSu4gfmKLNdU_mKWPnpyHqPx8Yyt92vG1kcQaYz9f10Fv22LtfeeGbHumK-XXfTWtzQZwOZQ3fk06a4ZMgMt9jw5wOba5LfBXAAAA__8Z9_iz">