progunit: optstmtlist
progunit ::= optstmtlist
no referencesoptstmtlist: stmt optstmtlist changeprotlevel stmt
optstmtlist
         ::= ( ( stmt | optstmtlist changeprotlevel ) stmt* )?
referenced by: block caselist classdefn namespacedefn optstmtlist progunit stmt: apidecor exptype varattrib vardecl varinit templatespecifier friend classspecifier typeidentifier optapidecor identifier friend typeidentifier templatespecifier tknUsing name = vartype functionptrtype funcobj classdefn identifier ; vardeclliststmt enumdefnstmt enumfwddecl typedefnamestmt typedefliststmt classdefnstmt namespacedefn doccomment exprstmt if ( expr varinit ) stmt else whileblock dowhileblock forblock forrangeblock funcpointerdecl funcdeclstmt funcdefn ctordeclstmt functype templatespecifier ctordecl identifier :: name name < templatearglist > :: name ( paramlist ) optfuncthrowspec : meminit blob , meminit templatespecifier functype dtordecl identifier :: name name < templatearglist > :: ~ name ( ) block dtordeclstmt typeconverterstmt externcblock funcptrtypedef preprocessor switchstmt try block catchblock usingnamespacedecl namespacealias macrocall ; apidecortokensq macrocall asm blob label
           | vardeclliststmt
           | enumdefnstmt
           | enumfwddecl
           | typedefnamestmt
           | typedefliststmt
           | classdefnstmt
           | namespacedefn
           | doccomment
           | exprstmt
           | 'if' '(' ( expr | varinit ) ')' stmt ( 'else' stmt )*
           | whileblock
           | dowhileblock
           | forblock
           | forrangeblock
           | funcpointerdecl
           | funcdeclstmt
           | funcdefn
           | ctordeclstmt
           | ( ( functype | templatespecifier )* ( ctordecl | ( identifier '::' name | name ( '<' templatearglist '>' )? ) '::' name '(' paramlist ')' optfuncthrowspec ) ( ':' ( meminit | blob ) )? ( ',' meminit )* | ( templatespecifier | functype )* ( dtordecl | ( identifier '::' name | name ( '<' templatearglist '>' )? ) '::' '~' name '(' ')' ) )? block
           | dtordeclstmt
           | typeconverterstmt
           | externcblock
           | funcptrtypedef
           | preprocessor
           | switchstmt
           | 'try' block catchblock+
           | usingnamespacedecl
           | namespacealias
           | macrocall ';'?
           | apidecortokensq macrocall
           | 'asm'
           | blob
           | label
referenced by: dowhileblock forblock forrangeblock optstmtlist stmt whileblock label: name :
label    ::= name ':'
referenced by: stmt preprocessor: define undef include import hashif hasherror hashwarning pragma
         ::= define
           | undef
           | include
           | import
           | hashif
           | hasherror
           | hashwarning
           | pragma
referenced by: enumitem stmt macrocall: tknMacro ( expr )
         ::= tknMacro ( '(' expr? ')' )*
referenced by: enumitem identifier stmt switchstmt: switch ( expr ) { caselist }
         ::= 'switch' '(' expr ')' '{' caselist '}'
referenced by: stmt caselist: caselist case expr default : optstmtlist doccommentstr doccommentstr caselist
caselist ::= ( caselist ( ( 'case' expr | 'default' ) ':' optstmtlist | doccommentstr ) | doccommentstr caselist )?
referenced by: caselist switchstmt block: doccomment { optstmtlist }
block    ::= doccomment* '{' optstmtlist '}'
referenced by: catchblock externcblock funcdefn lambda stmt typeconverterstmt whileblock: while ( expr varinit ) stmt
         ::= 'while' '(' ( expr | varinit ) ')' stmt
referenced by: stmt dowhileblock: do stmt while ( expr )
         ::= 'do' stmt 'while' '(' expr ')'
referenced by: stmt forblock: for ( optexpr varinit vardecllist ; optexpr ; optexpr ) stmt
forblock ::= 'for' '(' ( optexpr | varinit | vardecllist ) ';' optexpr ';' optexpr ')' stmt
referenced by: stmt forrangeblock: for ( vardecl : expr ) stmt
         ::= 'for' '(' vardecl ':' expr ')' stmt
