| Issue |
63303
|
| Summary |
"copy constructor must pass its first argument by reference" error in friend declaration in class template
|
| Labels |
new issue
|
| Assignees |
|
| Reporter |
igkper
|
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{}};
}
```
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs