C.2 Expressions

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 nmodelopt placementopt new-type-name new-initializeropt : :opt new nmodelopt placement opt ( type-name ) new-initializeropt

placement:
( expression-list )

new-type-name:
type-specifier-list new declarator
opt

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 ––

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-list
opt qualified-class-name : : name

literal:
integer-constant
character-constant
floating-constant
string-literal