First, you need to be clear on the difference between a class template and a template class.
A
class template is a class that is declared with placeholders for some or all of the types to be used when creating an object of the class.
The object created by supplied the types to the class template is the
template class.
That said:
1. A class template can be derived from a class-template specialization.
This just means that any class template you write can derive from a class declaration where the types are already known.
2. A class template can be derived from a nontemplate class.
There is no difference between a non-template class and a specialized template. In both cases the types are known. In effect, this is the same as (1) above.
3. A class-template specialization can be derived from a class-template specialization
.
Again, if the types are known, it is equivalent to a non-template where the types are known.
4. A nontemplate class can be derived from a class-template specialization
.
This means if your class template has been supplied the actual type, then you may derive from it and since the types are known the derived class does not need to be a class template.