A template
template-argument A matches a template
template parameter
P when
P is at least as specialized as
A, ignoring constraints
on
A if
P is unconstrained
. If
P contains a template parameter pack, then
A also matches
P
if each of
A's template parameters
matches the corresponding template parameter declared in the
template-head of
P. Two template parameters match if they are of the same kind,
for constant template parameters, their types are
equivalent (
[temp.over.link]), and for template template parameters,
each of their corresponding template parameters matches, recursively
. When
P's
template-head contains a
template-parameter
that declares a template parameter
pack (
[temp.variadic]), the template parameter pack will match zero or more template
parameters or template parameter packs declared in the
template-head of
A with the same type and form as the template parameter pack declared in
P
(ignoring whether those template parameters are template parameter packs)
.