すみませんもう一個質問させてください。

template<class T> class A{
public:
 void f(){…}
};

template<class T> class B : public A<T>{
public:
 void g(){f();}
};

というコードがあったとき、g 内の f が undeclared identifier だというエラーが出ますよね?
T が不明だからそうなるのだと説明されてるのを見たのですが、T はコンパイル時には確定してるのになぜダメなのでしょうか。