<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/63303>63303</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
"copy constructor must pass its first argument by reference" error in friend declaration in class template
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
igkper
</td>
</tr>
</table>
<pre>
Hi,
I think in the code below (and at https://godbolt.org/z/vf6GjYsca), clang is wrong to believe the constructor in the friend declaration in the nested class `Template<T>::A` is a copy constructor and suggest its parameter be passed by reference.
```cpp
#include <iostream>
class NonTemplate
{
public:
class A;
NonTemplate(A a);
class A
{
friend NonTemplate::NonTemplate(A);
int secret{42};
};
};
NonTemplate::NonTemplate(NonTemplate::A a)
{
std::cout << a.secret << std::endl;
}
template <typename T>
class Template
{
public:
class A;
Template(A a);
class A
{
friend Template::Template(A);
int secret{42};
};
};
template <typename T>
Template<T>::Template(Template::A a)
{
std::cout << a.secret << std::endl;
}
int main()
{
NonTemplate nt{NonTemplate::A{}};
Template<int> t{Template<int>::A{}};
}
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0VUGTqzYM_jXionkZxwaSHDhksy9tLz3tpUcDCvF7YDO22J3tr-8YSJYkr7M9bDMZwJal79MnW9YhmMYSFZA9Qfac6IHPzhem-dmTT0pXvxe_G5AHEM8g9tPzD-SzsT_RWOQzYeVqwpJa94Ygt9rWqBnPzH0AtQd5BHlsXF26llfONyCPf4M8vp7y3378FSoNcgfygFWrbYMm4Jt3tkF2MaKhV5ohbGA_VOz8BfXkDdkaa6pa7TUbZy8WS4GpjhFDQMjFC3V9q5lAHV5AfY-k1H4PuYhwGivXv98AxAzC0DQUGA0H7LXXHTF5LAl7HQLVWL6jpxN5shWtZm1yMf2rvp9npDK2aoeaENTBuMCedBcpLMScaP7p7JXmZNw8TR_9ULamiqQXTog457cH9XRvWQaT2z2OGj8uuwS4Tlwxcf7NGi_jjeLdASzDX1yNZQxUeWLYPKUSNs8fS5aDm-_x-Qnag3nKD-9kw8D1ZK_cwFF_UAfUq4nTZXxdRLZubzgtCPEMF534vSerO8KXaxknGb-oel9at1ud_r-KfSLQL8_fgs1_KifiF1Y0ptppY0FuoxKPUItNhjbq8bjr4vrN841KiAvJD8YyqO8YvR9m_zXGB9FLN5mGSV2oeqd2OqFinW_zjVJqs03OBe3yUuR1VuaK0jSv0ixLd5lIT7uToDqrE1NIIZXI16nYCZllqzVt1muRb3W5y8S2LCEV1GnTrtr2tYsdOjEhDFTkSgmVtLqkNoy3g5SW3nA0gpTxsvBF9PlWDk2AVLQmcPiIwoZbKkDKhwbbDYHHRjq215PxgVH7ZujI8k1nBSmRvJ-a_q8b_nQYLjswGXxb3F09hs9DuapcB_IYyc2vb713P6hikMcxpQDyOKb8TwAAAP__Xy0L1Q">