[PATCH] D19336: Repair redeclaration chain of friend template functions.

Richard Smith via cfe-commits cfe-commits at lists.llvm.org
Wed Apr 20 13:57:12 PDT 2016

rsmith added a comment.

Sorry, I don't think this approach can work. Consider:

  template<typename T> struct X {
    template<typename U> friend void f(T);
    template<typename U> friend void f(U);

These two friend declarations declare different friend function templates, but this transformation would incorrectly make them have the same type and be redeclarations of each other.

I think the right thing here is to just accept that a friend function template declared within a class template will not be part of the corresponding redeclaration chain. But that's fine, so long as we don't try to inject the function template into the surrounding scope -- when we come to instantiate the class template, the instantiated friend function template will have the right type and will be part of the relevant redeclaration chain.


More information about the cfe-commits mailing list