This code: template<typename T, typename U> class freeList { public: void foo() {}; };
class bar {}; class baz : protected freeList<bar, baz> { template<typename T> friend void freeList<T, baz>::foo(); }; int main() { baz b; return 0; } gets you: s3:~/ootbc/personal/ivan$ g++ foo.cc foo.cc:12: error: member void freeList<T, baz>::foo() declared as friend before type freeList<T, baz> defined FWIW, Comeau accepts it. -- Summary: rejects valid friend Product: gcc Version: 4.4.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: igodard at pacbell dot net http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42328