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

Reply via email to