35 KiB
[gram.expr]
Annex A (informative) Grammar summary [gram]
A.5 Expressions [gram.expr]
primary-expression:
literal
this
( expression )
id-expression
lambda-expression
fold-expression
requires-expression
splice-expression
id-expression:
unqualified-id
qualified-id
pack-index-expression
unqualified-id:
identifier
operator-function-id
conversion-function-id
literal-operator-id
~ type-name
~ computed-type-specifier
template-id
qualified-id:
nested-name-specifier templateopt unqualified-id
nested-name-specifier:
::
type-name ::
namespace-name ::
computed-type-specifier ::
splice-scope-specifier ::
nested-name-specifier identifier ::
nested-name-specifier templateopt simple-template-id ::
splice-scope-specifier:
splice-specifier
templateopt splice-specialization-specifier
pack-index-expression:
id-expression ... [ constant-expression ]
lambda-expression:
lambda-introducer attribute-specifier-seqopt lambda-declarator compound-statement
lambda-introducer < template-parameter-list > requires-clauseopt attribute-specifier-seqopt
lambda-declarator compound-statement
lambda-introducer:
[ lambda-captureopt ]
lambda-declarator:
lambda-specifier-seq noexcept-specifieropt attribute-specifier-seqopt trailing-return-typeopt
function-contract-specifier-seqopt
noexcept-specifier attribute-specifier-seqopt trailing-return-typeopt function-contract-specifier-seqopt
trailing-return-typeopt function-contract-specifier-seqopt
( parameter-declaration-clause ) lambda-specifier-seqopt noexcept-specifieropt attribute-specifier-seqopt
trailing-return-typeopt requires-clauseopt function-contract-specifier-seqopt
lambda-specifier:
consteval
constexpr
mutable
static
lambda-specifier-seq:
lambda-specifier lambda-specifier-seqopt
lambda-capture:
capture-default
capture-list
capture-default , capture-list
capture-default:
&
capture-list:
capture
capture-list , capture
capture:
simple-capture
init-capture
simple-capture:
identifier ...opt
& identifier ...opt
this
- this
init-capture:
...opt identifier initializer
& ...opt identifier initializer
fold-expression:
( cast-expression fold-operator ... )
( ... fold-operator cast-expression )
( cast-expression fold-operator ... fold-operator cast-expression )
fold-operator: one of
-
-
- / % ^ & | << >>
+= -= = /= %= ^= &= |= <<= >>= =
== != < > <= >= && || , . ->*
- / % ^ & | << >>
-
requires-expression:
requires requirement-parameter-listopt requirement-body
requirement-parameter-list:
( parameter-declaration-clause )
requirement-body:
{ requirement-seq }
requirement-seq:
requirement requirement-seqopt
requirement:
simple-requirement
type-requirement
compound-requirement
nested-requirement
simple-requirement:
expression ;
type-requirement:
typename nested-name-specifieropt type-name ;
typename splice-specifier
typename splice-specialization-specifier
compound-requirement:
{ expression } noexceptopt return-type-requirementopt ;
return-type-requirement:
-> type-constraint
nested-requirement:
requires constraint-expression ;
splice-expression:
splice-specifier
template splice-specifier
template splice-specialization-specifier
postfix-expression:
primary-expression
postfix-expression [ expression-listopt ]
postfix-expression ( expression-listopt )
simple-type-specifier ( expression-listopt )
typename-specifier ( expression-listopt )
simple-type-specifier braced-init-list
typename-specifier braced-init-list
postfix-expression . templateopt id-expression
postfix-expression . splice-expression
postfix-expression -> templateopt id-expression
postfix-expression -> splice-expression
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:
initializer-list
unary-expression:
postfix-expression
unary-operator cast-expression
++ cast-expression
-- cast-expression
await-expression
sizeof unary-expression
sizeof ( type-id )
sizeof ... ( identifier )
alignof ( type-id )
noexcept-expression
new-expression
delete-expression
reflect-expression
unary-operator: one of
- & + - ! ~
await-expression:
co_await cast-expression
noexcept-expression:
noexcept ( expression )
new-expression:
::opt new new-placementopt new-type-id new-initializeropt
::opt new new-placementopt ( type-id ) new-initializeropt
new-placement:
( expression-list )
new-type-id:
type-specifier-seq new-declaratoropt
new-declarator:
ptr-operator new-declaratoropt
noptr-new-declarator
noptr-new-declarator:
[ expressionopt ] attribute-specifier-seqopt
noptr-new-declarator [ constant-expression ] attribute-specifier-seqopt
new-initializer:
( expression-listopt )
braced-init-list
delete-expression:
::opt delete cast-expression
::opt delete [ ] cast-expression
reflect-expression:
^^ ::
^^ reflection-name
^^ type-id
^^ id-expression
reflection-name:
nested-name-specifieropt identifier
nested-name-specifier template identifier
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
compare-expression:
shift-expression
compare-expression <=> shift-expression
relational-expression:
compare-expression
relational-expression < compare-expression
relational-expression > compare-expression
relational-expression <= compare-expression
relational-expression >= compare-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
yield-expression:
co_yield assignment-expression
co_yield braced-init-list
throw-expression:
throw assignment-expressionopt
assignment-expression:
conditional-expression
yield-expression
throw-expression
logical-or-expression assignment-operator initializer-clause
assignment-operator: one of
= *= /= %= += -= >>= <<= &= ^= |=
expression:
assignment-expression
expression , assignment-expression