Annex A (informative) Grammar summary [gram] (original) (raw)
A.11 Templates [gram.temp]
template-declaration:
template-head declaration
template-head concept-definition
template-head:
template < template-parameter-list > requires-clause
template-parameter-list:
template-parameter
template-parameter-list , template-parameter
requires-clause:
requires constraint-logical-or-expression
constraint-logical-or-expression:
constraint-logical-and-expression
constraint-logical-or-expression || constraint-logical-and-expression
constraint-logical-and-expression:
primary-expression
constraint-logical-and-expression && primary-expression
template-parameter:
type-parameter
parameter-declaration
type-tt-parameter
variable-tt-parameter
concept-tt-parameter
type-parameter:
type-parameter-key ... identifier
type-parameter-key identifier = type-id
type-constraint ... identifier
type-constraint identifier = type-id
type-parameter-key:
class
typename
type-constraint:
nested-name-specifier concept-name
nested-name-specifier concept-name < template-argument-list >
type-tt-parameter:
template-head type-parameter-key ... identifier
template-head type-parameter-key identifier type-tt-parameter-default
type-tt-parameter-default:
= nested-name-specifier template-name
= nested-name-specifier template template-name
variable-tt-parameter:
template-head auto ... identifier
template-head auto identifier = nested-name-specifier template-name
concept-tt-parameter:
template < template-parameter-list > concept ... identifier
template < template-parameter-list > concept identifier = nested-name-specifier template-name
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-argument-list:
template-argument ...
template-argument-list , template-argument ...
template-argument:
constant-expression
type-id
nested-name-specifier template-name
nested-name-specifier template template-name
constraint-expression:
logical-or-expression
deduction-guide:
explicit-specifier template-name ( parameter-declaration-clause ) -> simple-template-id requires-clause ;
concept-definition:
concept concept-name attribute-specifier-seq = constraint-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