referenced by: stmt catchblock: catch ( vartype optname ) block
         ::= 'catch' '(' vartype optname ')' block
referenced by: stmt optexpr: expr exprlist
optexpr  ::= ( expr | exprlist )?
referenced by: forblock define: # define name name tknNumber tknStrLit tknCharLit tknPreProDef
define   ::= '#' 'define' name ( name | tknNumber | tknStrLit | tknCharLit | tknPreProDef )?
referenced by: preprocessor undef: # undef name
undef    ::= '#' 'undef' name
referenced by: preprocessor include: # include tknStrLit tknStdHdrInclude
include  ::= '#' 'include' ( tknStrLit | tknStdHdrInclude )
referenced by: preprocessor import: # import tknStrLit tknStdHdrInclude
import   ::= '#' 'import' ( tknStrLit | tknStdHdrInclude )
referenced by: preprocessor hashif: # if tknElIf tknPreProDef tknIfDef name tknIfNDef name tknApiDecor else tknEndIf
hashif   ::= '#' ( ( 'if' | tknElIf ) tknPreProDef | tknIfDef name | tknIfNDef ( name | tknApiDecor ) | 'else' | tknEndIf )
referenced by: preprocessor hasherror: # error strlit
         ::= '#' 'error' strlit?
referenced by: preprocessor hashwarning: # warning strlit
         ::= '#' 'warning' strlit?
referenced by: preprocessor pragma: # pragma tknPreProDef
pragma   ::= '#' 'pragma' tknPreProDef
referenced by: preprocessor doccomment: doccommentstr
         ::= doccommentstr
referenced by: block enumitem optcomment opttypemodifier param stmt templatearglist doccommentstr: tknFreeStandingBlockComment tknFreeStandingLineComment referenced by: caselist doccomment exprlist exprorlist identifier: name identifier :: identifier tknEllipsis id templidentifier override macrocall templqualifiedid
         ::= name
           | identifier ( '::' identifier | tknEllipsis )
           | id
           | templidentifier
           | 'override'
           | macrocall
           | templqualifiedid
referenced by: classdefn ctordecl expr funcptrortype functhrowspec identifier meminit namespacealias operfuncname optidentifier stmt templidentifier typeconverter typeidentifier usingnamespacedecl varidentifier vartype typeidentifier: tknNumSignSpec tknInteger tknFloat tknDouble char tknNumSignSpec :: tknEnum identifier typeidentifier :: typeidentifier tknEllipsis auto void typename identifier tknEllipsis class tknEllipsis decltype ( expr )
         ::= ( '::' | tknEnum )? identifier
           | typeidentifier ( '::' typeidentifier | tknEllipsis )
           | tknNumSignSpec* ( tknInteger | tknFloat | tknDouble | 'char' | tknNumSignSpec )
           | 'auto'
           | 'void'
           | 'typename' ( identifier | tknEllipsis )
           | 'class'? tknEllipsis
           | 'decltype' '(' expr ')'
referenced by: classdefn enumdefn enumfwddecl expr funcname funcobjstr operfuncname stmt typeidentifier varinit vartype templidentifier: identifier < templatearglist , expr != expr expr != expr >
         ::= identifier '<' ( templatearglist ( ',' expr '!=' expr )? | expr '!=' expr ) '>'
referenced by: identifier templqualifiedid templqualifiedid: template templidentifier
         ::= 'template' templidentifier
referenced by: identifier name: tknName
name     ::= tknName
referenced by: apidecor define dtordecl enumdefn enumfwddecl enumitem expr hashif identifier label namespacealias objcarg operfuncname optname stmt templateparam undef vardecllist varidentifier varinit id: tknID
id       ::= tknID
referenced by: identifier optname: name
optname  ::= name?
referenced by: catchblock enumdefn funcptrortype templateparam optidentifier: identifier
         ::= identifier?
referenced by: namespacedefn enumitem: name = expr doccomment preprocessor macrocall blob
enumitem ::= name ( '=' expr )?
           | doccomment
           | preprocessor
           | macrocall
           | blob
