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.