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 ;