[gram.expr]

# Annex A (informative) Grammar summary [[gram]](./#gram)

## A.5 Expressions [gram.expr]

[primary-expression:](expr.prim.grammar#nt:primary-expression "7.5.1 Grammar [expr.prim.grammar]")  
[*literal*](lex.literal.kinds#nt:literal "5.13.1 Kinds of literals [lex.literal.kinds]")  
this  
( [*expression*](expr.comma#nt:expression "7.6.20 Comma operator [expr.comma]") )  
[*id-expression*](expr.prim.id.general#nt:id-expression "7.5.5.1 General [expr.prim.id.general]")  
[*lambda-expression*](expr.prim.lambda.general#nt:lambda-expression "7.5.6.1 General [expr.prim.lambda.general]")  
[*fold-expression*](expr.prim.fold#nt:fold-expression "7.5.7 Fold expressions [expr.prim.fold]")  
[*requires-expression*](expr.prim.req.general#nt:requires-expression "7.5.8.1 General [expr.prim.req.general]")  
[*splice-expression*](expr.prim.splice#nt:splice-expression "7.5.9 Expression splicing [expr.prim.splice]")

[id-expression:](expr.prim.id.general#nt:id-expression "7.5.5.1 General [expr.prim.id.general]")  
[*unqualified-id*](expr.prim.id.unqual#nt:unqualified-id "7.5.5.2 Unqualified names [expr.prim.id.unqual]")  
[*qualified-id*](expr.prim.id.qual#nt:qualified-id "7.5.5.3 Qualified names [expr.prim.id.qual]")  
[*pack-index-expression*](expr.prim.pack.index#nt:pack-index-expression "7.5.5.4 Pack indexing expression [expr.prim.pack.index]")

[unqualified-id:](expr.prim.id.unqual#nt:unqualified-id "7.5.5.2 Unqualified names [expr.prim.id.unqual]")  
[*identifier*](lex.name#nt:identifier "5.11 Identifiers [lex.name]")  
[*operator-function-id*](over.oper.general#nt:operator-function-id "12.4.1 General [over.oper.general]")  
[*conversion-function-id*](class.conv.fct#nt:conversion-function-id "11.4.8.3 Conversion functions [class.conv.fct]")  
[*literal-operator-id*](over.literal#nt:literal-operator-id "12.6 User-defined literals [over.literal]")  
~ [*type-name*](dcl.type.simple#nt:type-name "9.2.9.3 Simple type specifiers [dcl.type.simple]")  
~ [*computed-type-specifier*](dcl.type.simple#nt:computed-type-specifier "9.2.9.3 Simple type specifiers [dcl.type.simple]")  
[*template-id*](temp.names#nt:template-id "13.3 Names of template specializations [temp.names]")

[qualified-id:](expr.prim.id.qual#nt:qualified-id "7.5.5.3 Qualified names [expr.prim.id.qual]")  
[*nested-name-specifier*](expr.prim.id.qual#nt:nested-name-specifier "7.5.5.3 Qualified names [expr.prim.id.qual]") templateopt [*unqualified-id*](expr.prim.id.unqual#nt:unqualified-id "7.5.5.2 Unqualified names [expr.prim.id.unqual]")

[nested-name-specifier:](expr.prim.id.qual#nt:nested-name-specifier "7.5.5.3 Qualified names [expr.prim.id.qual]")  
::  
[*type-name*](dcl.type.simple#nt:type-name "9.2.9.3 Simple type specifiers [dcl.type.simple]") ::  
[*namespace-name*](namespace.def.general#nt:namespace-name "9.9.2.1 General [namespace.def.general]") ::  
[*computed-type-specifier*](dcl.type.simple#nt:computed-type-specifier "9.2.9.3 Simple type specifiers [dcl.type.simple]") ::  
[*splice-scope-specifier*](expr.prim.id.qual#nt:splice-scope-specifier "7.5.5.3 Qualified names [expr.prim.id.qual]") ::  
[*nested-name-specifier*](expr.prim.id.qual#nt:nested-name-specifier "7.5.5.3 Qualified names [expr.prim.id.qual]") [*identifier*](lex.name#nt:identifier "5.11 Identifiers [lex.name]") ::  
[*nested-name-specifier*](expr.prim.id.qual#nt:nested-name-specifier "7.5.5.3 Qualified names [expr.prim.id.qual]") templateopt [*simple-template-id*](temp.names#nt:simple-template-id "13.3 Names of template specializations [temp.names]") ::

[splice-scope-specifier:](expr.prim.id.qual#nt:splice-scope-specifier "7.5.5.3 Qualified names [expr.prim.id.qual]")  
[*splice-specifier*](basic.splice#nt:splice-specifier "6.6 Splice specifiers [basic.splice]")  
templateopt [*splice-specialization-specifier*](basic.splice#nt:splice-specialization-specifier "6.6 Splice specifiers [basic.splice]")

[pack-index-expression:](expr.prim.pack.index#nt:pack-index-expression "7.5.5.4 Pack indexing expression [expr.prim.pack.index]")  
[*id-expression*](expr.prim.id.general#nt:id-expression "7.5.5.1 General [expr.prim.id.general]") ... [ [*constant-expression*](expr.const#nt:constant-expression "7.7 Constant expressions [expr.const]") ]

[lambda-expression:](expr.prim.lambda.general#nt:lambda-expression "7.5.6.1 General [expr.prim.lambda.general]")  
[*lambda-introducer*](expr.prim.lambda.general#nt:lambda-introducer "7.5.6.1 General [expr.prim.lambda.general]") [*attribute-specifier-seq*](dcl.attr.grammar#nt:attribute-specifier-seq "9.13.1 Attribute syntax and semantics [dcl.attr.grammar]")opt [*lambda-declarator*](expr.prim.lambda.general#nt:lambda-declarator "7.5.6.1 General [expr.prim.lambda.general]") [*compound-statement*](stmt.block#nt:compound-statement "8.4 Compound statement or block [stmt.block]")  
[*lambda-introducer*](expr.prim.lambda.general#nt:lambda-introducer "7.5.6.1 General [expr.prim.lambda.general]") < [*template-parameter-list*](temp.pre#nt:template-parameter-list "13.1 Preamble [temp.pre]") > [*requires-clause*](temp.pre#nt:requires-clause "13.1 Preamble [temp.pre]")opt [*attribute-specifier-seq*](dcl.attr.grammar#nt:attribute-specifier-seq "9.13.1 Attribute syntax and semantics [dcl.attr.grammar]")opt  
 [*lambda-declarator*](expr.prim.lambda.general#nt:lambda-declarator "7.5.6.1 General [expr.prim.lambda.general]") [*compound-statement*](stmt.block#nt:compound-statement "8.4 Compound statement or block [stmt.block]")

[lambda-introducer:](expr.prim.lambda.general#nt:lambda-introducer "7.5.6.1 General [expr.prim.lambda.general]")  
[ [*lambda-capture*](expr.prim.lambda.capture#nt:lambda-capture "7.5.6.3 Captures [expr.prim.lambda.capture]")opt ]

[lambda-declarator:](expr.prim.lambda.general#nt:lambda-declarator "7.5.6.1 General [expr.prim.lambda.general]")  
[*lambda-specifier-seq*](expr.prim.lambda.general#nt:lambda-specifier-seq "7.5.6.1 General [expr.prim.lambda.general]") [*noexcept-specifier*](except.spec#nt:noexcept-specifier "14.5 Exception specifications [except.spec]")opt [*attribute-specifier-seq*](dcl.attr.grammar#nt:attribute-specifier-seq "9.13.1 Attribute syntax and semantics [dcl.attr.grammar]")opt [*trailing-return-type*](dcl.decl.general#nt:trailing-return-type "9.3.1 General [dcl.decl.general]")opt  
 [*function-contract-specifier-seq*](dcl.contract.func#nt:function-contract-specifier-seq "9.4.1 General [dcl.contract.func]")opt  
[*noexcept-specifier*](except.spec#nt:noexcept-specifier "14.5 Exception specifications [except.spec]") [*attribute-specifier-seq*](dcl.attr.grammar#nt:attribute-specifier-seq "9.13.1 Attribute syntax and semantics [dcl.attr.grammar]")opt [*trailing-return-type*](dcl.decl.general#nt:trailing-return-type "9.3.1 General [dcl.decl.general]")opt [*function-contract-specifier-seq*](dcl.contract.func#nt:function-contract-specifier-seq "9.4.1 General [dcl.contract.func]")opt  
[*trailing-return-type*](dcl.decl.general#nt:trailing-return-type "9.3.1 General [dcl.decl.general]")opt [*function-contract-specifier-seq*](dcl.contract.func#nt:function-contract-specifier-seq "9.4.1 General [dcl.contract.func]")opt  
( [*parameter-declaration-clause*](dcl.fct#nt:parameter-declaration-clause "9.3.4.6 Functions [dcl.fct]") ) [*lambda-specifier-seq*](expr.prim.lambda.general#nt:lambda-specifier-seq "7.5.6.1 General [expr.prim.lambda.general]")opt [*noexcept-specifier*](except.spec#nt:noexcept-specifier "14.5 Exception specifications [except.spec]")opt [*attribute-specifier-seq*](dcl.attr.grammar#nt:attribute-specifier-seq "9.13.1 Attribute syntax and semantics [dcl.attr.grammar]")opt  
 [*trailing-return-type*](dcl.decl.general#nt:trailing-return-type "9.3.1 General [dcl.decl.general]")opt [*requires-clause*](temp.pre#nt:requires-clause "13.1 Preamble [temp.pre]")opt [*function-contract-specifier-seq*](dcl.contract.func#nt:function-contract-specifier-seq "9.4.1 General [dcl.contract.func]")opt

[lambda-specifier:](expr.prim.lambda.general#nt:lambda-specifier "7.5.6.1 General [expr.prim.lambda.general]")  
consteval  
constexpr  
mutable  
static

[lambda-specifier-seq:](expr.prim.lambda.general#nt:lambda-specifier-seq "7.5.6.1 General [expr.prim.lambda.general]")  
[*lambda-specifier*](expr.prim.lambda.general#nt:lambda-specifier "7.5.6.1 General [expr.prim.lambda.general]") [*lambda-specifier-seq*](expr.prim.lambda.general#nt:lambda-specifier-seq "7.5.6.1 General [expr.prim.lambda.general]")opt

[lambda-capture:](expr.prim.lambda.capture#nt:lambda-capture "7.5.6.3 Captures [expr.prim.lambda.capture]")  
[*capture-default*](expr.prim.lambda.capture#nt:capture-default "7.5.6.3 Captures [expr.prim.lambda.capture]")  
[*capture-list*](expr.prim.lambda.capture#nt:capture-list "7.5.6.3 Captures [expr.prim.lambda.capture]")  
[*capture-default*](expr.prim.lambda.capture#nt:capture-default "7.5.6.3 Captures [expr.prim.lambda.capture]") , [*capture-list*](expr.prim.lambda.capture#nt:capture-list "7.5.6.3 Captures [expr.prim.lambda.capture]")

[capture-default:](expr.prim.lambda.capture#nt:capture-default "7.5.6.3 Captures [expr.prim.lambda.capture]")  
&  
=

[capture-list:](expr.prim.lambda.capture#nt:capture-list "7.5.6.3 Captures [expr.prim.lambda.capture]")  
[*capture*](expr.prim.lambda.capture#nt:capture "7.5.6.3 Captures [expr.prim.lambda.capture]")  
[*capture-list*](expr.prim.lambda.capture#nt:capture-list "7.5.6.3 Captures [expr.prim.lambda.capture]") , [*capture*](expr.prim.lambda.capture#nt:capture "7.5.6.3 Captures [expr.prim.lambda.capture]")

[capture:](expr.prim.lambda.capture#nt:capture "7.5.6.3 Captures [expr.prim.lambda.capture]")  
[*simple-capture*](expr.prim.lambda.capture#nt:simple-capture "7.5.6.3 Captures [expr.prim.lambda.capture]")  
[*init-capture*](expr.prim.lambda.capture#nt:init-capture "7.5.6.3 Captures [expr.prim.lambda.capture]")

[simple-capture:](expr.prim.lambda.capture#nt:simple-capture "7.5.6.3 Captures [expr.prim.lambda.capture]")  
[*identifier*](lex.name#nt:identifier "5.11 Identifiers [lex.name]") ...opt  
& [*identifier*](lex.name#nt:identifier "5.11 Identifiers [lex.name]") ...opt  
this  
* this

[init-capture:](expr.prim.lambda.capture#nt:init-capture "7.5.6.3 Captures [expr.prim.lambda.capture]")  
...opt [*identifier*](lex.name#nt:identifier "5.11 Identifiers [lex.name]") [*initializer*](dcl.init.general#nt:initializer "9.5.1 General [dcl.init.general]")  
& ...opt [*identifier*](lex.name#nt:identifier "5.11 Identifiers [lex.name]") [*initializer*](dcl.init.general#nt:initializer "9.5.1 General [dcl.init.general]")

[fold-expression:](expr.prim.fold#nt:fold-expression "7.5.7 Fold expressions [expr.prim.fold]")  
( [*cast-expression*](expr.cast#nt:cast-expression "7.6.3 Explicit type conversion (cast notation) [expr.cast]") [*fold-operator*](expr.prim.fold#nt:fold-operator "7.5.7 Fold expressions [expr.prim.fold]") ... )  
( ... [*fold-operator*](expr.prim.fold#nt:fold-operator "7.5.7 Fold expressions [expr.prim.fold]") [*cast-expression*](expr.cast#nt:cast-expression "7.6.3 Explicit type conversion (cast notation) [expr.cast]") )  
( [*cast-expression*](expr.cast#nt:cast-expression "7.6.3 Explicit type conversion (cast notation) [expr.cast]") [*fold-operator*](expr.prim.fold#nt:fold-operator "7.5.7 Fold expressions [expr.prim.fold]") ... [*fold-operator*](expr.prim.fold#nt:fold-operator "7.5.7 Fold expressions [expr.prim.fold]") [*cast-expression*](expr.cast#nt:cast-expression "7.6.3 Explicit type conversion (cast notation) [expr.cast]") )

[fold-operator:](expr.prim.fold#nt:fold-operator "7.5.7 Fold expressions [expr.prim.fold]") one of  
+  - * /  %  ^  &  |  <<  >>   
+= -= *= /= %= ^= &= |= <<= >>= =  
== != <  >  <= >= && || ,  .* ->*

[requires-expression:](expr.prim.req.general#nt:requires-expression "7.5.8.1 General [expr.prim.req.general]")  
requires [*requirement-parameter-list*](expr.prim.req.general#nt:requirement-parameter-list "7.5.8.1 General [expr.prim.req.general]")opt [*requirement-body*](expr.prim.req.general#nt:requirement-body "7.5.8.1 General [expr.prim.req.general]")

[requirement-parameter-list:](expr.prim.req.general#nt:requirement-parameter-list "7.5.8.1 General [expr.prim.req.general]")  
( [*parameter-declaration-clause*](dcl.fct#nt:parameter-declaration-clause "9.3.4.6 Functions [dcl.fct]") )

[requirement-body:](expr.prim.req.general#nt:requirement-body "7.5.8.1 General [expr.prim.req.general]")  
{ [*requirement-seq*](expr.prim.req.general#nt:requirement-seq "7.5.8.1 General [expr.prim.req.general]") }

[requirement-seq:](expr.prim.req.general#nt:requirement-seq "7.5.8.1 General [expr.prim.req.general]")  
[*requirement*](expr.prim.req.general#nt:requirement "7.5.8.1 General [expr.prim.req.general]") [*requirement-seq*](expr.prim.req.general#nt:requirement-seq "7.5.8.1 General [expr.prim.req.general]")opt

[requirement:](expr.prim.req.general#nt:requirement "7.5.8.1 General [expr.prim.req.general]")  
[*simple-requirement*](expr.prim.req.simple#nt:simple-requirement "7.5.8.2 Simple requirements [expr.prim.req.simple]")  
[*type-requirement*](expr.prim.req.type#nt:type-requirement "7.5.8.3 Type requirements [expr.prim.req.type]")  
[*compound-requirement*](expr.prim.req.compound#nt:compound-requirement "7.5.8.4 Compound requirements [expr.prim.req.compound]")  
[*nested-requirement*](expr.prim.req.nested#nt:nested-requirement "7.5.8.5 Nested requirements [expr.prim.req.nested]")

[simple-requirement:](expr.prim.req.simple#nt:simple-requirement "7.5.8.2 Simple requirements [expr.prim.req.simple]")  
[*expression*](expr.comma#nt:expression "7.6.20 Comma operator [expr.comma]") ;

[type-requirement:](expr.prim.req.type#nt:type-requirement "7.5.8.3 Type requirements [expr.prim.req.type]")  
typename [*nested-name-specifier*](expr.prim.id.qual#nt:nested-name-specifier "7.5.5.3 Qualified names [expr.prim.id.qual]")opt [*type-name*](dcl.type.simple#nt:type-name "9.2.9.3 Simple type specifiers [dcl.type.simple]") ;  
typename [*splice-specifier*](basic.splice#nt:splice-specifier "6.6 Splice specifiers [basic.splice]")  
typename [*splice-specialization-specifier*](basic.splice#nt:splice-specialization-specifier "6.6 Splice specifiers [basic.splice]")

[compound-requirement:](expr.prim.req.compound#nt:compound-requirement "7.5.8.4 Compound requirements [expr.prim.req.compound]")  
{ [*expression*](expr.comma#nt:expression "7.6.20 Comma operator [expr.comma]") } noexceptopt [*return-type-requirement*](expr.prim.req.compound#nt:return-type-requirement "7.5.8.4 Compound requirements [expr.prim.req.compound]")opt ;

[return-type-requirement:](expr.prim.req.compound#nt:return-type-requirement "7.5.8.4 Compound requirements [expr.prim.req.compound]")  
-> [*type-constraint*](temp.param#nt:type-constraint "13.2 Template parameters [temp.param]")

[nested-requirement:](expr.prim.req.nested#nt:nested-requirement "7.5.8.5 Nested requirements [expr.prim.req.nested]")  
requires [*constraint-expression*](temp.constr.decl#nt:constraint-expression "13.5.3 Constrained declarations [temp.constr.decl]") ;

[splice-expression:](expr.prim.splice#nt:splice-expression "7.5.9 Expression splicing [expr.prim.splice]")  
[*splice-specifier*](basic.splice#nt:splice-specifier "6.6 Splice specifiers [basic.splice]")  
template [*splice-specifier*](basic.splice#nt:splice-specifier "6.6 Splice specifiers [basic.splice]")  
template [*splice-specialization-specifier*](basic.splice#nt:splice-specialization-specifier "6.6 Splice specifiers [basic.splice]")

[postfix-expression:](expr.post.general#nt:postfix-expression "7.6.1.1 General [expr.post.general]")  
[*primary-expression*](expr.prim.grammar#nt:primary-expression "7.5.1 Grammar [expr.prim.grammar]")  
[*postfix-expression*](expr.post.general#nt:postfix-expression "7.6.1.1 General [expr.post.general]") [ [*expression-list*](expr.post.general#nt:expression-list "7.6.1.1 General [expr.post.general]")opt ]  
[*postfix-expression*](expr.post.general#nt:postfix-expression "7.6.1.1 General [expr.post.general]") ( [*expression-list*](expr.post.general#nt:expression-list "7.6.1.1 General [expr.post.general]")opt )  
[*simple-type-specifier*](dcl.type.simple#nt:simple-type-specifier "9.2.9.3 Simple type specifiers [dcl.type.simple]") ( [*expression-list*](expr.post.general#nt:expression-list "7.6.1.1 General [expr.post.general]")opt )  
[*typename-specifier*](temp.res.general#nt:typename-specifier "13.8.1 General [temp.res.general]") ( [*expression-list*](expr.post.general#nt:expression-list "7.6.1.1 General [expr.post.general]")opt )  
[*simple-type-specifier*](dcl.type.simple#nt:simple-type-specifier "9.2.9.3 Simple type specifiers [dcl.type.simple]") [*braced-init-list*](dcl.init.general#nt:braced-init-list "9.5.1 General [dcl.init.general]")  
[*typename-specifier*](temp.res.general#nt:typename-specifier "13.8.1 General [temp.res.general]") [*braced-init-list*](dcl.init.general#nt:braced-init-list "9.5.1 General [dcl.init.general]")  
[*postfix-expression*](expr.post.general#nt:postfix-expression "7.6.1.1 General [expr.post.general]") . templateopt [*id-expression*](expr.prim.id.general#nt:id-expression "7.5.5.1 General [expr.prim.id.general]")  
[*postfix-expression*](expr.post.general#nt:postfix-expression "7.6.1.1 General [expr.post.general]") . [*splice-expression*](expr.prim.splice#nt:splice-expression "7.5.9 Expression splicing [expr.prim.splice]")  
[*postfix-expression*](expr.post.general#nt:postfix-expression "7.6.1.1 General [expr.post.general]") -> templateopt [*id-expression*](expr.prim.id.general#nt:id-expression "7.5.5.1 General [expr.prim.id.general]")  
[*postfix-expression*](expr.post.general#nt:postfix-expression "7.6.1.1 General [expr.post.general]") -> [*splice-expression*](expr.prim.splice#nt:splice-expression "7.5.9 Expression splicing [expr.prim.splice]")  
[*postfix-expression*](expr.post.general#nt:postfix-expression "7.6.1.1 General [expr.post.general]") ++  
[*postfix-expression*](expr.post.general#nt:postfix-expression "7.6.1.1 General [expr.post.general]") --  
dynamic_cast < [*type-id*](dcl.name#nt:type-id "9.3.2 Type names [dcl.name]") > ( [*expression*](expr.comma#nt:expression "7.6.20 Comma operator [expr.comma]") )  
static_cast < [*type-id*](dcl.name#nt:type-id "9.3.2 Type names [dcl.name]") > ( [*expression*](expr.comma#nt:expression "7.6.20 Comma operator [expr.comma]") )  
reinterpret_cast < [*type-id*](dcl.name#nt:type-id "9.3.2 Type names [dcl.name]") > ( [*expression*](expr.comma#nt:expression "7.6.20 Comma operator [expr.comma]") )  
const_cast < [*type-id*](dcl.name#nt:type-id "9.3.2 Type names [dcl.name]") > ( [*expression*](expr.comma#nt:expression "7.6.20 Comma operator [expr.comma]") )  
typeid ( [*expression*](expr.comma#nt:expression "7.6.20 Comma operator [expr.comma]") )  
typeid ( [*type-id*](dcl.name#nt:type-id "9.3.2 Type names [dcl.name]") )

[expression-list:](expr.post.general#nt:expression-list "7.6.1.1 General [expr.post.general]")  
[*initializer-list*](dcl.init.general#nt:initializer-list "9.5.1 General [dcl.init.general]")

[unary-expression:](expr.unary.general#nt:unary-expression "7.6.2.1 General [expr.unary.general]")  
[*postfix-expression*](expr.post.general#nt:postfix-expression "7.6.1.1 General [expr.post.general]")  
[*unary-operator*](expr.unary.general#nt:unary-operator "7.6.2.1 General [expr.unary.general]") [*cast-expression*](expr.cast#nt:cast-expression "7.6.3 Explicit type conversion (cast notation) [expr.cast]")  
++ [*cast-expression*](expr.cast#nt:cast-expression "7.6.3 Explicit type conversion (cast notation) [expr.cast]")  
-- [*cast-expression*](expr.cast#nt:cast-expression "7.6.3 Explicit type conversion (cast notation) [expr.cast]")  
[*await-expression*](expr.await#nt:await-expression "7.6.2.4 Await [expr.await]")  
sizeof [*unary-expression*](expr.unary.general#nt:unary-expression "7.6.2.1 General [expr.unary.general]")  
sizeof ( [*type-id*](dcl.name#nt:type-id "9.3.2 Type names [dcl.name]") )  
sizeof ... ( [*identifier*](lex.name#nt:identifier "5.11 Identifiers [lex.name]") )  
alignof ( [*type-id*](dcl.name#nt:type-id "9.3.2 Type names [dcl.name]") )  
[*noexcept-expression*](expr.unary.noexcept#nt:noexcept-expression "7.6.2.7 noexcept operator [expr.unary.noexcept]")  
[*new-expression*](expr.new#nt:new-expression "7.6.2.8 New [expr.new]")  
[*delete-expression*](expr.delete#nt:delete-expression "7.6.2.9 Delete [expr.delete]")  
[*reflect-expression*](expr.reflect#nt:reflect-expression "7.6.2.10 The reflection operator [expr.reflect]")

[unary-operator:](expr.unary.general#nt:unary-operator "7.6.2.1 General [expr.unary.general]") one of  
* & + - ! ~

[await-expression:](expr.await#nt:await-expression "7.6.2.4 Await [expr.await]")  
co_await [*cast-expression*](expr.cast#nt:cast-expression "7.6.3 Explicit type conversion (cast notation) [expr.cast]")

[noexcept-expression:](expr.unary.noexcept#nt:noexcept-expression "7.6.2.7 noexcept operator [expr.unary.noexcept]")  
noexcept ( [*expression*](expr.comma#nt:expression "7.6.20 Comma operator [expr.comma]") )

[new-expression:](expr.new#nt:new-expression "7.6.2.8 New [expr.new]")  
::opt new [*new-placement*](expr.new#nt:new-placement "7.6.2.8 New [expr.new]")opt [*new-type-id*](expr.new#nt:new-type-id "7.6.2.8 New [expr.new]") [*new-initializer*](expr.new#nt:new-initializer "7.6.2.8 New [expr.new]")opt   
::opt new [*new-placement*](expr.new#nt:new-placement "7.6.2.8 New [expr.new]")opt ( [*type-id*](dcl.name#nt:type-id "9.3.2 Type names [dcl.name]") ) [*new-initializer*](expr.new#nt:new-initializer "7.6.2.8 New [expr.new]")opt

[new-placement:](expr.new#nt:new-placement "7.6.2.8 New [expr.new]")  
( [*expression-list*](expr.post.general#nt:expression-list "7.6.1.1 General [expr.post.general]") )

[new-type-id:](expr.new#nt:new-type-id "7.6.2.8 New [expr.new]")  
[*type-specifier-seq*](dcl.type.general#nt:type-specifier-seq "9.2.9.1 General [dcl.type.general]") [*new-declarator*](expr.new#nt:new-declarator "7.6.2.8 New [expr.new]")opt

[new-declarator:](expr.new#nt:new-declarator "7.6.2.8 New [expr.new]")  
[*ptr-operator*](dcl.decl.general#nt:ptr-operator "9.3.1 General [dcl.decl.general]") [*new-declarator*](expr.new#nt:new-declarator "7.6.2.8 New [expr.new]")opt   
[*noptr-new-declarator*](expr.new#nt:noptr-new-declarator "7.6.2.8 New [expr.new]")

[noptr-new-declarator:](expr.new#nt:noptr-new-declarator "7.6.2.8 New [expr.new]")  
[ [*expression*](expr.comma#nt:expression "7.6.20 Comma operator [expr.comma]")opt ] [*attribute-specifier-seq*](dcl.attr.grammar#nt:attribute-specifier-seq "9.13.1 Attribute syntax and semantics [dcl.attr.grammar]")opt  
[*noptr-new-declarator*](expr.new#nt:noptr-new-declarator "7.6.2.8 New [expr.new]") [ [*constant-expression*](expr.const#nt:constant-expression "7.7 Constant expressions [expr.const]") ] [*attribute-specifier-seq*](dcl.attr.grammar#nt:attribute-specifier-seq "9.13.1 Attribute syntax and semantics [dcl.attr.grammar]")opt

[new-initializer:](expr.new#nt:new-initializer "7.6.2.8 New [expr.new]")  
( [*expression-list*](expr.post.general#nt:expression-list "7.6.1.1 General [expr.post.general]")opt )  
[*braced-init-list*](dcl.init.general#nt:braced-init-list "9.5.1 General [dcl.init.general]")

[delete-expression:](expr.delete#nt:delete-expression "7.6.2.9 Delete [expr.delete]")  
::opt delete [*cast-expression*](expr.cast#nt:cast-expression "7.6.3 Explicit type conversion (cast notation) [expr.cast]")  
::opt delete [ ] [*cast-expression*](expr.cast#nt:cast-expression "7.6.3 Explicit type conversion (cast notation) [expr.cast]")

[reflect-expression:](expr.reflect#nt:reflect-expression "7.6.2.10 The reflection operator [expr.reflect]")  
^^ ::  
^^ [*reflection-name*](expr.reflect#nt:reflection-name "7.6.2.10 The reflection operator [expr.reflect]")  
^^ [*type-id*](dcl.name#nt:type-id "9.3.2 Type names [dcl.name]")  
^^ [*id-expression*](expr.prim.id.general#nt:id-expression "7.5.5.1 General [expr.prim.id.general]")

[reflection-name:](expr.reflect#nt:reflection-name "7.6.2.10 The reflection operator [expr.reflect]")  
[*nested-name-specifier*](expr.prim.id.qual#nt:nested-name-specifier "7.5.5.3 Qualified names [expr.prim.id.qual]")opt [*identifier*](lex.name#nt:identifier "5.11 Identifiers [lex.name]")  
[*nested-name-specifier*](expr.prim.id.qual#nt:nested-name-specifier "7.5.5.3 Qualified names [expr.prim.id.qual]") template [*identifier*](lex.name#nt:identifier "5.11 Identifiers [lex.name]")

[cast-expression:](expr.cast#nt:cast-expression "7.6.3 Explicit type conversion (cast notation) [expr.cast]")  
[*unary-expression*](expr.unary.general#nt:unary-expression "7.6.2.1 General [expr.unary.general]")  
( [*type-id*](dcl.name#nt:type-id "9.3.2 Type names [dcl.name]") ) [*cast-expression*](expr.cast#nt:cast-expression "7.6.3 Explicit type conversion (cast notation) [expr.cast]")

[pm-expression:](expr.mptr.oper#nt:pm-expression "7.6.4 Pointer-to-member operators [expr.mptr.oper]")  
[*cast-expression*](expr.cast#nt:cast-expression "7.6.3 Explicit type conversion (cast notation) [expr.cast]")  
[*pm-expression*](expr.mptr.oper#nt:pm-expression "7.6.4 Pointer-to-member operators [expr.mptr.oper]") .* [*cast-expression*](expr.cast#nt:cast-expression "7.6.3 Explicit type conversion (cast notation) [expr.cast]")  
[*pm-expression*](expr.mptr.oper#nt:pm-expression "7.6.4 Pointer-to-member operators [expr.mptr.oper]") ->* [*cast-expression*](expr.cast#nt:cast-expression "7.6.3 Explicit type conversion (cast notation) [expr.cast]")

[multiplicative-expression:](expr.mul#nt:multiplicative-expression "7.6.5 Multiplicative operators [expr.mul]")  
[*pm-expression*](expr.mptr.oper#nt:pm-expression "7.6.4 Pointer-to-member operators [expr.mptr.oper]")  
[*multiplicative-expression*](expr.mul#nt:multiplicative-expression "7.6.5 Multiplicative operators [expr.mul]") * [*pm-expression*](expr.mptr.oper#nt:pm-expression "7.6.4 Pointer-to-member operators [expr.mptr.oper]")  
[*multiplicative-expression*](expr.mul#nt:multiplicative-expression "7.6.5 Multiplicative operators [expr.mul]") / [*pm-expression*](expr.mptr.oper#nt:pm-expression "7.6.4 Pointer-to-member operators [expr.mptr.oper]")  
[*multiplicative-expression*](expr.mul#nt:multiplicative-expression "7.6.5 Multiplicative operators [expr.mul]") % [*pm-expression*](expr.mptr.oper#nt:pm-expression "7.6.4 Pointer-to-member operators [expr.mptr.oper]")

[additive-expression:](expr.add#nt:additive-expression "7.6.6 Additive operators [expr.add]")  
[*multiplicative-expression*](expr.mul#nt:multiplicative-expression "7.6.5 Multiplicative operators [expr.mul]")  
[*additive-expression*](expr.add#nt:additive-expression "7.6.6 Additive operators [expr.add]") + [*multiplicative-expression*](expr.mul#nt:multiplicative-expression "7.6.5 Multiplicative operators [expr.mul]")  
[*additive-expression*](expr.add#nt:additive-expression "7.6.6 Additive operators [expr.add]") - [*multiplicative-expression*](expr.mul#nt:multiplicative-expression "7.6.5 Multiplicative operators [expr.mul]")

[shift-expression:](expr.shift#nt:shift-expression "7.6.7 Shift operators [expr.shift]")  
[*additive-expression*](expr.add#nt:additive-expression "7.6.6 Additive operators [expr.add]")  
[*shift-expression*](expr.shift#nt:shift-expression "7.6.7 Shift operators [expr.shift]") << [*additive-expression*](expr.add#nt:additive-expression "7.6.6 Additive operators [expr.add]")  
[*shift-expression*](expr.shift#nt:shift-expression "7.6.7 Shift operators [expr.shift]") >> [*additive-expression*](expr.add#nt:additive-expression "7.6.6 Additive operators [expr.add]")

[compare-expression:](expr.spaceship#nt:compare-expression "7.6.8 Three-way comparison operator [expr.spaceship]")  
[*shift-expression*](expr.shift#nt:shift-expression "7.6.7 Shift operators [expr.shift]")  
[*compare-expression*](expr.spaceship#nt:compare-expression "7.6.8 Three-way comparison operator [expr.spaceship]") <=> [*shift-expression*](expr.shift#nt:shift-expression "7.6.7 Shift operators [expr.shift]")

[relational-expression:](expr.rel#nt:relational-expression "7.6.9 Relational operators [expr.rel]")  
[*compare-expression*](expr.spaceship#nt:compare-expression "7.6.8 Three-way comparison operator [expr.spaceship]")  
[*relational-expression*](expr.rel#nt:relational-expression "7.6.9 Relational operators [expr.rel]") < [*compare-expression*](expr.spaceship#nt:compare-expression "7.6.8 Three-way comparison operator [expr.spaceship]")  
[*relational-expression*](expr.rel#nt:relational-expression "7.6.9 Relational operators [expr.rel]") > [*compare-expression*](expr.spaceship#nt:compare-expression "7.6.8 Three-way comparison operator [expr.spaceship]")  
[*relational-expression*](expr.rel#nt:relational-expression "7.6.9 Relational operators [expr.rel]") <= [*compare-expression*](expr.spaceship#nt:compare-expression "7.6.8 Three-way comparison operator [expr.spaceship]")  
[*relational-expression*](expr.rel#nt:relational-expression "7.6.9 Relational operators [expr.rel]") >= [*compare-expression*](expr.spaceship#nt:compare-expression "7.6.8 Three-way comparison operator [expr.spaceship]")

[equality-expression:](expr.eq#nt:equality-expression "7.6.10 Equality operators [expr.eq]")  
[*relational-expression*](expr.rel#nt:relational-expression "7.6.9 Relational operators [expr.rel]")  
[*equality-expression*](expr.eq#nt:equality-expression "7.6.10 Equality operators [expr.eq]") == [*relational-expression*](expr.rel#nt:relational-expression "7.6.9 Relational operators [expr.rel]")  
[*equality-expression*](expr.eq#nt:equality-expression "7.6.10 Equality operators [expr.eq]") != [*relational-expression*](expr.rel#nt:relational-expression "7.6.9 Relational operators [expr.rel]")

[and-expression:](expr.bit.and#nt:and-expression "7.6.11 Bitwise AND operator [expr.bit.and]")  
[*equality-expression*](expr.eq#nt:equality-expression "7.6.10 Equality operators [expr.eq]")  
[*and-expression*](expr.bit.and#nt:and-expression "7.6.11 Bitwise AND operator [expr.bit.and]") & [*equality-expression*](expr.eq#nt:equality-expression "7.6.10 Equality operators [expr.eq]")

[exclusive-or-expression:](expr.xor#nt:exclusive-or-expression "7.6.12 Bitwise exclusive OR operator [expr.xor]")  
[*and-expression*](expr.bit.and#nt:and-expression "7.6.11 Bitwise AND operator [expr.bit.and]")  
[*exclusive-or-expression*](expr.xor#nt:exclusive-or-expression "7.6.12 Bitwise exclusive OR operator [expr.xor]") ^ [*and-expression*](expr.bit.and#nt:and-expression "7.6.11 Bitwise AND operator [expr.bit.and]")

[inclusive-or-expression:](expr.or#nt:inclusive-or-expression "7.6.13 Bitwise inclusive OR operator [expr.or]")  
[*exclusive-or-expression*](expr.xor#nt:exclusive-or-expression "7.6.12 Bitwise exclusive OR operator [expr.xor]")  
[*inclusive-or-expression*](expr.or#nt:inclusive-or-expression "7.6.13 Bitwise inclusive OR operator [expr.or]") | [*exclusive-or-expression*](expr.xor#nt:exclusive-or-expression "7.6.12 Bitwise exclusive OR operator [expr.xor]")

[logical-and-expression:](expr.log.and#nt:logical-and-expression "7.6.14 Logical AND operator [expr.log.and]")  
[*inclusive-or-expression*](expr.or#nt:inclusive-or-expression "7.6.13 Bitwise inclusive OR operator [expr.or]")  
[*logical-and-expression*](expr.log.and#nt:logical-and-expression "7.6.14 Logical AND operator [expr.log.and]") && [*inclusive-or-expression*](expr.or#nt:inclusive-or-expression "7.6.13 Bitwise inclusive OR operator [expr.or]")

[logical-or-expression:](expr.log.or#nt:logical-or-expression "7.6.15 Logical OR operator [expr.log.or]")  
[*logical-and-expression*](expr.log.and#nt:logical-and-expression "7.6.14 Logical AND operator [expr.log.and]")  
[*logical-or-expression*](expr.log.or#nt:logical-or-expression "7.6.15 Logical OR operator [expr.log.or]") || [*logical-and-expression*](expr.log.and#nt:logical-and-expression "7.6.14 Logical AND operator [expr.log.and]")

[conditional-expression:](expr.cond#nt:conditional-expression "7.6.16 Conditional operator [expr.cond]")  
[*logical-or-expression*](expr.log.or#nt:logical-or-expression "7.6.15 Logical OR operator [expr.log.or]")  
[*logical-or-expression*](expr.log.or#nt:logical-or-expression "7.6.15 Logical OR operator [expr.log.or]") ? [*expression*](expr.comma#nt:expression "7.6.20 Comma operator [expr.comma]") : [*assignment-expression*](expr.assign#nt:assignment-expression "7.6.19 Assignment and compound assignment operators [expr.assign]")

[yield-expression:](expr.yield#nt:yield-expression "7.6.17 Yielding a value [expr.yield]")  
co_yield [*assignment-expression*](expr.assign#nt:assignment-expression "7.6.19 Assignment and compound assignment operators [expr.assign]")  
co_yield [*braced-init-list*](dcl.init.general#nt:braced-init-list "9.5.1 General [dcl.init.general]")

[throw-expression:](expr.throw#nt:throw-expression "7.6.18 Throwing an exception [expr.throw]")  
throw [*assignment-expression*](expr.assign#nt:assignment-expression "7.6.19 Assignment and compound assignment operators [expr.assign]")opt

[assignment-expression:](expr.assign#nt:assignment-expression "7.6.19 Assignment and compound assignment operators [expr.assign]")  
[*conditional-expression*](expr.cond#nt:conditional-expression "7.6.16 Conditional operator [expr.cond]")  
[*yield-expression*](expr.yield#nt:yield-expression "7.6.17 Yielding a value [expr.yield]")  
[*throw-expression*](expr.throw#nt:throw-expression "7.6.18 Throwing an exception [expr.throw]")  
[*logical-or-expression*](expr.log.or#nt:logical-or-expression "7.6.15 Logical OR operator [expr.log.or]") [*assignment-operator*](expr.assign#nt:assignment-operator "7.6.19 Assignment and compound assignment operators [expr.assign]") [*initializer-clause*](dcl.init.general#nt:initializer-clause "9.5.1 General [dcl.init.general]")

[assignment-operator:](expr.assign#nt:assignment-operator "7.6.19 Assignment and compound assignment operators [expr.assign]") one of  
= *= /= %= += -= >>= <<= &= ^= |=

[expression:](expr.comma#nt:expression "7.6.20 Comma operator [expr.comma]")  
[*assignment-expression*](expr.assign#nt:assignment-expression "7.6.19 Assignment and compound assignment operators [expr.assign]")  
[*expression*](expr.comma#nt:expression "7.6.20 Comma operator [expr.comma]") , [*assignment-expression*](expr.assign#nt:assignment-expression "7.6.19 Assignment and compound assignment operators [expr.assign]")

[constant-expression:](expr.const#nt:constant-expression "7.7 Constant expressions [expr.const]")  
[*conditional-expression*](expr.cond#nt:conditional-expression "7.6.16 Conditional operator [expr.cond]")
