.|
.I initializer-item
.|
+.I initarg-item
+.|
.I fragment-item
.|
.I message-item
.I slot-initializer
::=
.I dotted-name
-.B =
-.I initializer
+.RB [ =
+.IR initializer ]
.br
.I initializer
::=
.I c-fragment
.br
+.I initarg-item
+::=
+.<
+.B initarg
+.IR declaration-specifier \*+
+.IR list [ init-declarator ]
+.B ;
+.br
.I fragment-item
::=
.I fragment-kind
|
.I identifier
.|
+.B <
+.I plain-type
+.B >
+.|
.B ?
.I s-expression
.|
.B _Complex
.|
.I qualifier
+.|
+.I storage-specifier
+.|
+.I atomic-type
.br
.I qualifier
::=
+.I atomic
+|
.B const
|
.B volatile
|
.B restrict
.br
+.I plain-type
+::=
+.IR declaration-specifier \*+
+.I abstract-declarator
+.br
+.I atomic-type
+::=
+.I
+atomic
+.B (
+.I plain-type
+.B )
+.br
+.I atomic
+::=
+.B atomic
+|
+.B _Atomic
+.br
+.I storage-specifier
+::=
+.I alignas
+.B (
+.I c-fragment
+.B )
+.br
+.I alignas
+::=
+.B alignas
+|
+.B _Alignas
+.br
.I type-name
::=
.I identifier
A declaration specifier must consist of
zero or more
.IR qualifier s,
+zero or more
+.IR storage-specifier s,
and one of the following, up to reordering.
.hP \*o
.I type-name
.IR declaration-specifier \*+
.I argument-declarator
.br
+.I abstract-declarator
+::=
+.IR declarator "[\*e, " argument-list ]
+.br
.I argument-declarator
::=
.IR declarator [ identifier " | \*e, " argument-list ]