You may think the compiler should deduce the pack as int ,int, but the C++ standard explicitly requires the behavior you observed.
[temp.arg.explicit/9]
Template argument deduction can extend the sequence of template
arguments corresponding to a template parameter pack, even when the
sequence contains explicitly specified template arguments. [ Example:template<class ... Types> void f(Types ... values); void g() { f<int*, float*>(0, 0, 0); // Types is deduced to the sequence int*, float*, int }— end example ]
The above means that even though some of the parameters were specified, deduction doesn’t end. The parameter pack must always be expandable by argument deduction. It’s as if the explicit arguments that were given are an instantiation of a template with a trailing parameter pack. When coupled with the following:
[temp.arg.explicit/3]
Trailing template arguments that can be deduced or obtained from
default template-arguments may be omitted from the list of explicit
template-arguments. A trailing template parameter pack not otherwise
deduced will be deduced to an empty sequence of template arguments.
…
The compiler must match the un-deduced arguments to an empty pack. But it has nothing to deduce it from.
As such, your attempt to plug Args... into AAA cannot possibly match. Because the type sequence is two types with a trailing list (that the compiler cannot deduce as empty from nullptr). While AAA expects just two types.