[temp.arg.nontype]
1:
If the type T of a template-parameter ([temp.param]) contains a placeholder type ([dcl.spec.auto]) or a placeholder for a deduced class type ([dcl.type.class.deduct]), the type of the parameter is the type deduced for the variable x in the invented declaration
T x = template-argument ;
If a deduced parameter type is not permitted for a template-parameter declaration ([temp.param]), the program is ill-formed.
4:
A non-type template-parameter shall have one of the following (optionally cv-qualified) types:
(4.1)
a type that is literal, has strong structural equality ([class.compare.default]), has no mutable or volatile subobjects, and in which if there is a defaulted member operator<=>, then it is declared public,
(4.2)
an lvalue reference type,
(4.3)
a type that contains a placeholder type ([dcl.spec.auto]), or
(4.4)
a placeholder for a deduced class type ([dcl.type.class.deduct]).
5:
[ Note: Other types are disallowed either explicitly below or implicitly by the rules governing the form of template-arguments ([temp.arg]).
— end note
]
The top-level cv-qualifiers on the template-parameter are ignored when determining its type.