Template parameter lists are syntactically similar to declarations, but do not support initializers. The syntax for parameters is defined by the grammar for Parameters:
Parameters ::= [ Parameter (';' Parameter)* ]
Parameter ::= TypeId ID ArrayDecl* (',' ID ArrayDecl*)*
| 'const' ID ArrayDecl* (',' ID ArrayDecl*)*
The Type and ArrayDecl non-terminals are defined in the section on declarations. In contrast to global and local declarations the parameter list should not end with a ";"-sign.
Except for constant parameters, all parameters are reference parameters (i.e. on instantiation call by reference semantics is used).