extern "C" void abort (); template <class T> void f () { abort (); } template <> void f<char> () { abort (); } template <class T> void f (int) { abort (); } template <> void f<char> (int) { } template <class T> class C { friend void f<char> (int); public: void ff () { f<char> (0); } }; int main () { C<int> c; c.ff(); }