Вы ищете B<A> b;
Следующая программа компилируется без ошибок или предупреждений на g ++ 4.4.3.
#include <iostream>
#include <typeinfo>
using namespace std;
template <typename T>
struct B {
int f(T& i) { cout << "Hello\n"; return 0; }
};
class A {
public:
B<A> b;
};
int main()
{
A k;
return k.b.f(k);
}
Примечание : Если вы используете шаблоны только для того, чтобы избежать предварительного объявления, мое решение неверно. Но я оставлю это здесь, если вы используете шаблоны по какой-либо другой законной причине.