Annex A (informative) Grammar summary [gram]

A.7 Declarators [gram.decl]

init-declarator-list:
	init-declarator
	init-declarator-list , init-declarator
init-declarator:
	declarator initializer
	declarator requires-clause
declarator:
	ptr-declarator
	noptr-declarator parameters-and-qualifiers trailing-return-type
ptr-declarator:
	noptr-declarator
	ptr-operator ptr-declarator
noptr-declarator:
	declarator-id attribute-specifier-seq
	noptr-declarator parameters-and-qualifiers
	noptr-declarator [ constant-expression ] attribute-specifier-seq
	( ptr-declarator )
parameters-and-qualifiers:
	( parameter-declaration-clause ) cv-qualifier-seq
ref-qualifier noexcept-specifier attribute-specifier-seq
trailing-return-type:
	-> type-id
ptr-operator:
	* attribute-specifier-seq cv-qualifier-seq
	& attribute-specifier-seq
	&& attribute-specifier-seq
	nested-name-specifier * attribute-specifier-seq cv-qualifier-seq
cv-qualifier-seq:
	cv-qualifier cv-qualifier-seq
cv-qualifier:
	const
	volatile
ref-qualifier:
	&
	&&
declarator-id:
	... id-expression
type-id:
	type-specifier-seq abstract-declarator
defining-type-id:
	defining-type-specifier-seq abstract-declarator
abstract-declarator:
	ptr-abstract-declarator
	noptr-abstract-declarator parameters-and-qualifiers trailing-return-type
	abstract-pack-declarator
ptr-abstract-declarator:
	noptr-abstract-declarator
	ptr-operator ptr-abstract-declarator
noptr-abstract-declarator:
	noptr-abstract-declarator parameters-and-qualifiers
	noptr-abstract-declarator [ constant-expression ] attribute-specifier-seq
	( ptr-abstract-declarator )
abstract-pack-declarator:
	noptr-abstract-pack-declarator
	ptr-operator abstract-pack-declarator
noptr-abstract-pack-declarator:
	noptr-abstract-pack-declarator parameters-and-qualifiers
	noptr-abstract-pack-declarator [ constant-expression ] attribute-specifier-seq
	...
parameter-declaration-clause:
	parameter-declaration-list ...
	parameter-declaration-list , ...
parameter-declaration-list:
	parameter-declaration
	parameter-declaration-list , parameter-declaration
parameter-declaration:
	attribute-specifier-seq decl-specifier-seq declarator
	attribute-specifier-seq decl-specifier-seq declarator = initializer-clause
	attribute-specifier-seq decl-specifier-seq abstract-declarator
	attribute-specifier-seq decl-specifier-seq abstract-declarator = initializer-clause
function-definition:
	attribute-specifier-seq decl-specifier-seq declarator virt-specifier-seq function-body
	attribute-specifier-seq decl-specifier-seq declarator requires-clause function-body
function-body:
	ctor-initializer compound-statement
	function-try-block
	= default ;
	= delete ;
initializer:
	brace-or-equal-initializer
	( expression-list )
brace-or-equal-initializer:
	= initializer-clause
	braced-init-list
initializer-clause:
	assignment-expression
	braced-init-list
braced-init-list:
	{ initializer-list , }
	{ designated-initializer-list , }
	{ }
initializer-list:
	initializer-clause ...
	initializer-list , initializer-clause ...
designated-initializer-list:
	designated-initializer-clause
	designated-initializer-list , designated-initializer-clause
designated-initializer-clause:
	designator brace-or-equal-initializer
designator:
	. identifier
expr-or-braced-init-list:
	expression
	braced-init-list