The prototype class of this:
template <typename T>
class MyClass
{};
template <typename T>
class MyClass;
template <typename T>
class MyDerivedClass : public virtual MyBaseClass<T>
{};
{}
expected '{' before ';' token
The inheritance specifier is part of a class's definition, not its declaration.
You can of course still declare the class, just not its inheritance relationship:
template <typename T>
class MyDerivedClass;