| expression | → | disjunction |
| 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 ((< | > | <= | >=) shift)* | shift ( is type-expr | as type-expr )* |
| shift | → | additive ((<< | >>) additive)* |
| additive | → | multiplicative ((+ | −) multiplicative)* |
| multiplicative | → | prefix ((* | / | %) prefix)* |
| prefix | → | ((− | + | ! | ~) prefix) ) | postfix |
| postfix | → | primary (. identifier | [ expression ] | ( argument-list ) )* |
| primary | → | ( expression ) | literal | basic‑type | template‑id | identifier | this | base | default‑expr | cast‑expr | new‑expr |
| default-expr | → | default ( type‑expr ) |
| cast-expr | → | cast < type‑expr > ( expression ) |
| new-expr | → | new type-expr (( argument-list ))? |
| argument-list | → | expression-list? |
| expression-list | → | argument (, argument)* |
| argument | → | ref expression | expression |
| constant‑expression | → | expression |