referenced by: enumitemlist blob: tknBlob
blob     ::= tknBlob
referenced by: enumitem stmt enumitemlist: enumitem , enumitem
         ::= ( enumitem | ',' enumitem? )*
referenced by: enumdefn enumdefn: tknEnum optname : typeidentifier class optapidecor name : typeidentifier { enumitemlist } typedef tknEnum optapidecor optname { enumitemlist } name
           | 'typedef' tknEnum optapidecor optname '{' enumitemlist '}' name
referenced by: enumdefnstmt vartype enumdefnstmt: enumdefn ;
         ::= enumdefn ';'
referenced by: stmt enumfwddecl: tknEnum name : typeidentifier class name : typeidentifier ;
         ::= tknEnum ( name ':' typeidentifier | 'class' name ( ':' typeidentifier )? ) ';'
referenced by: stmt funcptrtypedef: typedef functionpointer ;
         ::= 'typedef' functionpointer ';'
referenced by: stmt typedefnamestmt: typedefname ;
         ::= typedefname ';'
referenced by: stmt typedefliststmt: typedeflist ;
         ::= typedeflist ';'
referenced by: stmt typedeflist: typedef vardecllist
         ::= 'typedef' vardecllist
referenced by: typedefliststmt typedefname: typedef vardecl
         ::= 'typedef' vardecl
referenced by: typedefnamestmt namespacealias: namespace name = identifier ;
         ::= 'namespace' name '=' identifier ';'
referenced by: stmt usingnamespacedecl: tknUsing namespace identifier ;
         ::= tknUsing 'namespace' identifier ';'
referenced by: stmt vardeclliststmt: exptype vardecllist ;
         ::= exptype? vardecllist ';'
referenced by: stmt vardecllist: optfunctype varinit , opttypemodifier name optvarassign vardecl , opttypemodifier name optvarassign [ expr ] : expr , opttypemodifier name optvarassign : expr
         ::= optfunctype ( varinit ',' opttypemodifier name optvarassign | vardecl ',' opttypemodifier name ( optvarassign | '[' expr ']' | ':' expr ) ) ( ',' opttypemodifier name optvarassign ( ':' expr )? )*
referenced by: forblock typedeflist vardeclliststmt varinit: constexpr vardecl ( typeidentifier * * & & && name ) ) varassign
varinit  ::= 'constexpr'* vardecl ( '(' ( typeidentifier ( ( '*' ( '*' | '&' )? | '&' | '&&' ) name | ')' ) | ')' ) | varassign )
referenced by: forblock param stmt vardecllist whileblock varassign: = expr ( exprorlist ) { funcargs }
         ::= '=' expr
           | '(' exprorlist ')'
           | '{' funcargs '}'
referenced by: optvarassign varinit optvarassign: varassign
         ::= varassign?
referenced by: vardecllist vardecl: vartype apidecor varidentifier functionpointer vardecl [ expr ] : expr templatespecifier varattrib vardecl
           | functionpointer
           | vardecl ( '[' expr? ']' | ':' expr )
           | ( templatespecifier | varattrib ) vardecl
referenced by: forrangeblock param stmt typedefname vardecl vardecllist varinit vartype: attribspecifiers typeidentifier struct optapidecor union class optapidecor identifier opttypemodifier typeidentifier opttypemodifier typeidentifier :: typemodifier functionptrtype classdefn enumdefn typemodifier varattrib vartype vartype tknEllipsis
           | typeidentifier ( opttypemodifier | typeidentifier '::' typemodifier )
           | functionptrtype
           | ( classdefn | enumdefn ) typemodifier?
           | varattrib vartype
           | vartype tknEllipsis
referenced by: catchblock expr funcdecl funcobj funcptrortype lambda param stmt templatearg templateparam typeconverter vardecl vartype varidentifier: identifier final ( & * * name )
         ::= identifier
           | 'final'
           | '(' ( '&' | '*' '*'? ) name ')'
referenced by: vardecl opttypemodifier: doccomment typemodifier
         ::= doccomment* typemodifier?
referenced by: expr vardecllist vartype typemodifier: const * & &&
         ::= ( 'const' | '*' | '&' | '&&' )+
referenced by: opttypemodifier vartype exptype: static extern tknExternC
exptype  ::= 'static'
           | 'extern'
           | tknExternC
