13 Templates [temp]

13.7 Template declarations [temp.decls]

13.7.1 General [temp.decls.general]

The template parameters of a template are specified in the angle bracket enclosed list that immediately follows the keyword template.
A primary template declaration is one in which the name of the template is not followed by a template-argument-list.
The template argument list of a primary template is the template argument list of its template-head ([temp.arg]).
A template declaration in which the name of the template is followed by a template-argument-list is a partial specialization ([temp.spec.partial]) of the template named in the declaration, which shall be a class or variable template.
For purposes of name lookup and instantiation, separately instantiated constructs, type-constraints, and requires-clauses ([temp.pre]) are considered definitions; each separately instantiated construct, type-constraint, or requires-clause is a separate definition which is unrelated to the templated function definition or to any other separately instantiated constructs, type-constraints, or requires-clauses.
For the purpose of instantiation, the substatements of a constexpr if statement ([stmt.if]) are considered definitions.
For the purpose of name lookup and instantiation, the compound-statement of an expansion-statement is considered a template definition.
Because an alias-declaration cannot declare a template-id, it is not possible to partially or explicitly specialize an alias template.