Let’s give DEF’s parameter pack a name for ease of reference:
template <typename ...Ts>
struct ABC {
template <Ts ... Values>
struct DEF {};
};
The key point here is that by [temp.param]/p15, Ts... Values is both a pack expansion of Ts and a declaration of a parameter pack Values.
If a template-parameter is […] a parameter-declaration that
declares a parameter pack (8.3.5), then the template-parameter is a
template parameter pack (14.5.3). A template parameter pack that is a
parameter-declaration whose type contains one or more unexpanded parameter packs is a pack expansion.
Since DEF takes a non-type parameter pack, it doesn’t match a template template parameter that doesn’t take packs ([temp.arg.template]/p3):
A template-argument matches a template template-parameter P when
each of the template parameters in the
template-parameter-list of the template-argument’s corresponding class template or alias template A matches the corresponding template
parameter in the template-parameter-list of P. Two template parameters
match if they are of the same kind (type, non-type, template), for
non-type template-parameters, their types are equivalent (14.5.6.1),
and for template template-parameters, each of their corresponding
template-parameters matches, recursively. When P’s template-parameter-list contains a template parameter pack (14.5.3), the template parameter pack will match zero or more template
parameters or template parameter packs in the
template-parameter-list of A with the same type and form as the template parameter pack in P (ignoring whether those template
parameters are template parameter packs).
To be sure, Values is rather weird for packs – for every specialization of ABC, Values must contain a fixed number of arguments – but under the current rules it’s still a pack, so the rules for packs apply.