StartSymbol:
Translation-unit
StartSymbol
::=
Translation-unit
no references
Typedef-name:
Identifier
Typedef-name
::=
Identifier
referenced by:
Type-name
Namespace-name:
Original-namespace-name
Namespace-name
::=
Original-namespace-name
referenced by:
Nested-name-specifier
Qualified-namespace-specifier
Using-directive
Original-namespace-name:
Identifier
Original-namespace-name
::=
Identifier
referenced by:
Extension-namespace-definition
Namespace-name
Namespace-alias:
Identifier
Namespace-alias
::=
Identifier
no references
Class-name:
Identifier
Simple-template-id
Class-name
::=
Identifier
|
Simple-template-id
referenced by:
Class-head-name
Class-or-decltype
Declarator-id
Type-name
Unqualified-id
Enum-name:
Identifier
Enum-name
::=
Identifier
referenced by:
Type-name
Template-name:
Identifier
Template-name
::=
Identifier
referenced by:
Simple-template-id
Translation-unit:
Declaration-seq
Translation-unit
::=
Declaration-seq
?
referenced by:
StartSymbol
Primary-expression:
Literal
this
(
Expression
)
Id-expression
Lambda-expression
Primary-expression
::=
Literal
| 'this'
| '('
Expression
')'
|
Id-expression
|
Lambda-expression
referenced by:
Postfix-expression
Id-expression:
Unqualified-id
Qualified-id
Id-expression
::=
Unqualified-id
|
Qualified-id
referenced by:
Declarator-id
Postfix-expression
Primary-expression
Template-argument
Type-parameter
Unqualified-id:
Identifier
Operator-function-id
Conversion-function-id
~
Class-name
Decltype-specifier
Template-id
Unqualified-id
::=
Identifier
|
Operator-function-id
|
Conversion-function-id
| '~' (
Class-name
|
Decltype-specifier
)
|
Template-id
referenced by:
Id-expression
Qualified-id
Using-declaration
Qualified-id:
Nested-name-specifier
template
Unqualified-id
::
Identifier
Operator-function-id
Literal-operator-id
Template-id
Qualified-id
::=
Nested-name-specifier
'template'?
Unqualified-id
| '::' (
Identifier
|
Operator-function-id
|
Literal-operator-id
|
Template-id
)
referenced by:
Id-expression
Nested-name-specifier:
Type-name
Namespace-name
Decltype-specifier
::
Identifier
Simple-template-id
template
Nested-name-specifier
::= (
Type-name
|
Namespace-name
|
Decltype-specifier
)? '::' ( (
Identifier
| 'template'?
Simple-template-id
) '::' )*
referenced by:
Class-head-name
Class-or-decltype
Declarator-id
Elaborated-type-specifier
Enum-head
GNU-elaborated-template
Pseudo-destructor-name
Ptr-operator
Qualified-id
Qualified-namespace-specifier
Simple-type-specifier
Typename-specifier
Using-declaration
Using-directive
Lambda-expression:
Lambda-introducer
Lambda-declarator
Compound-statement
Lambda-expression
::=
Lambda-introducer
Lambda-declarator
?
Compound-statement
referenced by:
Primary-expression
Lambda-introducer:
[
Lambda-capture
]
Lambda-introducer
::= '['
Lambda-capture
? ']'
referenced by:
Lambda-expression
Lambda-capture:
Capture-default
,
Capture-list
Capture-list
Lambda-capture
::=
Capture-default
( ','
Capture-list
)?
|
Capture-list
referenced by:
Lambda-introducer
Capture-default:
&
=
Capture-default
::= '&'
| '='
referenced by:
Lambda-capture
Capture-list:
Capture
...
,
Capture-list
::=
Capture
'...'? ( ','
Capture
'...'? )*
referenced by:
Lambda-capture
Capture:
Simple-capture
Init-capture
Capture
::=
Simple-capture
|
Init-capture
referenced by:
Capture-list
Simple-capture:
&
Identifier
this
Simple-capture
::= '&'?
Identifier
| 'this'
referenced by:
Capture
Init-capture:
&
Identifier
Initializer
Init-capture
::= '&'?
Identifier
Initializer
referenced by:
Capture
Lambda-declarator:
(
Parameter-declaration-clause
)
mutable
Exception-specification
Attribute-specifier-seq
Trailing-return-type
Lambda-declarator
::= '('
Parameter-declaration-clause
')' 'mutable'?
Exception-specification
?
Attribute-specifier-seq
?
Trailing-return-type
?
referenced by:
Lambda-expression
Postfix-expression:
Primary-expression
Simple-type-specifier
Typename-specifier
(
Expression-list
)
Braced-init-list
dynamic_cast
static_cast
reinterpret_cast
const_cast
<
Type-id
>
(
Expression
typeid
(
Expression
Type-id
)
[
Expression
Braced-init-list
]
(
Expression-list
)
.
->
template
Id-expression
Pseudo-destructor-name
++
--
Postfix-expression
::= (
Primary-expression
| (
Simple-type-specifier
|
Typename-specifier
) ( '('
Expression-list
? ')' |
Braced-init-list
) | ( ( 'dynamic_cast' | 'static_cast' | 'reinterpret_cast' | 'const_cast' ) '<'
Type-id
'>' '('
Expression
| 'typeid' '(' (
Expression
|
Type-id
) ) ')' ) ( '[' (
Expression
|
Braced-init-list
) ']' | '('
Expression-list
? ')' | ( '.' | '->' ) ( 'template'?
Id-expression
|
Pseudo-destructor-name
) | '++' | '--' )*
referenced by:
Unary-expression
Expression-list:
Initializer-list
Expression-list
::=
Initializer-list
referenced by:
Initializer
Mem-initializer
New-initializer
New-placement
Postfix-expression
Pseudo-destructor-name:
::
Nested-name-specifier
Type-name
::
Nested-name-specifier
template
Simple-template-id
::
~
Type-name
~
Decltype-specifier
Pseudo-destructor-name
::= '::'? (
Nested-name-specifier
? (
Type-name
'::' )? |
Nested-name-specifier
'template'
Simple-template-id
'::' ) '~'
Type-name
| '~'
Decltype-specifier
referenced by:
Postfix-expression
Unary-expression:
sizeof
Postfix-expression
++
--
Unary-operator
GNU-realimag-operator
Cast-expression
sizeof
(
Type-id
...
(
Identifier
alignof
(
Type-id
)
New-expression
Delete-expression
GNU-builtin-function-call-expression
GNU-extension
Cast-expression
Braced-init-list
Unary-expression
::= 'sizeof'* (
Postfix-expression
| ( '++' | '--' |
Unary-operator
|
GNU-realimag-operator
)
Cast-expression
| ( 'sizeof' ( '('
Type-id
| '...' '('
Identifier
) | 'alignof' '('
Type-id
) ')' |
New-expression
|
Delete-expression
|
GNU-builtin-function-call-expression
|
GNU-extension
|
Cast-expression
Braced-init-list
)
referenced by:
Cast-expression
Unary-operator:
*
&
+
-
!
~
Unary-operator
::= '*'
| '&'
| '+'
| '-'
| '!'
| '~'
referenced by:
Unary-expression
New-expression:
::
new
New-placement
New-type-id
(
Type-id
)
New-initializer
New-expression
::= '::'? 'new'
New-placement
? (
New-type-id
| '('
Type-id
')' )
New-initializer
?
referenced by:
Unary-expression
New-placement:
(
Expression-list
)
New-placement
::= '('
Expression-list
')'
referenced by:
New-expression
New-type-id:
Type-specifier-seq
Ptr-operator
Ptr-operator
Noptr-new-declarator
New-type-id
::=
Type-specifier-seq
(
Ptr-operator
* (
Ptr-operator
|
Noptr-new-declarator
) )?
referenced by:
New-expression
Noptr-new-declarator:
[
Expression
]
Attribute-specifier-seq
Constant-expression
[
Noptr-new-declarator
::= '['
Expression
']'
Attribute-specifier-seq
? ( '['
Constant-expression
']'
Attribute-specifier-seq
? )*
referenced by:
New-type-id
New-initializer:
(
Expression-list
)
Braced-init-list
New-initializer
::= '('
Expression-list
? ')'
|
Braced-init-list
referenced by:
New-expression
Delete-expression:
::
delete
[
]
Cast-expression
Delete-expression
::= '::'? 'delete' ( '[' ']' )?
Cast-expression
referenced by:
Unary-expression
Noexcept-expression:
noexcept
(
Expression
)
Noexcept-expression
::= 'noexcept' '('
Expression
')'
no references
Cast-expression:
(
Type-id
)
GNU-extension
(
Expression
)
Unary-expression
(
struct
Identifier
Type-id
[
]
)
GNU-statement-expression
Cast-expression
::= ( '('
Type-id
')' |
GNU-extension
( '('
Expression
')' )? )?* (
Unary-expression
| '(' ( 'struct'
Identifier
|
Type-id
'[' ']' ) ')' |
GNU-statement-expression
)
referenced by:
Delete-expression
GNU-statement-expression
Pm-expression
Unary-expression
GNU-statement-expression:
GNU-extension
(
Compound-statement
)
Cast-expression
GNU-statement-expression
::=
GNU-extension
? '('
Compound-statement
')'
Cast-expression
referenced by:
Cast-expression
Pm-expression:
Cast-expression
.*
->*
Pm-expression
::=
Cast-expression
( ( '.*' | '->*' )
Cast-expression
)*
referenced by:
Multiplicative-expression
Multiplicative-expression:
Pm-expression
*
/
%
Multiplicative-expression
::=
Pm-expression
( ( '*' | '/' | '%' )
Pm-expression
)*
referenced by:
Additive-expression
Additive-expression:
Multiplicative-expression
+
-
Additive-expression
::=
Multiplicative-expression
( ( '+' | '-' )
Multiplicative-expression
)*
referenced by:
Shift-expression
Shift-expression:
Additive-expression
<<
>>
Shift-expression
::=
Additive-expression
( ( '<<' | '>>' )
Additive-expression
)*
referenced by:
Relational-expression
Relational-expression:
Shift-expression
<
>
<=
>=
Relational-expression
::=
Shift-expression
( ( '<' | '>' | '<=' | '>=' )
Shift-expression
)*
referenced by:
Equality-expression
Equality-expression:
Relational-expression
==
!=
Equality-expression
::=
Relational-expression
( ( '==' | '!=' )
Relational-expression
)*
referenced by:
And-expression
And-expression:
Equality-expression
&
And-expression
::=
Equality-expression
( '&'
Equality-expression
)*
referenced by:
Exclusive-or-expression
Exclusive-or-expression:
And-expression
^
Exclusive-or-expression
::=
And-expression
( '^'
And-expression
)*
referenced by:
Inclusive-or-expression
Inclusive-or-expression:
Exclusive-or-expression
|
Inclusive-or-expression
::=
Exclusive-or-expression
( '|'
Exclusive-or-expression
)*
referenced by:
Logical-and-expression
Logical-and-expression:
Inclusive-or-expression
&&
Logical-and-expression
::=
Inclusive-or-expression
( '&&'
Inclusive-or-expression
)*
referenced by:
Logical-or-expression
Logical-or-expression:
Logical-and-expression
||
Logical-or-expression
::=
Logical-and-expression
( '||'
Logical-and-expression
)*
referenced by:
Assignment-expression
Conditional-expression
Conditional-expression:
Logical-or-expression
?
Expression
:
Assignment-expression
Conditional-expression
::=
Logical-or-expression
( '?'
Expression
':'
Assignment-expression
)?
referenced by:
Assignment-expression
Constant-expression
Assignment-expression:
Conditional-expression
Logical-or-expression
Assignment-operator
Initializer-clause
Throw-expression
Assignment-expression
::=
Conditional-expression
|
Logical-or-expression
Assignment-operator
Initializer-clause
|
Throw-expression
referenced by:
Alignment-specifier
Conditional-expression
Expression
Initializer-clause
Parameter-declaration
Throw-expression
Assignment-operator:
=
*=
/=
%=
+=
-=
>>=
<<=
&=
^=
|=
Assignment-operator
::= '='
| '*='
| '/='
| '%='
| '+='
| '-='
| '>>='
| '<<='
| '&='
| '^='
| '|='
referenced by:
Assignment-expression
Expression:
Assignment-expression
Compound-statement
,
Assignment-expression
Expression
::= (
Assignment-expression
|
Compound-statement
) ( ','
Assignment-expression
)*
referenced by:
Cast-expression
Condition
Conditional-expression
Decltype-specifier
Expression-statement
For-range-initializer
GNU-asm-def
GNU-attribute-exp
GNU-builtin-arg
GNU-extension
GNU-ternary-decl-op
GNU-typeof-extension
Iteration-statement
Jump-statement
Noexcept-expression
Noptr-declarator
Noptr-new-declarator
Postfix-expression
Primary-expression
Constant-expression:
Conditional-expression
Constant-expression
::=
Conditional-expression
referenced by:
Enumerator-definition
Labeled-statement
Member-declarator
Noexcept-specification
Noptr-abstract-declarator
Noptr-abstract-pack-declarator
Noptr-new-declarator
Static-assert-declaration
Template-argument
Statement:
Labeled-statement
Attribute-specifier-seq
Expression-statement
Compound-statement
Selection-statement
Iteration-statement
Jump-statement
Try-block
Declaration-statement
Statement
::=
Labeled-statement
|
Attribute-specifier-seq
? (
Expression-statement
|
Compound-statement
|
Selection-statement
|
Iteration-statement
|
Jump-statement
|
Try-block
)
|
Declaration-statement
referenced by:
Iteration-statement
Labeled-statement
Selection-statement
Statement-seq
Labeled-statement:
Attribute-specifier-seq
Identifier
default
case
Constant-expression
...
Constant-expression
:
Statement
Labeled-statement
::=
Attribute-specifier-seq
? (
Identifier
| 'default' | 'case'
Constant-expression
( '...'
Constant-expression
)? ) ':'
Statement
referenced by:
Statement
Expression-statement:
Expression
;
Expression-statement
::=
Expression
? ';'
referenced by:
For-init-statement
Statement
Compound-statement:
{
Statement-seq
}
Compound-statement
::= '{'
Statement-seq
? '}'
referenced by:
Expression
Function-body
Function-try-block
GNU-extension
GNU-statement-expression
Handler
Lambda-expression
Statement
Try-block
Statement-seq:
Statement
Statement-seq
::=
Statement
+
referenced by:
Compound-statement
Selection-statement:
if
(
Condition
)
Statement
else
switch
(
Condition
)
Statement
Selection-statement
::= ( 'if' '('
Condition
')' (
Statement
'else' )? | 'switch' '('
Condition
')' )
Statement
referenced by:
Statement
Condition:
Expression
Attribute-specifier-seq
Decl-specifier-seq
Declarator
=
Initializer-clause
Braced-init-list
Condition
::=
Expression
|
Attribute-specifier-seq
?
Decl-specifier-seq
Declarator
( '='
Initializer-clause
|
Braced-init-list
)
referenced by:
Iteration-statement
Selection-statement
Iteration-statement:
while
(
Condition
for
(
For-init-statement
Condition
;
Expression
For-range-declaration
:
For-range-initializer
)
Statement
do
Statement
while
(
Expression
)
;
Iteration-statement
::= ( 'while' '('
Condition
| 'for' '(' (
For-init-statement
Condition
? ';'
Expression
? |
For-range-declaration
':'
For-range-initializer
) ) ')'
Statement
| 'do'
Statement
'while' '('
Expression
')' ';'
referenced by:
Statement
For-init-statement:
Expression-statement
Simple-declaration
For-init-statement
::=
Expression-statement
|
Simple-declaration
referenced by:
Iteration-statement
For-range-declaration:
Attribute-specifier-seq
Decl-specifier-seq
Declarator
For-range-declaration
::=
Attribute-specifier-seq
?
Decl-specifier-seq
Declarator
referenced by:
Iteration-statement
For-range-initializer:
Expression
Braced-init-list
For-range-initializer
::=
Expression
|
Braced-init-list
referenced by:
Iteration-statement
Jump-statement:
break
continue
goto
Identifier
return
Expression
Braced-init-list
;
Jump-statement
::= ( 'break' | 'continue' | 'goto'
Identifier
| 'return' (
Expression
|
Braced-init-list
)? ) ';'
referenced by:
Statement
Declaration-statement:
Block-declaration
Declaration-statement
::=
Block-declaration
referenced by:
Statement
Declaration-seq:
Pragma-line
Declaration
Declaration-seq
::=
Pragma-line
?
Declaration
+
referenced by:
Linkage-specification
Namespace-body
Translation-unit
Declaration:
Block-declaration
Function-definition
Template-declaration
Explicit-instantiation
Explicit-specialization
Linkage-specification
Namespace-definition
;
Attribute-declaration
Declaration
::=
Block-declaration
|
Function-definition
|
Template-declaration
|
Explicit-instantiation
|
Explicit-specialization
|
Linkage-specification
|
Namespace-definition
| ';'
|
Attribute-declaration
referenced by:
Declaration-seq
Explicit-instantiation
Explicit-specialization
Linkage-specification
Template-declaration
Block-declaration:
Simple-declaration
Asm-definition
Namespace-alias-definition
Using-declaration
Using-directive
Static-assert-declaration
Alias-declaration
Opaque-enum-declaration
Pragma-line
Block-declaration
::=
Simple-declaration
|
Asm-definition
|
Namespace-alias-definition
|
Using-declaration
|
Using-directive
|
Static-assert-declaration
|
Alias-declaration
|
Opaque-enum-declaration
|
Pragma-line
referenced by:
Declaration
Declaration-statement
Alias-declaration:
using
Identifier
Attribute-specifier-seq
=
Type-id
;
Alias-declaration
::= 'using'
Identifier
Attribute-specifier-seq
? '='
Type-id
';'
referenced by:
Block-declaration
Member-declaration
Simple-declaration:
Decl-specifier-seq
Init-declarator-list
Attribute-specifier-seq
Decl-specifier-seq
Init-declarator-list
GNU-ternary-decl-op
;
Simple-declaration
::= (
Decl-specifier-seq
?
Init-declarator-list
? |
Attribute-specifier-seq
Decl-specifier-seq
?
Init-declarator-list
|
GNU-ternary-decl-op
) ';'
referenced by:
Block-declaration
For-init-statement
GNU-ternary-decl-op:
Type-specifier
Expression
?
Expression
:
Expression
GNU-ternary-decl-op
::=
Type-specifier
Expression
'?'
Expression
? ':'
Expression
referenced by:
Simple-declaration
Static-assert-declaration:
static_assert
(
Constant-expression
,
String-literal
)
;
Static-assert-declaration
::= 'static_assert' '('
Constant-expression
','
String-literal
')' ';'
referenced by:
Block-declaration
Member-declaration
Attribute-declaration:
Attribute-specifier-seq
;
Attribute-declaration
::=
Attribute-specifier-seq
';'
referenced by:
Declaration
Decl-specifier:
Storage-class-specifier
Type-specifier
Function-specifier
friend
typedef
GNU-typeof-extension
constexpr
Decl-specifier
::=
Storage-class-specifier
|
Type-specifier
|
Function-specifier
| 'friend'
| 'typedef'
GNU-typeof-extension
?
| 'constexpr'
referenced by:
Decl-specifier-seq
Decl-specifier-seq:
Decl-specifier
Attribute-specifier-seq
GNU-attribute
Decl-specifier
GNU-attribute
Decl-specifier-seq
::=
Decl-specifier
Attribute-specifier-seq
?
|
GNU-attribute
? (
Decl-specifier
GNU-attribute
? )+
referenced by:
Condition
For-range-declaration
Function-definition
Member-declaration
Parameter-declaration
Simple-declaration
Storage-class-specifier:
register
static
GNU-typeof-extension
thread_local
extern
mutable
Storage-class-specifier
::= 'register'
| 'static'
GNU-typeof-extension
?
| 'thread_local'
| 'extern'
| 'mutable'
referenced by:
Decl-specifier
Function-specifier:
inline
virtual
explicit
Function-specifier
::= 'inline'
| 'virtual'
| 'explicit'
referenced by:
Decl-specifier
Type-specifier:
Trailing-type-specifier
Class-specifier
Enum-specifier
Type-specifier
::=
Trailing-type-specifier
|
Class-specifier
|
Enum-specifier
referenced by:
Decl-specifier
GNU-ternary-decl-op
Type-specifier-seq
Trailing-type-specifier:
Simple-type-specifier
GNU-attribute
Elaborated-type-specifier
Typename-specifier
Cv-qualifier
Trailing-type-specifier
::=
Simple-type-specifier
GNU-attribute
?
|
Elaborated-type-specifier
|
Typename-specifier
|
Cv-qualifier
referenced by:
Trailing-type-specifier-seq
Type-specifier
Type-specifier-seq:
Type-specifier
Attribute-specifier-seq
Type-specifier-seq
::=
Type-specifier
+
Attribute-specifier-seq
?
referenced by:
Conversion-type-id
Enum-base
Exception-declaration
New-type-id
Type-id
Trailing-type-specifier-seq:
Trailing-type-specifier
Attribute-specifier-seq
Trailing-type-specifier-seq
::=
Trailing-type-specifier
+
Attribute-specifier-seq
?
referenced by:
Trailing-return-type
Simple-type-specifier:
Nested-name-specifier
Type-name
Nested-name-specifier
template
Simple-template-id
char
char16_t
char32_t
wchar_t
bool
short
int
long
signed
unsigned
float
double
void
auto
Decltype-specifier
Simple-type-specifier
::=
Nested-name-specifier
?
Type-name
|
Nested-name-specifier
'template'
Simple-template-id
| 'char'
| 'char16_t'
| 'char32_t'
| 'wchar_t'
| 'bool'
| 'short'
| 'int'
| 'long'
| 'signed'
| 'unsigned'
| 'float'
| 'double'
| 'void'
| 'auto'
|
Decltype-specifier
referenced by:
Postfix-expression
Trailing-type-specifier
Type-name:
Class-name
Enum-name
Typedef-name
Simple-template-id
Type-name
::=
Class-name
|
Enum-name
|
Typedef-name
|
Simple-template-id
referenced by:
Nested-name-specifier
Pseudo-destructor-name
Simple-type-specifier
Decltype-specifier:
decltype
(
Expression
auto
)
Decltype-specifier
::= 'decltype' '(' (
Expression
| 'auto' ) ')'
referenced by:
Class-or-decltype
Nested-name-specifier
Pseudo-destructor-name
Simple-type-specifier
Unqualified-id
Elaborated-type-specifier:
Class-key
Attribute-specifier-seq
Nested-name-specifier
Identifier
Nested-name-specifier
template
Simple-template-id
enum
Nested-name-specifier
Identifier
Elaborated-type-specifier
::=
Class-key
(
Attribute-specifier-seq
?
Nested-name-specifier
?
Identifier
|
Nested-name-specifier
? 'template'?
Simple-template-id
)
| 'enum'
Nested-name-specifier
?
Identifier
referenced by:
Trailing-type-specifier
Enum-specifier:
Enum-head
{
Enumerator-list
,
}
Enum-specifier
::=
Enum-head
'{' (
Enumerator-list
','? )? '}'
referenced by:
Type-specifier
Enum-head:
Enum-key
Attribute-specifier-seq
Identifier
Enum-base
Nested-name-specifier
Identifier
Enum-base
Enum-head
::= (
Enum-key
Attribute-specifier-seq
? (
Identifier
?
Enum-base
? |
Nested-name-specifier
Identifier
) |
Enum-base
)?
referenced by:
Enum-specifier
Opaque-enum-declaration:
Enum-key
Attribute-specifier-seq
Identifier
Enum-base
;
Opaque-enum-declaration
::=
Enum-key
Attribute-specifier-seq
?
Identifier
Enum-base
? ';'
referenced by:
Block-declaration
Enum-key:
enum
class
struct
Enum-key
::= 'enum' ( 'class' | 'struct' )?
referenced by:
Enum-head
Opaque-enum-declaration
Enum-base:
:
Type-specifier-seq
Enum-base
::= ':'
Type-specifier-seq
referenced by:
Enum-head
Opaque-enum-declaration
Enumerator-list:
Enumerator-definition
,
Enumerator-list
::=
Enumerator-definition
( ','
Enumerator-definition
)*
referenced by:
Enum-specifier
Enumerator-definition:
Enumerator
=
Constant-expression
Enumerator-definition
::=
Enumerator
( '='
Constant-expression
)?
referenced by:
Enumerator-list
Enumerator:
Identifier
Enumerator
::=
Identifier
referenced by:
Enumerator-definition
Namespace-definition:
Named-namespace-definition
Unnamed-namespace-definition
Namespace-definition
::=
Named-namespace-definition
|
Unnamed-namespace-definition
referenced by:
Declaration
Named-namespace-definition:
Original-namespace-definition
Extension-namespace-definition
Named-namespace-definition
::=
Original-namespace-definition
|
Extension-namespace-definition
referenced by:
Namespace-definition
Original-namespace-definition:
inline
namespace
Identifier
GNU-attribute
{
Namespace-body
}
Original-namespace-definition
::= 'inline'? 'namespace'
Identifier
GNU-attribute
? '{'
Namespace-body
'}'
referenced by:
Named-namespace-definition
Extension-namespace-definition:
inline
namespace
Original-namespace-name
{
Namespace-body
}
Extension-namespace-definition
::= 'inline'? 'namespace'
Original-namespace-name
'{'
Namespace-body
'}'
referenced by:
Named-namespace-definition
Unnamed-namespace-definition:
inline
namespace
{
Namespace-body
}
Unnamed-namespace-definition
::= 'inline'? 'namespace' '{'
Namespace-body
'}'
referenced by:
Namespace-definition
Namespace-body:
Declaration-seq
Namespace-body
::=
Declaration-seq
?
referenced by:
Extension-namespace-definition
Original-namespace-definition
Unnamed-namespace-definition
Namespace-alias-definition:
namespace
Identifier
=
Qualified-namespace-specifier
;
Namespace-alias-definition
::= 'namespace'
Identifier
'='
Qualified-namespace-specifier
';'
referenced by:
Block-declaration
Qualified-namespace-specifier:
Nested-name-specifier
Namespace-name
Qualified-namespace-specifier
::=
Nested-name-specifier
?
Namespace-name
referenced by:
Namespace-alias-definition
Using-declaration:
using
typename
Nested-name-specifier
::
Unqualified-id
;
Using-declaration
::= 'using' ( 'typename'?
Nested-name-specifier
| '::' )
Unqualified-id
';'
referenced by:
Block-declaration
Member-declaration
Using-directive:
Attribute-specifier-seq
using
namespace
Nested-name-specifier
Namespace-name
;
Using-directive
::=
Attribute-specifier-seq
? 'using' 'namespace'
Nested-name-specifier
?
Namespace-name
';'
referenced by:
Block-declaration
Asm-definition:
GNU-asm-definition
;
Asm-definition
::=
GNU-asm-definition
';'
referenced by:
Block-declaration
GNU-asm-definition:
asm
__asm__
volatile
__volatile__
(
GNU-asm-extension
)
GNU-asm-definition
::= ( 'asm' | '__asm__' ) ( 'volatile' | '__volatile__' )? '('
GNU-asm-extension
')'
referenced by:
Asm-definition
Init-declarator
Linkage-specification:
extern
String-literal
GNU-typeof-extension
{
Declaration-seq
}
Declaration
Linkage-specification
::= 'extern'
String-literal
GNU-typeof-extension
? ( '{'
Declaration-seq
? '}' |
Declaration
)
referenced by:
Declaration
Attribute-specifier-seq:
Attribute-specifier
Attribute-specifier-seq
::=
Attribute-specifier
+
referenced by:
Alias-declaration
Attribute-declaration
Base-specifier
Class-head
Condition
Decl-specifier-seq
Elaborated-type-specifier
Enum-head
Exception-declaration
For-range-declaration
Function-definition
Labeled-statement
Lambda-declarator
Member-declaration
Member-declarator
Noptr-abstract-declarator
Noptr-abstract-pack-declarator
Noptr-declarator
Noptr-new-declarator
Opaque-enum-declaration
Parameters-and-qualifiers
Ptr-operator
Simple-declaration
Statement
Trailing-type-specifier-seq
Type-specifier-seq
Using-directive
Attribute-specifier:
[
[
Attribute-list
]
]
Alignment-specifier
Attribute-specifier
::= '[' '['
Attribute-list
']' ']'
|
Alignment-specifier
referenced by:
Attribute-specifier-seq
Alignment-specifier:
alignas
(
Type-id
...
Assignment-expression
)
Alignment-specifier
::= 'alignas' '(' (
Type-id
'...'? |
Assignment-expression
) ')'
referenced by:
Attribute-specifier
Attribute-list:
Attribute
...
,
Attribute-list
::= (
Attribute
'...'? )? ( ',' (
Attribute
'...'? )? )*
referenced by:
Attribute-specifier
Attribute:
Attribute-token
Attribute-argument-clause
Attribute
::=
Attribute-token
Attribute-argument-clause
?
referenced by:
Attribute-list
Attribute-token:
Identifier
Attribute-scoped-token
Attribute-token
::=
Identifier
|
Attribute-scoped-token
referenced by:
Attribute
Attribute-scoped-token:
Attribute-namespace
::
Identifier
Attribute-scoped-token
::=
Attribute-namespace
'::'
Identifier
referenced by:
Attribute-token
Attribute-namespace:
Identifier
Attribute-namespace
::=
Identifier
referenced by:
Attribute-scoped-token
Attribute-argument-clause:
(
Balanced-token-seq
)
Attribute-argument-clause
::= '('
Balanced-token-seq
')'
referenced by:
Attribute
Balanced-token-seq:
Balanced-token
Balanced-token
Balanced-token-seq
::=
Balanced-token
?
Balanced-token
*
referenced by:
Attribute-argument-clause
Balanced-token
Balanced-token:
(
Balanced-token-seq
)
[
Balanced-token-seq
]
{
Balanced-token-seq
}
Balanced-token
::= '('
Balanced-token-seq
')'
| '['
Balanced-token-seq
']'
| '{'
Balanced-token-seq
'}'
referenced by:
Balanced-token-seq
Init-declarator-list:
Init-declarator
,
Init-declarator-list
::=
Init-declarator
( ','
Init-declarator
)*
referenced by:
Simple-declaration
Init-declarator:
Declarator
GNU-attribute-list
GNU-asm-definition
Initializer
Init-declarator
::=
Declarator
GNU-attribute-list
?
GNU-asm-definition
?
Initializer
?
referenced by:
Init-declarator-list
Declarator:
Ptr-declarator
Noptr-declarator
Parameters-and-qualifiers
Trailing-return-type
Declarator
::=
Ptr-declarator
|
Noptr-declarator
Parameters-and-qualifiers
Trailing-return-type
referenced by:
Condition
Exception-declaration
For-range-declaration
Function-definition
Init-declarator
Member-declarator
Parameter-declaration
Ptr-declarator:
Ptr-operator
GNU-restrict
Noptr-declarator
Ptr-declarator
::= (
Ptr-operator
GNU-restrict
? )*
Noptr-declarator
referenced by:
Declarator
Noptr-declarator
Noptr-declarator:
GNU-attribute
Declarator-id
Attribute-specifier-seq
(
Ptr-declarator
)
Parameters-and-qualifiers
[
Expression
]
Attribute-specifier-seq
Noptr-declarator
::= (
GNU-attribute
?
Declarator-id
Attribute-specifier-seq
? | '('
Ptr-declarator
')' ) (
Parameters-and-qualifiers
| '['
Expression
? ']'
Attribute-specifier-seq
? )*
referenced by:
Declarator
Ptr-declarator
Parameters-and-qualifiers:
(
Parameter-declaration-clause
)
Cv-qualifier-seq
Ref-qualifier
Exception-specification
Attribute-specifier-seq
Parameters-and-qualifiers
::= '('
Parameter-declaration-clause
')'
Cv-qualifier-seq
?
|
Ref-qualifier
?
Exception-specification
?
Attribute-specifier-seq
?
referenced by:
Abstract-declarator
Declarator
Noptr-abstract-declarator
Noptr-abstract-pack-declarator
Noptr-declarator
Trailing-return-type:
->
Trailing-type-specifier-seq
Abstract-declarator
Trailing-return-type
::= '->'
Trailing-type-specifier-seq
Abstract-declarator
?
referenced by:
Abstract-declarator
Declarator
Lambda-declarator
Ptr-operator:
Nested-name-specifier
*
Attribute-specifier-seq
Cv-qualifier-seq
&
&&
Attribute-specifier-seq
Ptr-operator
::=
Nested-name-specifier
? '*'
Attribute-specifier-seq
?
Cv-qualifier-seq
?
| ( '&' | '&&' )
Attribute-specifier-seq
?
referenced by:
Abstract-declarator
Conversion-type-id
New-type-id
Ptr-abstract-declarator
Ptr-declarator
Cv-qualifier-seq:
Cv-qualifier
Cv-qualifier-seq
::=
Cv-qualifier
+
referenced by:
Parameters-and-qualifiers
Ptr-operator
Cv-qualifier:
const
__const
volatile
Cv-qualifier
::= 'const'
| '__const'
| 'volatile'
referenced by:
Cv-qualifier-seq
Trailing-type-specifier
Ref-qualifier:
&
&&
Ref-qualifier
::= '&'
| '&&'
referenced by:
Parameters-and-qualifiers
Declarator-id:
...
Id-expression
Nested-name-specifier
Class-name
Declarator-id
::= '...'?
Id-expression
|
Nested-name-specifier
?
Class-name
referenced by:
Noptr-declarator
Type-id:
Type-specifier-seq
Abstract-declarator
Type-id
::=
Type-specifier-seq
Abstract-declarator
?
referenced by:
Alias-declaration
Alignment-specifier
Cast-expression
GNU-extension
New-expression
Postfix-expression
Template-argument
Type-id-list
Type-parameter
Unary-expression
Abstract-declarator:
Ptr-operator
Noptr-abstract-pack-declarator
Ptr-operator
Ptr-abstract-declarator
Noptr-abstract-declarator
Parameters-and-qualifiers
Trailing-return-type
Abstract-declarator
::=
Ptr-abstract-declarator
|
Noptr-abstract-declarator
?
Parameters-and-qualifiers
Trailing-return-type
|
Ptr-operator
* (
Noptr-abstract-pack-declarator
|
Ptr-operator
)
referenced by:
Exception-declaration
Parameter-declaration
Trailing-return-type
Type-id
Ptr-abstract-declarator:
Ptr-operator
Noptr-abstract-declarator
Ptr-operator
Ptr-abstract-declarator
::=
Ptr-operator
* (
Noptr-abstract-declarator
|
Ptr-operator
)
referenced by:
Abstract-declarator
Noptr-abstract-declarator
Noptr-abstract-declarator:
Parameters-and-qualifiers
[
Constant-expression
]
Attribute-specifier-seq
(
Ptr-abstract-declarator
)
Parameters-and-qualifiers
[
Constant-expression
]
Attribute-specifier-seq
Noptr-abstract-declarator
::= (
Parameters-and-qualifiers
| '['
Constant-expression
? ']'
Attribute-specifier-seq
? | '('
Ptr-abstract-declarator
')' ) (
Parameters-and-qualifiers
| '['
Constant-expression
? ']'
Attribute-specifier-seq
? )*
referenced by:
Abstract-declarator
Ptr-abstract-declarator
Noptr-abstract-pack-declarator:
...
Parameters-and-qualifiers
[
Constant-expression
]
Attribute-specifier-seq
Noptr-abstract-pack-declarator
::= '...' (
Parameters-and-qualifiers
| '['
Constant-expression
? ']'
Attribute-specifier-seq
? )*
referenced by:
Abstract-declarator
Parameter-declaration-clause:
Parameter-declaration-list
...
Parameter-declaration-list
,
...
Parameter-declaration-clause
::=
Parameter-declaration-list
? '...'?
|
Parameter-declaration-list
',' '...'
referenced by:
Lambda-declarator
Parameters-and-qualifiers
Parameter-declaration-list:
Parameter-declaration
GNU-attribute
,
Parameter-declaration
Parameter-declaration-list
::=
Parameter-declaration
GNU-attribute
? ( ','
Parameter-declaration
)*
referenced by:
Parameter-declaration-clause
Parameter-declaration:
Decl-specifier-seq
Abstract-declarator
=
Assignment-expression
Declarator
GNU-attribute
=
Assignment-expression
Parameter-declaration
::=
Decl-specifier-seq
(
Abstract-declarator
? ( '='
Assignment-expression
)? |
Declarator
(
GNU-attribute
| '='
Assignment-expression
)? )
referenced by:
GNU-builtin-arg
Parameter-declaration-list
Template-parameter
Function-definition:
Attribute-specifier-seq
Decl-specifier-seq
Declarator
Virt-specifier-seq
Function-body
Function-definition
::=
Attribute-specifier-seq
?
Decl-specifier-seq
?
Declarator
Virt-specifier-seq
?
Function-body
referenced by:
Declaration
Member-declaration
Function-body:
Ctor-initializer
Compound-statement
Function-try-block
=
default
delete
;
Function-body
::=
Ctor-initializer
?
Compound-statement
|
Function-try-block
| '=' ( 'default' | 'delete' ) ';'
referenced by:
Function-definition
Initializer:
Brace-or-equal-initializer
(
Expression-list
)
Initializer
::=
Brace-or-equal-initializer
| '('
Expression-list
')'
referenced by:
Init-capture
Init-declarator
Brace-or-equal-initializer:
=
Initializer-clause
Braced-init-list
Brace-or-equal-initializer
::= '='
Initializer-clause
|
Braced-init-list
referenced by:
Initializer
Member-declarator
Initializer-clause:
Assignment-expression
Braced-init-list
Initializer-clause
::=
Assignment-expression
|
Braced-init-list
referenced by:
Assignment-expression
Brace-or-equal-initializer
Condition
Initializer-list
Initializer-list:
Initializer-clause
...
,
Initializer-list
::=
Initializer-clause
'...'? ( ','
Initializer-clause
'...'? )*
referenced by:
Braced-init-list
Expression-list
Braced-init-list:
{
Initializer-list
,
}
Braced-init-list
::= '{' (
Initializer-list
','? )? '}'
referenced by:
Brace-or-equal-initializer
Condition
For-range-initializer
Initializer-clause
Jump-statement
Mem-initializer
New-initializer
Postfix-expression
Unary-expression
Class-specifier:
Class-head
{
Member-specification
}
Class-specifier
::=
Class-head
'{'
Member-specification
? '}'
referenced by:
Type-specifier
Class-head:
Class-key
Attribute-specifier-seq
Class-head-name
final
Base-clause
Class-head
::=
Class-key
Attribute-specifier-seq
? (
Class-head-name
'final'? )?
Base-clause
?
referenced by:
Class-specifier
Class-head-name:
Nested-name-specifier
Class-name
Class-head-name
::=
Nested-name-specifier
?
Class-name
referenced by:
Class-head
Class-key:
class
struct
union
Class-key
::= 'class'
| 'struct'
| 'union'
referenced by:
Class-head
Elaborated-type-specifier
Member-specification:
Member-declaration
Access-specifier
:
Member-specification
::= (
Member-declaration
|
Access-specifier
':' )+
referenced by:
Access-specifier
Class-specifier
Access-specifier:
Member-specification
private
protected
public
Access-specifier
::= (
Member-specification
| 'private' | 'protected' | 'public' )?
referenced by:
Base-specifier
Member-specification
Member-declaration:
Attribute-specifier-seq
Decl-specifier-seq
Member-declarator-list
;
Function-definition
;
Using-declaration
Static-assert-declaration
Template-declaration
Alias-declaration
Member-declaration
::=
Attribute-specifier-seq
?
Decl-specifier-seq
?
Member-declarator-list
? ';'
|
Function-definition
';'?
|
Using-declaration
|
Static-assert-declaration
|
Template-declaration
|
Alias-declaration
referenced by:
Member-specification
Member-declarator-list:
Member-declarator
,
Member-declarator-list
::=
Member-declarator
( ','
Member-declarator
)*
referenced by:
Member-declaration
Member-declarator:
Declarator
Virt-specifier-seq
Pure-specifier
Brace-or-equal-initializer
Identifier
Attribute-specifier-seq
:
Constant-expression
Member-declarator
::=
Declarator
(
Virt-specifier-seq
?
Pure-specifier
? |
Brace-or-equal-initializer
)?
|
Identifier
?
Attribute-specifier-seq
? ':'
Constant-expression
referenced by:
Member-declarator-list
Virt-specifier-seq:
Virt-specifier
Virt-specifier-seq
::=
Virt-specifier
+
referenced by:
Function-definition
Member-declarator
Virt-specifier:
override
final
Virt-specifier
::= 'override'
| 'final'
referenced by:
Virt-specifier-seq
Pure-specifier:
=
0
Pure-specifier
::= '=' '0'
referenced by:
Member-declarator
Base-clause:
:
Base-specifier-list
Base-clause
::= ':'
Base-specifier-list
referenced by:
Class-head
Base-specifier-list:
Base-specifier
...
,
Base-specifier-list
::=
Base-specifier
'...'? ( ','
Base-specifier
'...'? )*
referenced by:
Base-clause
Base-specifier:
Attribute-specifier-seq
virtual
Access-specifier
Access-specifier
virtual
Base-type-specifier
Base-specifier
::=
Attribute-specifier-seq
? ( 'virtual'
Access-specifier
? |
Access-specifier
'virtual'? )?
Base-type-specifier
referenced by:
Base-specifier-list
Class-or-decltype:
Nested-name-specifier
Class-name
Decltype-specifier
Class-or-decltype
::=
Nested-name-specifier
?
Class-name
|
Decltype-specifier
referenced by:
Base-type-specifier
Mem-initializer-id
Base-type-specifier:
Class-or-decltype
Base-type-specifier
::=
Class-or-decltype
referenced by:
Base-specifier
Conversion-function-id:
operator
Conversion-type-id
Conversion-function-id
::= 'operator'
Conversion-type-id
referenced by:
Unqualified-id
Conversion-type-id:
Type-specifier-seq
Ptr-operator
Conversion-type-id
::=
Type-specifier-seq
Ptr-operator
*
referenced by:
Conversion-function-id
Ctor-initializer:
:
Mem-initializer-list
Ctor-initializer
::= ':'
Mem-initializer-list
referenced by:
Function-body
Function-try-block
Mem-initializer-list:
Mem-initializer
,
Mem-initializer-list
...
Mem-initializer-list
::=
Mem-initializer
( ','
Mem-initializer-list
)? '...'?
referenced by:
Ctor-initializer
Mem-initializer-list
Mem-initializer:
Mem-initializer-id
(
Expression-list
)
Braced-init-list
Mem-initializer
::=
Mem-initializer-id
( '('
Expression-list
? ')' |
Braced-init-list
)
referenced by:
Mem-initializer-list
Mem-initializer-id:
Class-or-decltype
Identifier
Mem-initializer-id
::=
Class-or-decltype
|
Identifier
referenced by:
Mem-initializer
Operator-function-id:
operator
Operator
Operator-function-id
::= 'operator'
Operator
referenced by:
Qualified-id
Template-id
Unqualified-id
Operator:
new
delete
[
]
+
-
*
/
%
^
&
|
~
!
=
<
>
+=
-=
*=
/=
%=
^=
&=
|=
<<
>>
>>=
<<=
==
!=
<=
>=
&&
||
++
--
,
->*
->
()
[]
Operator
::= ( 'new' | 'delete' ) ( '[' ']' )?
| '+'
| '-'
| '*'
| '/'
| '%'
| '^'
| '&'
| '|'
| '~'
| '!'
| '='
| '<'
| '>'
| '+='
| '-='
| '*='
| '/='
| '%='
| '^='
| '&='
| '|='
| '<<'
| '>>'
| '>>='
| '<<='
| '=='
| '!='
| '<='
| '>='
| '&&'
| '||'
| '++'
| '--'
| ','
| '->*'
| '->'
| '()'
| '[]'
referenced by:
Operator-function-id
Literal-operator-id:
operator
String-literal
Identifier
Literal-operator-id
::= 'operator'
String-literal
Identifier
referenced by:
Qualified-id
Template-id
Template-declaration:
template
<
Template-parameter-list
>
Declaration
Template-declaration
::= 'template' '<'
Template-parameter-list
'>'
Declaration
referenced by:
Declaration
Member-declaration
Template-parameter-list:
Template-parameter
,
Template-parameter-list
::=
Template-parameter
( ','
Template-parameter
)*
referenced by:
Template-declaration
Type-parameter
Template-parameter:
Type-parameter
Parameter-declaration
Template-parameter
::=
Type-parameter
|
Parameter-declaration
referenced by:
Template-parameter-list
Type-parameter:
class
typename
...
Identifier
Identifier
=
Type-id
template
<
Template-parameter-list
>
class
...
Identifier
Identifier
=
Id-expression
Type-parameter
::= ( 'class' | 'typename' ) ( '...'?
Identifier
? |
Identifier
? '='
Type-id
)
| 'template' '<'
Template-parameter-list
'>' 'class' ( '...'?
Identifier
? |
Identifier
? '='
Id-expression
)
referenced by:
Template-parameter
Simple-template-id:
GNU-elaborated-template
Template-name
<
Template-argument-list
>
Simple-template-id
::=
GNU-elaborated-template
?
Template-name
'<'
Template-argument-list
? '>'
referenced by:
Class-name
Elaborated-type-specifier
Nested-name-specifier
Pseudo-destructor-name
Simple-type-specifier
Template-id
Type-name
Typename-specifier
Template-id:
Simple-template-id
Operator-function-id
Literal-operator-id
<
Template-argument-list
>
Template-id
::=
Simple-template-id
| (
Operator-function-id
|
Literal-operator-id
) '<'
Template-argument-list
? '>'
referenced by:
Qualified-id
Unqualified-id
Template-argument-list:
Template-argument
...
,
Template-argument-list
::=
Template-argument
'...'? ( ','
Template-argument
'...'? )*
referenced by:
Simple-template-id
Template-id
Template-argument:
Constant-expression
Type-id
Id-expression
Template-argument
::=
Constant-expression
|
Type-id
|
Id-expression
referenced by:
Template-argument-list
Typename-specifier:
typename
Nested-name-specifier
Identifier
template
Simple-template-id
Typename-specifier
::= 'typename'
Nested-name-specifier
(
Identifier
| 'template'?
Simple-template-id
)
referenced by:
Postfix-expression
Trailing-type-specifier
Explicit-instantiation:
extern
template
Declaration
Explicit-instantiation
::= 'extern'? 'template'
Declaration
referenced by:
Declaration
Explicit-specialization:
template
<
>
Declaration
Explicit-specialization
::= 'template' '<' '>'
Declaration
referenced by:
Declaration
Try-block:
try
Compound-statement
Handler-seq
Try-block
::= 'try'
Compound-statement
Handler-seq
referenced by:
Statement
Function-try-block:
try
Ctor-initializer
Compound-statement
Handler-seq
Function-try-block
::= 'try'
Ctor-initializer
?
Compound-statement
Handler-seq
referenced by:
Function-body
Handler-seq:
Handler
Handler-seq
::=
Handler
+
referenced by:
Function-try-block
Try-block
Handler:
catch
(
Exception-declaration
)
Compound-statement
Handler
::= 'catch' '('
Exception-declaration
')'
Compound-statement
referenced by:
Handler-seq
Exception-declaration:
Attribute-specifier-seq
Type-specifier-seq
Declarator
Abstract-declarator
...
Exception-declaration
::=
Attribute-specifier-seq
?
Type-specifier-seq
(
Declarator
|
Abstract-declarator
)?
| '...'
referenced by:
Handler
Throw-expression:
throw
GNU-attribute
Assignment-expression
Throw-expression
::= 'throw'
GNU-attribute
?
Assignment-expression
?
referenced by:
Assignment-expression
Exception-specification:
Dynamic-exception-specification
Noexcept-specification
Exception-specification
::=
Dynamic-exception-specification
|
Noexcept-specification
referenced by:
Lambda-declarator
Parameters-and-qualifiers
Dynamic-exception-specification:
throw
(
Type-id-list
)
GNU-attribute
Dynamic-exception-specification
::= 'throw' '('
Type-id-list
? ')'
GNU-attribute
?
referenced by:
Exception-specification
Type-id-list:
Type-id
...
,
Type-id-list
::=
Type-id
'...'? ( ','
Type-id
'...'? )*
referenced by:
Dynamic-exception-specification
Noexcept-specification:
noexcept
(
Constant-expression
)
Noexcept-specification
::= 'noexcept' ( '('
Constant-expression
')' )?
referenced by:
Exception-specification
GNU-restrict:
__restrict__
__restrict
GNU-restrict
::= '__restrict__'
| '__restrict'
referenced by:
Ptr-declarator
GNU-attribute-list:
GNU-attribute
GNU-attribute-list
::=
GNU-attribute
+
referenced by:
Init-declarator
GNU-attribute:
__attribute__
(
(
GNU-attribute-exp-list
__unused__
)
)
GNU-attribute
::= '__attribute__' '(' '(' (
GNU-attribute-exp-list
| '__unused__' )? ')' ')'
referenced by:
Decl-specifier-seq
Dynamic-exception-specification
GNU-attribute-list
Noptr-declarator
Original-namespace-definition
Parameter-declaration
Parameter-declaration-list
Throw-expression
Trailing-type-specifier
GNU-attribute-exp-list:
GNU-attribute-exp
,
GNU-attribute-exp-list
::=
GNU-attribute-exp
( ','
GNU-attribute-exp
)*
referenced by:
GNU-attribute
GNU-attribute-exp
GNU-attribute-exp:
Expression
Single-string-literal
__visibility__
(
GNU-attribute-exp-list
)
(
GNU-attribute-exp-list
)
GNU-attribute-exp
::= (
Expression
|
Single-string-literal
| '__visibility__' '('
GNU-attribute-exp-list
')' ) ( '('
GNU-attribute-exp-list
')' )*
referenced by:
GNU-attribute-exp-list
GNU-typeof-extension:
__typeof__
__typeof
(
Expression
)
GNU-typeof-extension
::= ( '__typeof__' | '__typeof' ) '('
Expression
')'
referenced by:
Decl-specifier
Linkage-specification
Storage-class-specifier
GNU-extension:
__extension__
(
Type-id
Expression
)
(
__extension__
(
Compound-statement
)
)
;
GNU-extension
::= '__extension__' '(' (
Type-id
|
Expression
) ')'
| '(' '__extension__' '('
Compound-statement
')' ')' ';'
referenced by:
Cast-expression
GNU-statement-expression
Unary-expression
GNU-builtin-function-call-expression:
__builtin_va_start
__builtin_va_arg
(
GNU-builtin-arg-list
)
GNU-builtin-function-call-expression
::= ( '__builtin_va_start' | '__builtin_va_arg' ) '('
GNU-builtin-arg-list
? ')'
referenced by:
Unary-expression
GNU-builtin-arg-list:
GNU-builtin-arg
,
GNU-builtin-arg-list
::=
GNU-builtin-arg
( ','
GNU-builtin-arg
)*
referenced by:
GNU-builtin-function-call-expression
GNU-builtin-arg:
Parameter-declaration
Expression
GNU-builtin-arg
::=
Parameter-declaration
|
Expression
referenced by:
GNU-builtin-arg-list
GNU-realimag-operator:
__real__
__imag__
GNU-realimag-operator
::= '__real__'
| '__imag__'
referenced by:
Unary-expression
GNU-asm-extension:
String-literal
GNU-asm-def
::
:
,
GNU-asm-extension
::= ( (
String-literal
|
GNU-asm-def
| '::' | ':' ) ','? )+
referenced by:
GNU-asm-definition
GNU-asm-def:
(
Expression
)
[
Identifier
]
GNU-asm-def
::= '('
Expression
')'
| '['
Identifier
']'
referenced by:
GNU-asm-extension
GNU-elaborated-template:
Nested-name-specifier
template
GNU-elaborated-template
::=
Nested-name-specifier
'template'
referenced by:
Simple-template-id
Pragma-line:
#pragma
[^\n]
Pragma-line
::= '#pragma' [^\n]+
referenced by:
Block-declaration
Declaration-seq
... generated by
RR - Railroad Diagram Generator
R
R