Dies ist ein Follow-up zu this Frage.
Betrachten Sie den folgenden Code:
%Vor%Es kompiliert, aber laut [temp.res] / 8 ist es schlecht geformt , keine Diagnose erforderlich wegen:
Jede gültige Spezialisierung einer variadischen Vorlage erfordert ein leeres Vorlagenparameterpaket
Betrachten Sie nun dieses etwas andere Beispiel:
%Vor% In diesem Fall existiert eine gültige vollständige explizite Spezialisierung, für die das Parameterpack nicht leer ist.
Reicht das aus, um zu sagen, dass der Code nicht mehr schlecht geformt ist?
Hinweis: Ich suche nicht nach alternativen Möglichkeiten wie das std::enable_if_t
in den Rückgabetyp oder ähnliches zu setzen.
[temp.res] / 8 spricht von Template-Deklaration s, nicht von der Entity. Das heißt, es spricht über primäre Vorlagen und partielle Spezialisierungen einzeln ; Diese "Vorlagen" müssen jeder eine gültige Spezialisierung haben, die den Regeln unterliegt. Andernfalls müsste der erste Punkt in diesem Absatz in derselben Weise interpretiert werden, was definitiv nicht seine beabsichtigte Bedeutung ergibt.
%Vor%Tags und Links c++ c++11 templates language-lawyer variadic-templates