<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/152244>152244</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[Clang] Clang rejects anonymous struct with generic lambda while GCC/MSVC accept
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Xniao
</td>
</tr>
</table>
<pre>
Clang rejects following C++ code containing generic lambda in anonymous struct's member function, while both GCC and MSVC accept the same code. This affects all forms of generic lambdas like `auto&x`, `auto... x`.
- Here is the reproducer: https://godbolt.org/z/1ehMYbsT8
- _**Generated by fuzzer.**_
## Program
```cpp
typedef struct {
void foo() {
auto f = [](auto&& x) {};
f(f);
}
} Test;
```
## Clang Output
```bash
<source>:1:15: error: anonymous non-C-compatible type given name for linkage purposes by typedef declaration after its linkage was computed; add a tag name here to establish linkage prior to definition
1 | typedef struct {
| ^
| Test
<source>:2:5: note: type is not C-compatible due to this member declaration
2 | void foo() {
| ^~~~~~~~~~~~
3 | auto f = [](auto&& x) {};
| ~~~~~~~~~~~~~~~~~~~~~~~~~
4 | f(f);
| ~~~~~
5 | }
| ~
<source>:6:3: note: type is given name 'Test' for linkage purposes by this typedef declaration
6 | } Test;
| ^
1 error generated.
Compiler returned: 1
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJycVUtvpDgQ_jXVl1KQMa_OgQMh09nLaFfaaLV7GhkowDvGRrZJJjnkt68MnXR3Hpe1aKGuKurx-asq4ZwcNFEJ2Q1ktzux-NHY8m8thdk1pnsqayX0gJb-pdY77I1S5lHqAWvgN8BvsDUdYWu0F1IH-UCarGxRianpBEqNQhv9NJnFofN2aT3wwuFEU0MW-0W3XhoNvMbHUSrCxvgR7-oahe7w-59_1SjalmaPfiR0YqI1YoR4P0qHou_XvIRS2Bs7OTT9uxQcKvmTEHImFm-A578gZyHeURJFEQZRBKy6wt_IEkq3RrM0W9MtLVlIKhy9nx0kFfAD8MNgusYoHxk7AD88Az_ENH7_p3H3e1wd_QBeAa_uQi7CU4fNE_bL8zPZaNP8AFaFhyfAE_zDmsGKKQhytj3tPAOr_NNMHfVH7BCKG2AVIuKDkR32xgDfA79-VYSKsEdIbnG7UuD7Y93Ac_z1alrcQvLqKZwe-L4Hfn2SBhNWQXGL9-T8Jn_L7SL3jSK_L35e_LlRI9wY_ie1M4ttCZJvkFRx-GUBUbLWrNCeGKKNvqqvWjPNwstGEYbycZAPpFGHy--NRSX1TzEQzoudjSMXoH2FqaNWCSsCp1D0nixK796-eBQOg_PFUwfJDYquQ4FeDJvzMVy-N0jOi0ZJN55CWWlsUHXUSy1Xym4wxQhFjV_eEq7qywPZtwvtiu8HnDgk1QqTNp7Ce4VCBow8XmDULWvWPjTEsa_OYDiG4m-JfE6ci1wh-_ZyOkd1sqr_H8HOQXj56gTr9ML0Iys_cXXUZKfsV-aerF8-gptDUiWfgXtGNeDFejO8-Jp1AfJPqHcMn6_hL1vovIiNCPHWCNvYCqMiTKLaTLNUZNGSX6wOdK0wPu-uXVcm3XVyLXZUxkWWplnMeL4by0K0bcx6avcpZ_m-pSbPREZxw_Zx3hHfyZIznrE9y1mSMJ5HWZJy6vb5dZwXLM0ZpIwmIVWk1MMURtxOOrdQGWecp-lOiYaUW1cG521ofuA8bA9bhg-ummVwkDIlnXcnF156te6ZdVxAdouXq-X9msBH6cf362TbEXd1Dfxwthx2i1XluwEt_bg0UWsm4IeQxPF1NVsTAgI_rEW5MLq3uh5K_l8AAAD__5_RIdc">