Explicit and implicit instantiation and situations like the following could be kept in mind.
When a class is explicitly instantiated (template class Class_Template<Explicit_Type>;
), all members of the generic class will be present in the instantiated class. However, suppose a class specialisation is described by mentioning a class body. Only members (whether members that are already present in the generic class or new members) that are explicitly defined in the specialized class will be present in the instantiated class.
Suppose member functions (of the generic class) are defined via a particular scoped class specialization, then a specialized class is implicitly instantiated which will have these functions and also all other members present in the generic class, in a suitably specialized manner.
In the second case, since a specialized class has been implicitly instantiated, we cannot later also define a class with the same specialization, either via explicit instantiation or by mentioning a class body. The need to do the latter may arise in order to add a member that is specific to that specialization. That is not possible in this case, since the compiler has already instantiated a specialized class.
Irrespective of these ways in which a class specialization could be instantiated, the user is always free to instantiate other specializations based on other template arguments.