Annex A (informative) Grammar summary [gram]

A.12 Templates [gram.temp]

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 ;