expression:
assignment-expression
expression , assignment-expression
assignment-expression:
conditional-expression
unary-expression assignment-operator assignment-expression
assignment-operator: one of
= *= /= %= += –= >= <= &= ^= |=
conditional-expression:
logical-or-expression
logical-or-expression ? expression : conditional-expression
logical-or-expression:
logical-and-expression
logical-or-expression || logical-and-expression
logical-and-expression:
inclusive-or-expression
logical-and-expression && inclusive-or-expression
inclusive-or-expression:
exclusive-or-expression
inclusive-or-expression | exclusive-or-expression
exclusive-or-expression:
and-expression
exclusive-or-expression ^ and-expression
and-expression:
equality-expression
and-expression & equality-expression
equality-expression:
relational-expression
equality-expression == relational-expression
equality-expression != relational-expression
relational-expression:
shift-expression
relational-expression < shift-expression
relational-expression > shift-expression
relational-expression <= shift-expression
relational-expression => shift-expression
shift-expression:
additive-expression
shift-expression << additive-expression
shift-expression >> additive-expression
additive-expression:
multiplicative-expression
additive-expression + multiplicative-expression
additive-expression – multiplicative-expression
multiplicative-expression:
segment-expression
multiplicative-expression * segment-expression
multiplicative-expression / segment-expression
multiplicative-expression % segment-expression
segment-expression:
pm-expression
segment-expression :> pm-expression
pm-expression:
cast-expression
pm-expression .* cast-expression
pm-expression –>* cast-expression
cast-expression:
unary-expression
( type-name ) cast-expression
unary-expression:
postfix-expression
++ unary-expression
–– unary-expression
unary-operator cast-expression
sizeof unary-expression
sizeof ( type-name )
allocation-expression
deallocation-expression
unary-operator: one of
* & + – ! ~
allocation-expression:
::opt new placementopt new-type-name new-initializeropt
::opt new placementopt ( type-name ) new-initializeropt
placement:
( expression-list )
new-type-name:
type-specifier-list new-declaratoropt
new-declarator:
ms-modifier-list opt * cv-qualifier-list opt new-declaratoropt
ms-modifier-list opt complete-class-name :: *cv-qualifier-listopt
new-declaratoropt
new-declaratoropt [ expression ]
new-initializer:
( initializer-list )
deallocation-expression:
::opt delete cast-expression
::opt delete [ ] cast-expression
postfix-expression:
primary-expression
postfix-expression [ expression ]
postfix-expression ( expression-list )
simple-type-name ( expression-list )
postfix-expression . name
postfix-expression –> name
postfix-expression ++
postfix-expression ––
dynamic_cast < type-id > ( expression )
static_cast < type-id > ( expression )
const_cast < type-id > ( expression )
reinterpret_cast < type-id > ( expression )
typeid( expression )
typeid( type-id )
expression-list:
assignment-expression
expression-list , assignment-expression
primary-expression:
literal
this
:: identifier
:: operator-function-name
:: qualified-name ( expression )
name
name:
identifier
operator-function-name
conversion-function-name
~ class-name
qualified-name
qualified-name:
ms-modifier-listopt qualified-class-name :: name
literal:
integer-constant
character-constant
floating-constant
string-literal
integer-constant:
decimal-constant integer-suffixopt
octal-constant integer-suffixopt
hexadecimal-constant integer-suffixopt
'c-char-sequence'
decimal-constant:
nonzero-digit
decimal-constant digit
octal-constant:
0
octal-constant octal-digit
hexadecimal-constant:
0x hexadecimal-digit
0X hexadecimal-digit
hexadecimal-constant hexadecimal-digit
nonzero-digit: one of
1 2 3 4 5 6 7 8 9
octal-digit: one of
0 1 2 3 4 5 6 7
hexadecimal-digit: one of
0 1 2 3 4 5 6 7 8 9
a b c d e f
A B C D E F
integer-suffix:
unsigned-suffix long-suffixopt
long-suffix unsigned-suffixopt
unsigned-suffix: one of
u U
long-suffix: one of
l L
character-constant:
'c-char-sequence'
L'c-char-sequence'
c-char-sequence:
c-char
c-char-sequence c-char
c-char:
any member of the source character set except the single quote ('
),
backslash (\
), or newline character
escape-sequence
escape-sequence:
simple-escape-sequence
octal-escape-sequence
hexadecimal-escape-sequence
simple-escape-sequence: one of
\' \" \? \\
\a \b \f \n \r \t \v
octal-escape-sequence:
\ octal-digit
\ octal-digit octal-digit
\ octal-digit octal-digit octal-digit
hexadecimal-escape-sequence:
\xhexadecimal-digit
hexadecimal-escape-sequence hexadecimal-digit
floating-constant:
fractional-constant exponent-partopt floating-suffixopt
digit-sequence exponent-part floating-suffixopt
fractional-constant:
digit-sequenceopt . digit-sequence
digit-sequence .
exponent-part:
e signopt digit-sequence
E signopt digit-sequence
sign: one of
+ –
digit-sequence:
digit
digit-sequence digit
floating-suffix: one of
f l F L
string literal:
''s-char-sequence opt''
L ''s-char-sequence opt''
s-char-sequence:
s-char
s-char-sequence s-char
s-char:
any member of the source character set except double quotation marks ("), backslash (\), or newline character
escape-sequence