template class C; template long f(C*); template class C { public: friend long f<>(C*); }; template<> long f(C* i); template<> long f(C* i); extern template class C; extern template long f(C*); extern template class C; extern template long f(C*);