sdkrystian wrote: @erichkeane the most recent commit results in the following: ```cpp template<typename T> void f(T); void g() { }
template<typename T> struct A { // error: cannot declare an explicit specialization in a friend template<> friend void f<>(T) { } // error: friend function specialization cannot be defined friend void f<>(T) { } // error: cannot declare an explicit specialization in a friend template<> friend void ::g() { } // error: friend function definition cannot be qualified with '::' friend void ::g() { } }; void h() { void i(); struct B { // error: templates can only be declared in namespace or class scope // error: cannot declare an explicit specialization in a friend template<> friend void i() { } // error: friend function cannot be defined in a local class friend void i() { } }; } ``` Unrelated, but it also seems that `template<> friend void f<>(T) { }` causes [this assert](https://github.com/llvm/llvm-project/blob/main/clang/lib/Sema/SemaDecl.cpp#L10477) to fire. This happens because we clear `HasExplicitTemplateArgs` for invalid declarations [here](https://github.com/llvm/llvm-project/blob/main/clang/lib/Sema/SemaDecl.cpp#L10427). I could include a fix, but it might fall outside the scope of this PR. I also added a release note as requested. https://github.com/llvm/llvm-project/pull/72863 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits