Ja, das ist standardkonform.
Laut [dcl.type.simple] / 2 :
Ein Typspezifizierer der Form
typename
opt verschachtelter Name-Specifier opt Vorlagenname ist ein Platzhalter für einen abgeleiteten Klassentyp ([dcl.type.class.educt]). Der Schablonenname muss eine Klassenvorlage benennen, die kein Klassenname ist.
Und [temp.param] / 3 :
Ein type-Parameter , dessen Bezeichner keiner Ellipse folgt, definiert seinen Bezeichner als typedef-name (falls ohne
template
deklariert) oder Vorlage -name (falls mittemplate
deklariert) im Bereich der Template-Deklaration.
TT
ist ein Typ-Parameter, der mit template
deklariert wird, was ihn zu einem Schablonennamen und damit zu einem Platzhalter für einen abgeleiteten Klassentyp macht. Alle üblichen Regeln gelten gut.
Tags und Links c++ templates language-lawyer c++17 deduction-guide