primary-expression:
literal
this
:: identifier
:: operator-function-id
:: qualified-id
( expression )
id-expression
id-expression:
unqualified-id
qualified-id
id-expression:
unqualified-id
qualified-id
unqualified-id:
identifier
operator-function-id
conversion-function-id
~
class-name
template-id
qualified-id:
nested-name-specifier templateunqualified-id
nested-name-specifier:
class-or-namespace-name :: nested-name-specifier![]()
class-or-namespace-name:
class-name
namespace-name
postfix-expression:
primary-expression
postfix-expression [ expression ]
postfix-expression ( expression-list)
simple-type-specifier ( expression-list)
postfix-expression . template::
id-expression
postfix-expression>
template::
id-expression
postfix-expression . pseudo-destructor-name
postfix-expression ->
pseudo-destructor-name
postfix-expression ++
postfix-expression -
dynamic_cast<
type-id>
( expression )
static_cast<
type-id>
( expression )
reinterpret_cast<
type-id>
( expression )
const_cast<
type-id>
( expression )
typeid ( expression )
typeid ( type-id )
expression-list:
assignment-expression
expression-list , assignment-expression
pseudo-destructor-name:
::nested-name-specifier
type-name :: type-name
::nested-name-specifier
type-name
unary-expression:
postfix-expression
++ cast-expression
- cast-expression
unary-operator cast-expression
sizeof unary-expression
sizeof ( type-id )
new-expression
delete-expression
unary-operator: one of
* & + - ! ~
new-expression:
::new new-placement
new-type-id new-initializer
![]()
::new new-placement
( type-id
)
new-initializer![]()
new-placement:
( expression-list )
new-type-id:
type-specifier-seq new-declarator![]()
new-declarator:
ptr-operator new-declarator![]()
direct-new-declarator
direct-new-declarator:
[ expression ]
direct-new-declarator [ constant-expression ]
new-initializer:
( expression-list)
delete-expression:
::delete cast-expression
::delete [ ] cast-expression
cast-expression:
unary-expression
( type-id ) cast-expression
pm-expression:
cast-expression
pm-expression .* cast-expression
pm-expression->*
cast-expression
multiplicative-expression:
pm-expression
multiplicative-expression * pm-expression
multiplicative-expression / pm-expression
multiplicative-expression%
pm-expression
additive-expression:
multiplicative-expression
additive-expression + multiplicative-expression
additive-expression - multiplicative-expression
shift-expression:
additive-expression
shift-expression<<
additive-expression
shift-expression>>
additive-expression
relational-expression:
shift-expression
relational-expression<
shift-expression
relational-expression>
shift-expression
relational-expression<=
shift-expression
relational-expression>=
shift-expression
equality-expression:
relational-expression
equality-expression==
relational-expression
equality-expression!=
relational-expression
and-expression:
equality-expression
and-expression&
equality-expression
exclusive-or-expression:
and-expression
exclusive-or-expression^
and-expression
inclusive-or-expression:
exclusive-or-expression
inclusive-or-expression|
exclusive-or-expression
logical-and-expression:
inclusive-or-expression
logical-and-expression&&
inclusive-or-expression
logical-or-expression:
logical-and-expression
logical-or-expression||
logical-and-expression
conditional-expression:
logical-or-expression
logical-or-expression?
expression:
assignment-expression
assignment-expression:
conditional-expression
logical-or-expression assignment-operator assignment-expression
throw-expression
assignment-operator: one of
= *= /= %= += -= >>= <<= &= ^= |=
expression:
assignment-expression
expression,
assignment-expression
constant-expression:
conditional-expression