Variadische Vorlagen, Parameterpaket und seine diskutierte Mehrdeutigkeit in einer Parameterliste

ei dieser Frage beziehe ich mich auf meine vorherige Frage.

ei dieser Frage stellte ich fest, dass Folgendes nicht gültig ist:

template<typename T, typename... A, typename S>
class C { };

Das ist weil

[Es ist kein gültiger Code] für Klassenvorlagen, da deren Argumente immer angegeben werden müssen, was immer zu Mehrdeutigkeiten führt, es sei denn, das Parameterpaket befindet sich am Ende und verschlingt alle verbleibenden Vorlagenparameter.

Das macht natürlich Sinn und ich habe es verstanden.

Dann wurde als alternativer Ansatz Folgendes vorgeschlagen, das eine Spezialisierung umfasst:

template<typename F, typename S>
class C;

template<typename T, typename... A, typename S>
class C<T(A...), S> { };

Eigentlich scheint es zu funktionieren, also dank demjenigen, der es vorgeschlagen hat.

Anyway, was ich nicht verstehe, ist, warum dies gültiger Code ist, während der vorherige nicht war.
Sollte es unter der gleichen Mehrdeutigkeit der vorherigen Lösung leiden? Warum und wie löst der Compiler diese Mehrdeutigkeit in diesem Fall?
Nach der vorherigen Frage (siehe den Link am Anfang dieser Frage) scheint es mir, dass immer noch der variable Teil alle Parameter bis zum Ende verschluckt, daher sollte dieser Code auch nicht gültig sein.
Ich irre mich natürlich, aber was ist genau falsch an meiner Argumentation?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage