<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/83461>83461</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[clang][rejects valid][c++20] bad parse of constrained friend function
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
ericniebler
</td>
</tr>
</table>
<pre>
The following should compile (-std=c++20):
```c++
template <class A>
concept always_true = true;
struct receiver {
template <class Tag = int>
friend void tag_invoke( always_true auto, receiver self) {
}
};
```
All recent versions of clang including trunk rejects this code with:
```
<source>:9:43: error: template parameter missing a default argument
9 | friend void tag_invoke( always_true auto, receiver self) {
| ^
<source>:8:25: note: previous default template argument defined here
8 | template <class Tag = int>
| ^
1 error generated.
Compiler returned: 1
```
https://godbolt.org/z/6G1hPsKM3
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJysVE2vozYU_TVmc_UibEMCCxZJmHRRVepi9iNjX8AdY0f-yNP011eGfLzOjKouBiFs2Zd7zrk-viIEPVnEjtQnUveFSHF2vkOvpdU4GPTF4NS37vOMMDpj3Lu2E4TZJaNAuuWqDQJhzVuIivBeEnYi7MRKwlrCj6TsSfn47svtvcdsqxGXqxERgfCzNCIEOBL-aduTzkq8RhDmXXwLX6JPOayHPCH89DF5iD7JCB4l6ht6IIf7NsCPCJ_FtObRNj6xAEav0Sq4Oa0giumLtjf3FQlr_oUvUnSEnV9IAc1IWPsRkRz6O7dD_-L5kP-R9tGYNZONcEMftLMB3AjSCDuBttIklcsdfbJfweNfKGOAOOsA0imEdx3n76v8UzB-Di55iVkuP-aTqTjhR0Dvnc-TZ5GuwosFI3pYdAgZXIDCUSQTQfgpLWjjQydAln2GX1m7_OScpP70U-4N4UdWZ8rWRczj1eNNuxSeNJ9aHnzzjraoYEaPL6DmTv7_GuQHanSrH0xo0YuIaretn7dr4cFjTN6iyjTpf9hgjvEa8kGyC2GXyanBmbhzfiLs8jdhl_1vdP4z_P4H38IL1XHV8lYU2NFD2TJO-Z4Wc6caNowoqkOp9nSgUrJqGMtmKBu6PwwSC92xklUlYy1tWEvb3b5q6oFWtGaSVjWnpCpxEdrsjLktmUGhQ0jYNbza08KIAU1YWwVjq0kJY7lr-C7Hvw1pCqQqjQ4xvDJEHc3aX7Y_6p7Up4eXb8JotS29WkfdwyBUtmLA9To4G6IX6xHenTYmK6N2tkjedN-VT8c5DTvpFsIumcR9eLt6l0EJu6yaAmGXVdY_AQAA__9Z9oNm">