// tmp2tmp.cpp -- template friends to a template class #include using std::cout; using std::endl; // template prototypes template void counts(); template void report(T &); // template class template class HasFriendT { private: TT item; static int ct; public: HasFriendT(const TT & i) : item(i) {ct++;} ~HasFriendT() { ct--; } friend void counts(); friend void report<>(HasFriendT &); }; template int HasFriendT::ct = 0; // template friend functions definitions template void counts() { cout << "template size: " << sizeof(HasFriendT) << "; "; cout << "template counts(): " << HasFriendT::ct << endl; } template void report(T & hf) { cout << hf.item << endl; } int main() { counts(); HasFriendT hfi1(10); HasFriendT hfi2(20); HasFriendT hfdb(10.5); report(hfi1); // generate report(HasFriendT &) report(hfi2); // generate report(HasFriendT &) report(hfdb); // generate report(HasFriendT &) cout << "counts() output:\n"; counts(); cout << "counts() output:\n"; counts(); // std::cin.get(); return 0; }