<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/61851>61851</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[clang-16 regression] Nested template friend function declaration inside template class clashes with different symbol in inline namespace
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
jdrouhard
</td>
</tr>
</table>
<pre>
Reproducible on clang 16/trunk (and 10), but not 11-15 or gcc:
```cpp
namespace A {
inline namespace B {
inline constexpr struct {} foo;
}
template <typename T>
class Bar {
template <typename U>
friend void foo(U &&arg) {}
};
}
void foobar() {
A::Bar<int> b;
}
```
clang-16 and trunk reject this with:
```
<source>:9:21: error: redefinition of 'foo' as different kind of symbol
friend void foo(U &&arg) {}
^
<source>:14:17: note: in instantiation of template class 'A::Bar<int>' requested here
A::Bar<int> b;
^
<source>:3:36: note: previous definition is here
inline constexpr struct {} foo;
^
1 error generated.
Compiler returned: 1
```
Changing either `Bar` to be a non-template, or the `friend foo()` declaration to be a non-template allows it to compile without issue.
godbolt link: https://godbolt.org/z/q38sanqMY
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJycVU1z4zYM_TX0BWOPRNr6OOjgj_jWHjrdQ48UCUvc0KQCUknTX9-hFMeO626nq7EpD0GAD-8BsAzBdA6xYZsd2xwWcoy9p-a7Jj_2kvSi9fq9-Q0H8npUprUI3oGy0nWQF4wfI43uGRivpNOQZ4zXjO-hHSM4HyHPl_kGPEGnFBNblh1YdlmLbP6oYZh3nDxjGKRC2AIrd_MmAIBx1jiEq3331X5zRnkXIv45EIRIo4rTwfIAJ--ZuHFh5eEWTNqKeB6sjAhM7OP7gOk6-J2Jp-sRZWUIsJP0z_sfen-7ep_IoNPw6o2ewPDqGzBeMF5I6hivP4B-RXhBfIf2EqSVxHh1cZ49t4lmsd1JYmJvXGTiCdoHgS7s38adZF3mBSQtZ2EJv6OKEHsT4M3E_iriXQCxD34khSljsa2Z2PKciS0gkaf0g1DjyTgTjXfgT8B4OfFQggygzemEhC7Cs3E6mcP7ufX2K8f_j0O2eXqILV-npUyYnI-Y3saBcSFKF4284PsUdBad8fIBtQk-4cuIIaKGHgmviH-sBNw9_4ZWpG9xC3YgfDV-DHDDpwl3l_9ES_zH8wkwnzWFDh2SjKhX8_7enwdjkYAwjuRQJ7D5D8pt30vXGdcBmtgjASuyRFaRQfTQIkhw3i0vOqSx4glij-ngRynMVZCGTpGBRmUlzQI-igDSWv8WwMRkVjPcqar9GMGEMOLqFl_ndettBGvcc8qlj3EISVR-ZPz4YV35VHrHvxg_vogqSPfyyx8L3Qhdi1ousMmLKsvrsqzKRd-sea615ht94rU61aLlmVqrU5UpnsuqFgvT8IyLTIgsL0XBy5XQ64yXG1FhXRRSabbO8CyNXVn7ek53LybcTZFXm3xhZYs2TLOcc4dvc1KM8zTaqUk-y3bsAltn1oQYrlGiiXb6E_icAYQdYQjGO7Y5wK9zhX9SeeF_dGri-5Z744LReN9Aae1xniI3_T73-dyBX6f8YiTb3HFuYj-2K-XPjB8T9o_XciCf5hTjxynjwPhxYuTvAAAA___kBAg5">