Hello, I'm aware about these issues being around for quite a while now, but there is still a chance this sample code can be helpful. I apologize if someone gets annoyed :-P
template <typename T> struct Foo { template <typename Z> friend void func(const Foo &); }; void check(const Foo<int> & x) { // Foo<int> weird; // uncomment this line and all works func<int>(x); // <-- ERROR } Tested with gcc 4.0 - 4.3, and all behave the same: "error: ‘func’ was not declared in this scope" but it works if you uncomment the weird line. Best regards, Dragan Milenkovic