referenced by: functype stmt vardeclliststmt varattrib: const volatile mutable constexpr
         ::= 'const'
           | 'volatile'
           | 'mutable'
           | 'constexpr'
referenced by: stmt vardecl vartype typeconverter: identifier :: operator vartype ( optvoid ) functype apidecor templatespecifier typeconverter typeconverter const
         ::= ( identifier '::' )? 'operator' vartype '(' optvoid ')'
           | ( functype | apidecor | templatespecifier ) typeconverter
           | typeconverter 'const'
referenced by: typeconverter typeconverterstmt typeconverterstmt: typeconverter ; block
         ::= typeconverter ( ';' | block )
referenced by: stmt funcdeclstmt: funcdecl ;
         ::= funcdecl ';'
referenced by: stmt funcdefn: funcdecl block referenced by: stmt lambda: [ lambdacapture ] lambdaparams -> vartype block
lambda   ::= '[' lambdacapture ']' lambdaparams ( '->' vartype )? block
referenced by: expr lambdaparams: ( paramlist )
         ::= ( '(' paramlist ')' )?
referenced by: lambda funcptrortype: functype vartype ( optapidecor identifier :: * vartype ( optapidecor identifier :: * * apidecor optname ) ( paramlist ) apidecor funcptrortype funcptrortype optfuncattrib
         ::= ( functype vartype '(' optapidecor ( identifier '::' )? '*' | vartype '(' ( optapidecor ( identifier '::' )? '*' | '*' apidecor ) ) optname ')' '(' paramlist ')'
           | apidecor funcptrortype
           | funcptrortype optfuncattrib
referenced by: funcptrortype functionpointer functionptrtype param functionpointer: funcptrortype
         ::= funcptrortype
referenced by: funcpointerdecl funcptrtypedef templateparam vardecl functionptrtype: funcptrortype
         ::= funcptrortype
referenced by: stmt vartype funcobj: vartype optapidecor ( paramlist ) referenced by: stmt funcpointerdecl: functionpointer ;
         ::= functionpointer ';'
referenced by: stmt funcdecldata: funcname ( paramlist ) optfuncattrib
         ::= funcname '(' paramlist ')' optfuncattrib?
referenced by: funcdecl funcdecl: vartype apidecor constexpr funcdecldata auto constexpr funcdecldata -> vartype constexpr apidecor templatespecifier functype funcdecl funcdecl = delete default functhrowspec
funcdecl ::= vartype ( apidecor | 'constexpr' )? funcdecldata
           | 'auto' 'constexpr'? funcdecldata '->' vartype
           | ( 'constexpr' | apidecor | templatespecifier | functype ) funcdecl
           | funcdecl ( '=' ( 'delete' | 'default' ) | functhrowspec )
referenced by: funcdecl funcdeclstmt funcdefn funcobjstr: typeidentifier optapidecor ( paramlist )
         ::= typeidentifier optapidecor '(' paramlist ')'
referenced by: templatearg funcname: :: operfuncname typeidentifier final
           | typeidentifier
           | 'final'
referenced by: expr funcdecldata rshift: > >
rshift   ::= '>' '>'
referenced by: expr operfuncname: operator + - * / % ^ & | ~ ! = < > += -= *= /= %= ^= &= |= << >> <<= >>= == != <= >= <=> && || ++ -- , -> ->* ( ) [ ] new delete [ ] typeidentifier * tknStrLit name identifier :: operfuncname operfuncname < templatearglist >
         ::= 'operator' ( '+' | '-' | '*' | '/' | '%' | '^' | '&' | '|' | '~' | '!' | '=' | '<' | '>' | '+=' | '-=' | '*=' | '/=' | '%=' | '^=' | '&=' | '|=' | '<<' | '>>' | '<<=' | '>>=' | '==' | '!=' | '<=' | '>=' | '<=>' | '&&' | '||' | '++' | '--' | ',' | '->' | '->*' | '(' ')' | '[' ']' | ( 'new' | 'delete' ) ( '[' ']' )? | typeidentifier '*'? | tknStrLit name )
           | identifier '::' operfuncname
           | operfuncname '<' templatearglist '>'
referenced by: expr funcname operfuncname paramlist: param , param
         ::= param? ( ',' param )*
referenced by: ctordecl funcdecldata funcobj funcobjstr funcptrortype lambdaparams stmt param: doccomment varinit vartype = expr [ expr ] vardecl funcptrortype
param    ::= doccomment* ( varinit | vartype ( '=' expr | '[' expr? ']' )? | vardecl | funcptrortype )
referenced by: paramlist templatearg: vartype funcobjstr expr
         ::= ( vartype | funcobjstr | expr )?
referenced by: templatearglist templatearglist: templatearg doccomment ,
         ::= templatearg ( ',' doccomment? templatearg )*
referenced by: operfuncname stmt templidentifier functype: exptype inline virtual explicit friend constexpr
           | 'inline'
           | 'virtual'
           | 'explicit'
           | 'friend'
           | 'constexpr'
referenced by: ctordecl dtordecl funcdecl funcptrortype optfunctype stmt typeconverter optfunctype: functype
         ::= functype?
referenced by: vardecllist optfuncattrib: const override final noexcept = tknNumber tknMacro const override final noexcept = tknNumber
         ::= ( 'const' | 'override' | 'final' | 'noexcept' | '=' tknNumber | tknMacro ) ( 'const' | 'override' | 'final' | 'noexcept' | '=' tknNumber )*
referenced by: dtordecl funcdecldata funcptrortype optfuncthrowspec: functhrowspec
         ::= functhrowspec?
referenced by: stmt functhrowspec: throw ( identifier , identifier )
         ::= 'throw' '(' identifier? ( ',' identifier )* ')'
referenced by: ctordecl dtordecl funcdecl optfuncthrowspec ctordeclstmt: ctordecl ;
         ::= ctordecl ';'
referenced by: stmt ctordecl: identifier ( paramlist ) functype templatespecifier apidecor ctordecl ctordecl = delete default functhrowspec noexcept
           | ( functype | templatespecifier | apidecor ) ctordecl
           | ctordecl ( '=' ( 'delete' | 'default' ) | functhrowspec | 'noexcept' )
referenced by: ctordecl ctordeclstmt stmt meminit: identifier ( exprorlist ) { exprorlist }
meminit  ::= identifier ( '(' exprorlist? ')' | '{' exprorlist? '}' )
referenced by: stmt dtordeclstmt: dtordecl ;
         ::= dtordecl ';'
referenced by: stmt dtordecl: ~ name ( optvoid ) apidecor functype dtordecl dtordecl optfuncattrib = tknNumber delete default functhrowspec
dtordecl ::= '~' name '(' optvoid ')'
           | ( apidecor | functype ) dtordecl
           | dtordecl ( optfuncattrib | '=' ( tknNumber | 'delete' | 'default' ) | functhrowspec )
referenced by: dtordecl dtordeclstmt stmt optvoid: void
optvoid  ::= 'void'?
referenced by: dtordecl typeconverter optcomment: doccomment
         ::= doccomment?
referenced by: classdefn classdefnstmt: classdefn ;
         ::= classdefn ';'
referenced by: stmt attribspecifier: [ [ expr ] ]
         ::= '[' '[' expr ']' ']'
referenced by: attribspecifiers optattribspecifiers: attribspecifiers
         ::= attribspecifiers?
referenced by: classdefn attribspecifiers: attribspecifier
         ::= attribspecifier+
referenced by: optattribspecifiers vartype classdefn: templatespecifier classspecifier optapidecor optattribspecifiers identifier optfinal optattribspecifiers : protlevel optinherittype optinherittype protlevel typeidentifier , protlevel optinherittype optinherittype protlevel typeidentifier optcomment { optstmtlist } referenced by: classdefnstmt stmt vartype namespacedefn: namespace optidentifier { optstmtlist }
         ::= 'namespace' optidentifier '{' optstmtlist '}'
referenced by: stmt optfinal: final
optfinal ::= 'final'?
referenced by: classdefn protlevel: tknPublic tknProtected tknPrivate
         ::= ( tknPublic | tknProtected | tknPrivate )?
referenced by: classdefn optinherittype: virtual
         ::= 'virtual'?
referenced by: classdefn classspecifier: class struct union
         ::= 'class'
           | 'struct'
           | 'union'
referenced by: classdefn stmt templatespecifier: template < templateparam , templateparam >
         ::= 'template' '<' templateparam? ( ',' templateparam )* '>'
referenced by: classdefn ctordecl funcdecl stmt typeconverter vardecl templateparam: typename optname = vartype name , = > class optname = vartype name , > vartype name functionpointer = expr
         ::= 'typename' ( optname ( '=' vartype )? | name ( ',' | '=' | '>' ) )
           | 'class' ( optname ( '=' vartype )? | name ( ',' | '>' ) )
           | ( vartype name? | functionpointer ) ( '=' expr )?
referenced by: templatespecifier optapidecor: apidecor
         ::= apidecor?
referenced by: classdefn enumdefn funcobj funcobjstr funcptrortype stmt vartype apidecor: apidecortokensq ( name tknNumber strlit )
apidecor ::= apidecortokensq ( '(' ( name | tknNumber | strlit ) ')' )?
referenced by: ctordecl dtordecl funcdecl funcptrortype optapidecor stmt typeconverter vardecl apidecortokensq: tknApiDecor ( strlit ) tknApiDecor
         ::= tknApiDecor ( '(' strlit ')' )? tknApiDecor*
referenced by: apidecor stmt changeprotlevel: tknPublic tknProtected tknPrivate :
         ::= ( tknPublic | tknProtected | tknPrivate ) ':'
referenced by: optstmtlist externcblock: tknExternC block
         ::= tknExternC block
referenced by: stmt strlit: tknStrLit
strlit   ::= tknStrLit+
referenced by: apidecor apidecortokensq expr hasherror hashwarning expr: strlit tknCharLit tknNumber + tknNumber identifier { exprlist } { exprlist , } { exprorlist } { exprorlist , } { } - expr ~ expr ! expr * expr & expr & operfuncname ++ expr expr ++ -- expr expr -- expr + expr expr - expr expr * expr expr / expr expr % expr expr & expr expr | expr expr ^ expr expr = expr expr < expr expr > expr expr ? expr : expr expr += expr expr -= expr expr *= expr expr /= expr expr %= expr expr ^= expr expr &= expr expr |= expr expr << expr expr rshift expr expr <<= expr expr >>= expr expr == expr expr != expr expr <= expr expr >= expr expr <=> expr expr && expr expr || expr expr . funcname expr . * funcname expr -> funcname expr ->* funcname expr . ~ funcname expr -> ~ funcname expr [ expr ] expr [ ] expr ( funcargs ) funcname ( funcargs ) expr -> ~ identifier ( ) identifier { funcargs } ( vartype ) expr const_cast < vartype > ( expr ) static_cast < vartype > ( expr ) dynamic_cast < vartype > ( expr ) reinterpret_cast < vartype > ( expr ) ( exprorlist ) new typeidentifier opttypemodifier new expr new ( expr ) expr :: new ( expr ) expr delete expr delete [ ] expr return exprorlist return throw expr throw sizeof ( vartype ) sizeof ( expr ) sizeof tknEllipsis ( vartype ) sizeof tknEllipsis ( expr ) expr tknEllipsis lambda goto name tknNumber name [ expr expr ] [ expr objcarg ]
expr     ::= strlit
           | tknCharLit
           | tknNumber
           | '+' tknNumber
           | identifier
           | '{' exprlist '}'
           | '{' exprlist ',' '}'
           | '{' exprorlist '}'
           | '{' exprorlist ',' '}'
           | '{' '}'
           | '-' expr
           | '~' expr
           | '!' expr
           | '*' expr
           | '&' expr
           | '&' operfuncname
           | '++' expr
           | expr '++'
           | '--' expr
           | expr '--'
           | expr '+' expr
           | expr '-' expr
           | expr '*' expr
           | expr '/' expr
           | expr '%' expr
           | expr '&' expr
           | expr '|' expr
           | expr '^' expr
           | expr '=' expr
           | expr '<' expr
           | expr '>' expr
           | expr '?' expr ':' expr
           | expr '+=' expr
           | expr '-=' expr
           | expr '*=' expr
           | expr '/=' expr
           | expr '%=' expr
           | expr '^=' expr
           | expr '&=' expr
           | expr '|=' expr
           | expr '<<' expr
           | expr rshift expr
           | expr '<<=' expr
           | expr '>>=' expr
           | expr '==' expr
           | expr '!=' expr
           | expr '<=' expr
           | expr '>=' expr
           | expr '<=>' expr
           | expr '&&' expr
           | expr '||' expr
           | expr '.' funcname
           | expr '.' '*' funcname
           | expr '->' funcname
           | expr '->*' funcname
           | expr '.' '~' funcname
           | expr '->' '~' funcname
           | expr '[' expr ']'
           | expr '[' ']'
           | expr '(' funcargs ')'
           | funcname '(' funcargs ')'
           | expr '->' '~' identifier '(' ')'
           | identifier '{' funcargs '}'
           | '(' vartype ')' expr
           | 'const_cast' '<' vartype '>' '(' expr ')'
           | 'static_cast' '<' vartype '>' '(' expr ')'
           | 'dynamic_cast' '<' vartype '>' '(' expr ')'
           | 'reinterpret_cast' '<' vartype '>' '(' expr ')'
           | '(' exprorlist ')'
           | 'new' typeidentifier opttypemodifier
           | 'new' expr
           | 'new' '(' expr ')' expr
           | '::' 'new' '(' expr ')' expr
           | 'delete' expr
           | 'delete' '[' ']' expr
           | 'return' exprorlist
           | 'return'
           | 'throw' expr
           | 'throw'
           | 'sizeof' '(' vartype ')'
           | 'sizeof' '(' expr ')'
           | 'sizeof' tknEllipsis '(' vartype ')'
           | 'sizeof' tknEllipsis '(' expr ')'
           | expr tknEllipsis
           | lambda
           | 'goto' name
           | tknNumber name
           | '[' expr expr ']'
           | '[' expr objcarg+ ']'
referenced by: attribspecifier caselist dowhileblock enumitem expr exprlist exprorlist exprstmt forrangeblock macrocall objcarg optexpr param stmt switchstmt templatearg templateparam templidentifier typeidentifier varassign vardecl vardecllist whileblock objcarg: name : expr
objcarg  ::= name ':' expr
referenced by: expr exprlist: expr exprlist , expr doccommentstr exprlist
exprlist ::= ( expr | exprlist ) ',' expr
           | doccommentstr exprlist
referenced by: expr exprlist exprorlist optexpr exprorlist: doccommentstr expr exprlist
         ::= doccommentstr* ( expr | exprlist )
referenced by: expr funcargs meminit varassign funcargs: exprorlist referenced by: expr lambdacapture varassign lambdacapture: funcargs & =
         ::= funcargs
           | '&'
           | '='
referenced by: lambda exprstmt: expr ;
exprstmt ::= expr ';'
referenced by: stmt tknExternC: extern "C"
         ::= 'extern' '"C"'
referenced by: exptype externcblock tknNumSignSpec: signed unsigned
         ::= 'signed'
           | 'unsigned'
referenced by: typeidentifier tknInteger: long long short int int __int8 __int16 __int32 __int64 __int128
         ::= ( 'long' 'long'? | 'short' ) 'int'?
           | 'int'
           | '__int8'
           | '__int16'
           | '__int32'
           | '__int64'
           | '__int128'
referenced by: typeidentifier tknDouble: long double
         ::= 'long'? 'double'
referenced by: typeidentifier tknFloat: long float
tknFloat ::= 'long'? 'float'
referenced by: typeidentifier tknUsing: using referenced by: stmt usingnamespacedecl tknEnum: enum class ID : ID {
tknEnum  ::= 'enum' ( 'class'? ID? ( ':'* ID )? '{' )?
referenced by: enumdefn enumfwddecl typeidentifier tknPublic: public :
         ::= 'public' ':'?
referenced by: changeprotlevel protlevel tknProtected: protected :
         ::= 'protected' ':'?
referenced by: changeprotlevel protlevel tknPrivate: private :
         ::= 'private' ':'?
referenced by: changeprotlevel protlevel   ... generated by RR - Railroad Diagram Generator R R