template-declaration: template < template-parameter-list > declaration
template-parameter-list: template-parameter template-parameter-list , template-parameter
template-parameter: type-parameter parameter-declaration
type-parameter: type-parameter-key ...opt identifieropt type-parameter-key identifieropt = type-id template < template-parameter-list > type-parameter-key ...opt identifieropt template < template-parameter-list > type-parameter-key identifieropt = id-expression
type-parameter-key: class typename
simple-template-id: template-name < template-argument-listopt >
template-id: simple-template-id operator-function-id < template-argument-listopt > literal-operator-id < template-argument-listopt >
template-name: identifier
template-argument-list: template-argument ...opt template-argument-list , template-argument ...opt
template-argument: constant-expression type-id id-expression
typename-specifier: typename nested-name-specifier identifier typename nested-name-specifier templateopt simple-template-id
explicit-instantiation: externopt template declaration
explicit-specialization: template < > declaration
deduction-guide: explicitopt template-name ( parameter-declaration-clause ) -> simple-template-id ;