3 Expressions

3.1 Syntax

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