<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/90822>90822</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[clang][diagnostics] diagnostics can be more clear when forming pointer to member from parenthesized expression
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
zwuis
</td>
</tr>
</table>
<pre>
```cpp
struct foo {
int val;
void func() {}
};
int main() {
int foo::* ptr1 = &(foo::val);
void (foo::* ptr2)() = &(foo::func);
}
```
Diagnostic messages of this code are "invalid use of non-static data member 'val'" (line 6) and "call to non-static member function without an object argument" (line 7). (clang 18.1.0, <https://godbolt.org/z/YhGvWrTTb>)
These messages can be more clear like "cannot form pointer to member from a parenthesized expression".
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJx0U1FvozwQ_DXLy6oIlgDhgYe2-fL9gUqnezR4A74zNrJNetdffzKkDbpeJSvB3p3xzNgW3qvBMLdQPkF5SsQSRuvat9dF-aSz8ncLVbaNfp4hO0H26INb-oAXaxHqp20NEVGZgFehoditXa2SeFlMD3QEalZAfdrq8eO9d_uNDJNQZte8McXCxVooHuOgR5yDyxGKEwJVQMePWtyfms8S9j03PMXG20afiTbNd6a76vc89sJPSgzG-qB6nNh7MbBHe8EwKo-9lYzCMQKRMlehlcTFc6wbax58EBEmRRA48dSxQ6B69VEDUVSulWGsolBhohXqhdYY7B5_g0bZQVmDryqMdgkoDNruB_cBhRuWiU3Yk9ZATRpnvRZmwPyY5mkG9IxQPI8hzH6N6wx0HqzsrA6pdQPQ-Q3o_H38__rNvbx0UPwXk9rF8TKy53sSvTDYMU7WMfaahUOtfvJmxBgbj9ZNOFtlArvo692MsxMKnIVjE0b26o0l8q_ZsffKGiBKE9kWsikakXCb1_mhouMxz5Oxzfqykr2QXDey5FwUlWwuTZ539bHgippEtZTRISszyspDVeZp3fXiUItcFpKoFAyHjCehdKr1dYq-E-X9wm2THYkSLTrWfn02RGt6QBRfkGtj_0O3DB4OmVY--DtDUEGvb21DlCcon-TH3fFQnnA3_UdwryObNS5lhq8S-yqvZHG6_etUVRiXLu3tBHSOKm9_D7Oz8dIAnVfTHui8-v4TAAD__-WgSHY">