These concepts is a bit unclear to me. Well, template instantiation's defined pretty well by N4296::14.7 [temp.spec]
:
The act of instantiating a function, a class, a member of a class template or a member template is referred to as template instantiation.
That's if we have a function/variable/class template, instantiation of the template is just creating an object or function. For instance:
template<typename T> class U{ };
U<int> a; //instantiation
But N4296:14.7.1 [temp.inst]
says (Emphasize mine):
Unless a class template specialization has been explicitly instantiated (14.7.2) or explicitly specialized (14.7.3), the class template specialization is implicitly instantiated when the specialization is referenced in a context that requires a completely-defined object type or when the completeness of the class type affects the semantics of the program.
What's the definition of the instantiation of the template specialization, not just the instantiation of a template?