В общем случае шаблонов, если у вас есть шаблон шаблона
template <typename T> struct Foo {};
Foo<Base>, не является базовым классом Foo<Derived>.
Foo<Base>
Foo<Derived>
Следовательно, вы не можете do:
Foo<Derived> f1; Foo<Base> f2 = f1;