Как сделать шаблонный класс наследник?

 

Нужен примерно такой код.

template<typename T>
class B;

template<typename T>
class A
{
  public:
    B<T> *b;
    A()
    {
      b = new B<T>();
    }
};

template<typename T>
class B: public A<T>
{
};

В процессе инстанцирования объекта возникает ошибка:

A<double> aa; // error: 'A' - struct undefined
 
Так бесконечная же рекурсия с очевидным переполнением стека. Но мысль понятна.