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 |