template <class T> class foo;

template <class T> class baa{
 friend foo;
 int n;
public:
 baa() : n(777){}
};

template <class T> class foo : public baa<T>{
 int hoge;
public:
 void set_val( baa<T>& arg ){ hoge = arg.n; }
};

int main(){
 baa<int> b;
 foo<int> f;
 f.set_val( b );
 return 0;
}

インデントが全角スペースですいません
これだとarg.nにアクセス出来ないのですが、間違っている場所を教えて頂けないでしょうか
friend foo; が、やっぱり
template <class T> friend foo; なんでしょうか