// { dg-do compile } // Copyright (C) 2003 Free Software Foundation // Contributed by Kriang Lerdsuwanakij // Member function of class template as friend template struct A { template void f(); }; class C { int i; template template friend void A::f(); }; template struct A { template void f(); }; template<> struct A { template void f(); }; template template void A::f() { C c; c.i = 0; } template template void A::f() { C c; c.i = 0; } template void A::f() { C c; c.i = 0; } template <> void A::f<'b'>() { C c; c.i = 0; } int d2 = 0; int main() { A a1; a1.f<0>(); A a2; a2.f<&d2>(); A a3; a3.f<'a'>(); a3.f<'b'>(); }