expression | → | equivalence |
equivalence | → | implication (<=> implication)* |
implication | → | disjunction (=> implication)? |
disjunction | → | conjunction (|| conjunction)* |
conjunction | → | bit‑or (&& bit‑or)* |
bit‑or | → | bit‑xor (| bit‑xor)* |
bit‑xor | → | bit‑and (^ bit‑and)* |
bit‑and | → | equality (& equality)* |
equality | → | relational ((== | !=) relational)* |
relational | → | shift ((<= | >= | < | > | is type‑expr | as type‑expr) shift | <empty>)* |
shift | → | additive ((<< | >>) additive)* |
additive | → | multiplicative ((+ | -) multiplicative)* |
multiplicative | → | prefix ((* | / | %) prefix)* |
prefix | → | (++ | -- | + | - | ! | ~ | * | &) prefix | postfix |
postfix | → | primary (++ | -- | . identifier | -> identifier | [ expression ] | ( argument‑list ))* |
primary | → | ( expression ) | literal | basic‑type | template‑id | identifier | this | base | size‑of‑expr | type‑name‑expr | type‑id‑expr | cast‑expr | construct‑expr | new‑expr |
size‑of‑expr | → | sizeof ( expression ) |
type‑name‑expr | → | typename ( expression ) |
type‑id‑expr | → | typeid ( expression ) |
cast‑expr | → | cast < type‑expr > ( expression ) |
construct‑expr | → | construct < type‑expr > ( expression‑list ) |
new‑expr | → | new type‑expr (( argument‑list ))? |
argument‑list | → | expression‑list? |
expression‑list | → | expression % , |
invoke‑expr | → | (template‑id | identifier) (. identifier)* ( argument‑list ) |