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 ... identifier type-parameter-key identifier = type-id template < template-parameter-list > type-parameter-key ... identifier template < template-parameter-list > type-parameter-key identifier = id-expression
type-parameter-key: class typename
simple-template-id: template-name < template-argument-list >
template-id: simple-template-id operator-function-id < template-argument-list > literal-operator-id < template-argument-list >
template-name: identifier
template-argument-list: template-argument ... template-argument-list , template-argument ...
template-argument: constant-expression type-id id-expression
typename-specifier: typename nested-name-specifier identifier typename nested-name-specifier template simple-template-id
explicit-instantiation: extern template declaration
explicit-specialization: template < > declaration
deduction-guide: explicit template-name ( parameter-declaration-clause ) -> simple-template-id ;