#include <iostream> using namespace std; template <class T> class X; template <typename T> T f1( const T& t, X<int> x) { cout << x.priv << endl; return t; } template <typename T, typename Q> T f2( const T& t, Q x) { cout << x.priv << endl; return t; } template <typename T> int f3( X<T> x) { cout << x.priv << endl; return 0; } int f4(X<int> x); // itt meg nem tudja, hogy van x.priv template <typename T> class X { public: X() { priv = 1; } private: template <typename S> friend S f1(const S&, X<int>); // template <typename S> friend S f2(const S&, X); friend int f3<>(X); friend int f4(X<int>); int priv; }; int main() { X<int> x; f1( 3.3, x); // f2( 3.3, x); f3(x); f4(x); return 0; } int f4(X<int> x) { cout << x.priv << endl; return 0; }