input grammar: cplusplus.y
State 0 conflicts: 41 shift/reduce, 3 reduce/reduce State 2 conflicts: 39 shift/reduce, 3 reduce/reduce State 4 conflicts: 1 reduce/reduce State 10 conflicts: 1 shift/reduce State 22 conflicts: 3 shift/reduce, 1 reduce/reduce State 23 conflicts: 1 shift/reduce State 25 conflicts: 1 shift/reduce State 50 conflicts: 36 shift/reduce, 3 reduce/reduce State 51 conflicts: 8 shift/reduce, 5 reduce/reduce State 54 conflicts: 3 shift/reduce State 58 conflicts: 3 shift/reduce, 2 reduce/reduce State 59 conflicts: 3 shift/reduce State 61 conflicts: 40 shift/reduce, 3 reduce/reduce State 63 conflicts: 1 shift/reduce State 75 conflicts: 1 reduce/reduce State 89 conflicts: 1 shift/reduce, 1 reduce/reduce State 96 conflicts: 100 reduce/reduce State 101 conflicts: 39 shift/reduce, 3 reduce/reduce State 115 conflicts: 39 shift/reduce, 3 reduce/reduce State 117 conflicts: 61 reduce/reduce State 119 conflicts: 39 shift/reduce, 3 reduce/reduce State 120 conflicts: 5 shift/reduce, 1 reduce/reduce State 122 conflicts: 1 shift/reduce State 125 conflicts: 1 shift/reduce State 130 conflicts: 2 shift/reduce State 133 conflicts: 1 shift/reduce, 1 reduce/reduce State 135 conflicts: 2 shift/reduce State 136 conflicts: 40 shift/reduce, 3 reduce/reduce State 138 conflicts: 1 shift/reduce State 142 conflicts: 1 shift/reduce State 147 conflicts: 2 shift/reduce State 148 conflicts: 39 shift/reduce, 3 reduce/reduce State 153 conflicts: 3 shift/reduce State 159 conflicts: 3 shift/reduce State 168 conflicts: 2 shift/reduce State 169 conflicts: 3 shift/reduce State 172 conflicts: 1 shift/reduce, 1 reduce/reduce State 173 conflicts: 1 shift/reduce State 175 conflicts: 3 shift/reduce State 176 conflicts: 3 shift/reduce, 1 reduce/reduce State 178 conflicts: 1 shift/reduce State 179 conflicts: 1 shift/reduce State 180 conflicts: 1 reduce/reduce State 181 conflicts: 2 shift/reduce State 187 conflicts: 1 shift/reduce State 191 conflicts: 1 shift/reduce State 196 conflicts: 39 shift/reduce, 3 reduce/reduce State 199 conflicts: 1 shift/reduce State 201 conflicts: 100 reduce/reduce State 203 conflicts: 1 shift/reduce State 208 conflicts: 2 shift/reduce State 214 conflicts: 39 shift/reduce, 3 reduce/reduce State 219 conflicts: 39 shift/reduce, 3 reduce/reduce State 226 conflicts: 1 shift/reduce State 228 conflicts: 1 shift/reduce State 229 conflicts: 1 shift/reduce State 233 conflicts: 1 shift/reduce State 238 conflicts: 2 reduce/reduce State 245 conflicts: 2 shift/reduce State 247 conflicts: 1 shift/reduce State 248 conflicts: 2 shift/reduce State 249 conflicts: 2 shift/reduce State 252 conflicts: 2 shift/reduce State 253 conflicts: 2 shift/reduce State 254 conflicts: 2 shift/reduce State 261 conflicts: 2 shift/reduce State 262 conflicts: 2 shift/reduce State 264 conflicts: 2 shift/reduce State 282 conflicts: 2 shift/reduce State 283 conflicts: 1 shift/reduce State 285 conflicts: 1 shift/reduce State 287 conflicts: 1 shift/reduce, 1 reduce/reduce State 290 conflicts: 1 shift/reduce State 295 conflicts: 1 shift/reduce State 298 conflicts: 1 reduce/reduce State 305 conflicts: 2 shift/reduce State 320 conflicts: 1 shift/reduce State 326 conflicts: 1 shift/reduce State 327 conflicts: 1 shift/reduce State 328 conflicts: 2 shift/reduce State 329 conflicts: 1 shift/reduce State 331 conflicts: 2 shift/reduce State 334 conflicts: 2 shift/reduce State 335 conflicts: 4 shift/reduce State 338 conflicts: 1 shift/reduce State 345 conflicts: 1 shift/reduce State 348 conflicts: 2 shift/reduce State 357 conflicts: 5 shift/reduce, 2 reduce/reduce State 364 conflicts: 3 shift/reduce, 1 reduce/reduce State 378 conflicts: 2 shift/reduce State 379 conflicts: 2 shift/reduce State 380 conflicts: 2 shift/reduce State 387 conflicts: 3 shift/reduce State 394 conflicts: 1 shift/reduce State 398 conflicts: 1 shift/reduce State 403 conflicts: 2 shift/reduce State 406 conflicts: 3 shift/reduce State 408 conflicts: 3 reduce/reduce State 409 conflicts: 1 shift/reduce State 414 conflicts: 24 shift/reduce, 3 reduce/reduce State 415 conflicts: 2 shift/reduce, 1 reduce/reduce State 416 conflicts: 1 shift/reduce State 420 conflicts: 5 shift/reduce, 1 reduce/reduce State 423 conflicts: 2 shift/reduce State 424 conflicts: 1 shift/reduce State 425 conflicts: 5 shift/reduce, 1 reduce/reduce State 432 conflicts: 1 shift/reduce State 433 conflicts: 2 shift/reduce State 438 conflicts: 2 shift/reduce State 440 conflicts: 32 shift/reduce State 446 conflicts: 1 shift/reduce State 480 conflicts: 1 shift/reduce State 495 conflicts: 1 shift/reduce State 500 conflicts: 1 shift/reduce State 502 conflicts: 6 shift/reduce State 507 conflicts: 100 reduce/reduce State 512 conflicts: 2 shift/reduce State 513 conflicts: 2 shift/reduce State 514 conflicts: 2 shift/reduce State 515 conflicts: 2 shift/reduce State 516 conflicts: 2 shift/reduce State 520 conflicts: 2 shift/reduce State 522 conflicts: 2 shift/reduce State 525 conflicts: 2 shift/reduce State 526 conflicts: 1 shift/reduce State 527 conflicts: 2 shift/reduce State 528 conflicts: 2 shift/reduce State 529 conflicts: 2 shift/reduce State 530 conflicts: 2 shift/reduce State 531 conflicts: 2 shift/reduce State 532 conflicts: 2 shift/reduce State 533 conflicts: 2 shift/reduce State 534 conflicts: 2 shift/reduce State 536 conflicts: 2 shift/reduce State 538 conflicts: 5 shift/reduce, 1 reduce/reduce State 543 conflicts: 2 shift/reduce State 544 conflicts: 2 shift/reduce State 556 conflicts: 2 shift/reduce State 557 conflicts: 2 shift/reduce State 558 conflicts: 2 shift/reduce State 559 conflicts: 2 shift/reduce State 560 conflicts: 2 shift/reduce State 561 conflicts: 2 shift/reduce State 563 conflicts: 2 shift/reduce State 564 conflicts: 2 shift/reduce State 565 conflicts: 2 shift/reduce State 566 conflicts: 2 shift/reduce State 567 conflicts: 2 shift/reduce State 572 conflicts: 2 shift/reduce State 573 conflicts: 2 shift/reduce State 574 conflicts: 2 shift/reduce State 575 conflicts: 2 shift/reduce State 576 conflicts: 2 shift/reduce State 577 conflicts: 2 shift/reduce State 578 conflicts: 2 shift/reduce State 580 conflicts: 2 shift/reduce State 596 conflicts: 39 shift/reduce, 3 reduce/reduce State 608 conflicts: 2 shift/reduce State 618 conflicts: 4 shift/reduce State 625 conflicts: 2 shift/reduce State 627 conflicts: 3 shift/reduce, 1 reduce/reduce State 628 conflicts: 3 shift/reduce State 629 conflicts: 1 shift/reduce State 632 conflicts: 1 shift/reduce State 638 conflicts: 2 reduce/reduce State 641 conflicts: 1 shift/reduce State 654 conflicts: 2 shift/reduce State 655 conflicts: 1 shift/reduce State 660 conflicts: 2 shift/reduce State 663 conflicts: 2 shift/reduce State 675 conflicts: 2 shift/reduce State 676 conflicts: 1 shift/reduce State 678 conflicts: 2 shift/reduce State 680 conflicts: 2 shift/reduce State 683 conflicts: 1 shift/reduce State 687 conflicts: 1 reduce/reduce State 689 conflicts: 1 shift/reduce State 691 conflicts: 2 shift/reduce, 1 reduce/reduce State 694 conflicts: 5 shift/reduce State 701 conflicts: 2 shift/reduce State 703 conflicts: 2 shift/reduce State 705 conflicts: 3 shift/reduce, 2 reduce/reduce State 706 conflicts: 1 shift/reduce State 741 conflicts: 2 shift/reduce State 744 conflicts: 2 shift/reduce State 750 conflicts: 1 shift/reduce State 751 conflicts: 1 shift/reduce State 757 conflicts: 2 shift/reduce State 758 conflicts: 100 reduce/reduce State 762 conflicts: 6 shift/reduce State 764 conflicts: 2 shift/reduce State 775 conflicts: 2 shift/reduce State 777 conflicts: 2 shift/reduce State 779 conflicts: 2 shift/reduce State 791 conflicts: 1 shift/reduce State 794 conflicts: 37 shift/reduce, 3 reduce/reduce State 804 conflicts: 1 reduce/reduce State 805 conflicts: 1 shift/reduce State 823 conflicts: 1 reduce/reduce State 829 conflicts: 39 shift/reduce, 3 reduce/reduce State 849 conflicts: 1 shift/reduce State 864 conflicts: 1 reduce/reduce State 866 conflicts: 2 shift/reduce, 2 reduce/reduce State 875 conflicts: 1 shift/reduce, 1 reduce/reduce State 882 conflicts: 2 shift/reduce State 887 conflicts: 2 shift/reduce State 907 conflicts: 1 shift/reduce State 908 conflicts: 2 shift/reduce State 910 conflicts: 2 shift/reduce State 917 conflicts: 4 shift/reduce State 920 conflicts: 5 shift/reduce State 926 conflicts: 1 shift/reduce State 936 conflicts: 1 shift/reduce State 944 conflicts: 1 shift/reduce State 945 conflicts: 2 shift/reduce State 946 conflicts: 2 shift/reduce State 951 conflicts: 2 shift/reduce State 963 conflicts: 2 shift/reduce State 965 conflicts: 2 shift/reduce State 966 conflicts: 1 shift/reduce State 967 conflicts: 3 shift/reduce State 968 conflicts: 2 shift/reduce State 970 conflicts: 2 shift/reduce State 973 conflicts: 36 shift/reduce, 3 reduce/reduce State 974 conflicts: 2 shift/reduce State 979 conflicts: 37 shift/reduce, 3 reduce/reduce State 982 conflicts: 2 shift/reduce State 990 conflicts: 39 shift/reduce, 3 reduce/reduce State 1010 conflicts: 1 reduce/reduce State 1020 conflicts: 1 shift/reduce State 1026 conflicts: 3 shift/reduce State 1029 conflicts: 1 shift/reduce State 1031 conflicts: 1 shift/reduce State 1032 conflicts: 1 shift/reduce State 1052 conflicts: 4 shift/reduce State 1053 conflicts: 2 shift/reduce State 1054 conflicts: 2 shift/reduce State 1058 conflicts: 2 shift/reduce State 1061 conflicts: 1 shift/reduce, 1 reduce/reduce State 1064 conflicts: 27 shift/reduce, 3 reduce/reduce State 1069 conflicts: 2 shift/reduce State 1070 conflicts: 2 shift/reduce State 1071 conflicts: 2 shift/reduce State 1072 conflicts: 2 shift/reduce State 1077 conflicts: 2 shift/reduce State 1081 conflicts: 2 shift/reduce State 1085 conflicts: 3 shift/reduce State 1087 conflicts: 2 shift/reduce State 1092 conflicts: 2 reduce/reduce State 1093 conflicts: 1 shift/reduce State 1094 conflicts: 2 shift/reduce State 1098 conflicts: 37 shift/reduce, 3 reduce/reduce State 1102 conflicts: 2 shift/reduce State 1104 conflicts: 2 shift/reduce State 1139 conflicts: 2 shift/reduce State 1141 conflicts: 1 shift/reduce State 1144 conflicts: 2 shift/reduce State 1148 conflicts: 1 shift/reduce, 2 reduce/reduce State 1157 conflicts: 39 shift/reduce, 3 reduce/reduce State 1170 conflicts: 1 shift/reduce State 1173 conflicts: 2 shift/reduce State 1178 conflicts: 37 shift/reduce, 3 reduce/reduce State 1183 conflicts: 37 shift/reduce, 3 reduce/reduce State 1185 conflicts: 19 shift/reduce, 3 reduce/reduce State 1187 conflicts: 37 shift/reduce, 39 reduce/reduce State 1197 conflicts: 62 shift/reduce, 41 reduce/reduce State 1219 conflicts: 1 shift/reduce State 1220 conflicts: 1 shift/reduce State 1238 conflicts: 2 shift/reduce State 1244 conflicts: 2 shift/reduce State 1246 conflicts: 19 shift/reduce, 39 reduce/reduce State 1251 conflicts: 37 shift/reduce, 3 reduce/reduce State 1252 conflicts: 62 shift/reduce, 41 reduce/reduce State 1255 conflicts: 19 shift/reduce, 3 reduce/reduce State 1264 conflicts: 1 shift/reduce State 1267 conflicts: 1 shift/reduce State 1270 conflicts: 1 shift/reduce State 1272 conflicts: 3 shift/reduce State 1273 conflicts: 37 shift/reduce, 3 reduce/reduce State 1274 conflicts: 2 shift/reduce State 1277 conflicts: 2 shift/reduce State 1280 conflicts: 19 shift/reduce, 3 reduce/reduce State 1281 conflicts: 1 shift/reduce State 1284 conflicts: 2 shift/reduce State 1288 conflicts: 1 shift/reduce State 1292 conflicts: 2 shift/reduce State 1293 conflicts: 3 shift/reduce State 1294 conflicts: 2 shift/reduce State 1296 conflicts: 37 shift/reduce, 3 reduce/reduce State 1297 conflicts: 37 shift/reduce, 3 reduce/reduce State 1298 conflicts: 4 shift/reduce State 1303 conflicts: 1 reduce/reduce State 1304 conflicts: 1 reduce/reduce State 1309 conflicts: 37 shift/reduce, 3 reduce/reduce State 1316 conflicts: 37 shift/reduce, 3 reduce/reduce State 1318 conflicts: 37 shift/reduce, 3 reduce/reduce State 1319 conflicts: 1 shift/reduce State 1323 conflicts: 37 shift/reduce, 3 reduce/reduce
0 $accept → result $end 1 COMMA-opt → %empty 2 | "," 3 CONSTEXPR-opt → %empty 4 | "constexpr" 5 ELLIPSIS-opt → %empty 6 | "..." 7 EXPORT-opt → %empty 8 | "export" 9 EXTERN-opt → %empty 10 | "extern" 11 IDENTIFIER-opt → %empty 12 | IDENTIFIER 13 INLINE-opt → %empty 14 | "inline" 15 NOEXCEPT-opt → %empty 16 | "noexcept" 17 NOT-opt → %empty 18 | "!" 19 SCOPE-opt → %empty 20 | "::" 21 TEMPLATE-opt → %empty 22 | "template" 23 THIS-opt → %empty 24 | "this" 25 TYPENAME-opt → %empty 26 | "typename" 27 VIRTUAL-opt → %empty 28 | "virtual" 29 abstract-declarator → ptr-abstract-declarator 30 | noptr-abstract-declarator-opt parameters-and-qualifiers trailing-return-type 31 | abstract-pack-declarator 32 abstract-declarator-opt → %empty 33 | abstract-declarator 34 abstract-pack-declarator → noptr-abstract-pack-declarator 35 | ptr-operator abstract-pack-declarator 36 access-specifier → "private" 37 | "protected" 38 | "public" 39 access-specifier-opt → %empty 40 | access-specifier 41 additive-expression → multiplicative-expression 42 | additive-expression "+" multiplicative-expression 43 | additive-expression "-" multiplicative-expression 44 alias-declaration → "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 45 alignment-specifier → "alignas" "(" type-id ELLIPSIS-opt ")" 46 | "alignas" "(" constant-expression ELLIPSIS-opt ")" 47 and-expression → equality-expression 48 | and-expression "&" equality-expression 49 asm-declaration → attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 50 assignment-expression → conditional-expression 51 | yield-expression 52 | throw-expression 53 | logical-or-expression assignment-operator initializer-clause 54 assignment-expression-opt → %empty 55 | assignment-expression 56 assignment-operator → "=" 57 | "*=" 58 | "/=" 59 | "%=" 60 | "+=" 61 | "-=" 62 | ">>=" 63 | "<<=" 64 | "&=" 65 | "^=" 66 | "|=" 67 attribute → attribute-token attribute-argument-clause-opt 68 attribute-argument-clause → "(" balanced-token-seq-opt ")" 69 attribute-argument-clause-opt → %empty 70 | attribute-argument-clause 71 attribute-declaration → attribute-specifier-seq ";" 72 attribute-list → attribute-opt 73 | attribute-list "," attribute-opt 74 | attribute "..." 75 | attribute-list "," attribute "..." 76 attribute-namespace → IDENTIFIER 77 attribute-opt → %empty 78 | attribute 79 attribute-scoped-token → attribute-namespace "::" IDENTIFIER 80 attribute-specifier → "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → %empty 84 | attribute-specifier-seq 85 attribute-token → IDENTIFIER 86 | attribute-scoped-token 87 attribute-using-prefix → "using" attribute-namespace ":" 88 attribute-using-prefix-opt → %empty 89 | attribute-using-prefix 90 await-expression → "co_await" cast-expression 91 balanced-token → "(" balanced-token-seq-opt ")" 92 | "[" balanced-token-seq-opt "]" 93 | "{" balanced-token-seq-opt "}" 94 | BALANCED_TOKEN 95 balanced-token-seq → balanced-token 96 | balanced-token-seq balanced-token 97 balanced-token-seq-opt → %empty 98 | balanced-token-seq 99 base-clause → ":" base-specifier-list 100 base-clause-opt → %empty 101 | base-clause 102 base-specifier → attribute-specifier-seq-opt class-or-decltype 103 | attribute-specifier-seq-opt "virtual" access-specifier-opt class-or-decltype 104 | attribute-specifier-seq-opt access-specifier VIRTUAL-opt class-or-decltype 105 base-specifier-list → base-specifier ELLIPSIS-opt 106 | base-specifier-list "," base-specifier ELLIPSIS-opt 107 block-declaration → simple-declaration 108 | asm-declaration 109 | namespace-alias-definition 110 | using-declaration 111 | using-enum-declaration 112 | using-directive 113 | static_assert-declaration 114 | alias-declaration 115 | opaque-enum-declaration 116 brace-or-equal-initializer → "=" initializer-clause 117 | braced-init-list 118 brace-or-equal-initializer-opt → %empty 119 | brace-or-equal-initializer 120 braced-init-list → "{" initializer-list COMMA-opt "}" 121 | "{" designated-initializer-list COMMA-opt "}" 122 | "{" "}" 123 capture → simple-capture 124 | init-capture 125 capture-default → "&" 126 | "=" 127 capture-list → capture 128 | capture-list "," capture 129 cast-expression → unary-expression 130 | "(" type-id ")" cast-expression 131 class-head → class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | class-key attribute-specifier-seq-opt base-clause-opt 133 class-head-name → nested-name-specifier-opt class-name 134 class-key → "class" 135 | "struct" 136 | "union" 137 class-name → IDENTIFIER 138 | simple-template-id 139 class-or-decltype → nested-name-specifier-opt type-name 140 | nested-name-specifier "template" simple-template-id 141 | decltype-specifier 142 class-specifier → class-head "{" member-specification-opt "}" 143 class-virt-specifier → "final" 144 class-virt-specifier-opt → %empty 145 | class-virt-specifier 146 compare-expression → shift-expression 147 | compare-expression "<=>" shift-expression 148 compound-requirement → "{" expression "}" NOEXCEPT-opt return-type-requirement-opt ";" 149 compound-statement → "{" statement-seq-opt "}" 150 concept-definition → "concept" concept-name "=" constraint-expression ";" 151 concept-name → IDENTIFIER 152 condition → expression 153 | attribute-specifier-seq-opt decl-specifier-seq declarator brace-or-equal-initializer 154 condition-opt → %empty 155 | condition 156 conditional-expression → logical-or-expression 157 | logical-or-expression "?" expression ":" assignment-expression 158 constant-expression → conditional-expression 159 constant-expression-opt → %empty 160 | constant-expression 161 constraint-expression → logical-or-expression 162 constraint-logical-and-expression → primary-expression 163 | constraint-logical-and-expression "&&" primary-expression 164 constraint-logical-or-expression → constraint-logical-and-expression 165 | constraint-logical-or-expression "||" constraint-logical-and-expression 166 conversion-declarator → ptr-operator conversion-declarator-opt 167 conversion-declarator-opt → %empty 168 | conversion-declarator 169 conversion-function-id → "operator" conversion-type-id 170 conversion-type-id → type-specifier-seq conversion-declarator-opt 171 coroutine-return-statement → "co_return" expr-or-braced-init-list-opt ";" 172 ctor-initializer → ":" mem-initializer-list 173 ctor-initializer-opt → %empty 174 | ctor-initializer 175 cv-qualifier → "const" 176 | "volatile" 177 cv-qualifier-seq → cv-qualifier cv-qualifier-seq-opt 178 cv-qualifier-seq-opt → %empty 179 | cv-qualifier-seq 180 decl-specifier → storage-class-specifier 181 | defining-type-specifier 182 | function-specifier 183 | "friend" 184 | "typedef" 185 | "constexpr" 186 | "consteval" 187 | "constinit" 188 | "inline" 189 decl-specifier-seq → decl-specifier attribute-specifier-seq-opt 190 | decl-specifier decl-specifier-seq 191 decl-specifier-seq-opt → %empty 192 | decl-specifier-seq 193 declaration → block-declaration 194 | nodeclspec-function-declaration 195 | function-definition 196 | template-declaration 197 | deduction-guide 198 | explicit-instantiation 199 | explicit-specialization 200 | export-declaration 201 | linkage-specification 202 | namespace-definition 203 | empty-declaration 204 | attribute-declaration 205 | module-import-declaration 206 declaration-seq → declaration 207 | declaration-seq declaration 208 declaration-seq-opt → %empty 209 | declaration-seq 210 declaration-statement → block-declaration 211 declarator → ptr-declarator 212 | noptr-declarator parameters-and-qualifiers trailing-return-type 213 declarator-id → ELLIPSIS-opt id-expression 214 decltype-specifier → "decltype" "(" expression ")" 215 deduction-guide → explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 216 defining-type-id → defining-type-specifier-seq abstract-declarator-opt 217 defining-type-specifier → type-specifier 218 | class-specifier 219 | enum-specifier 220 defining-type-specifier-seq → defining-type-specifier attribute-specifier-seq-opt 221 | defining-type-specifier defining-type-specifier-seq 222 delete-expression → SCOPE-opt "delete" cast-expression 223 | SCOPE-opt "delete" "[" "]" cast-expression 224 designated-initializer-clause → designator brace-or-equal-initializer 225 designated-initializer-list → designated-initializer-clause 226 | designated-initializer-list "," designated-initializer-clause 227 designator → "." IDENTIFIER 228 elaborated-enum-specifier → "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | class-key simple-template-id 231 | class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | elaborated-enum-specifier 233 empty-declaration → ";" 234 enclosing-namespace-specifier → IDENTIFIER 235 | enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER 236 enum-base → ":" type-specifier-seq 237 enum-base-opt → %empty 238 | enum-base 239 enum-head → enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 240 enum-head-name → nested-name-specifier-opt IDENTIFIER 241 enum-head-name-opt → %empty 242 | enum-head-name 243 enum-key → "enum" 244 | "enum" "class" 245 | "enum" "struct" 246 enum-name → IDENTIFIER 247 enum-specifier → enum-head "{" enumerator-list-opt "}" 248 | enum-head "{" enumerator-list "," "}" 249 enumerator → IDENTIFIER attribute-specifier-seq-opt 250 enumerator-definition → enumerator 251 | enumerator "=" constant-expression 252 enumerator-list → enumerator-definition 253 | enumerator-list "," enumerator-definition 254 enumerator-list-opt → %empty 255 | enumerator-list 256 equality-expression → relational-expression 257 | equality-expression "==" relational-expression 258 | equality-expression "!=" relational-expression 259 exception-declaration → attribute-specifier-seq-opt type-specifier-seq declarator 260 | attribute-specifier-seq-opt type-specifier-seq abstract-declarator-opt 261 | "..." 262 exclusive-or-expression → and-expression 263 | exclusive-or-expression "^" and-expression 264 explicit-instantiation → EXTERN-opt "template" declaration 265 explicit-specialization → "template" "<" ">" declaration 266 explicit-specifier → "explicit" "(" constant-expression ")" 267 | "explicit" 268 explicit-specifier-opt → %empty 269 | explicit-specifier 270 export-declaration → "export" declaration 271 | "export" "{" declaration-seq-opt "}" 272 | "export" module-import-declaration 273 expr-or-braced-init-list → expression 274 | braced-init-list 275 expr-or-braced-init-list-opt → %empty 276 | expr-or-braced-init-list 277 expression → assignment-expression 278 | expression "," assignment-expression 279 expression-list → initializer-list 280 expression-list-opt → %empty 281 | expression-list 282 expression-opt → %empty 283 | expression 284 expression-statement → expression-opt ";" 285 fold-expression → "(" cast-expression fold-operator "..." ")" 286 | "(" "..." fold-operator cast-expression ")" 287 | "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 288 fold-operator → "+" 289 | "-" 290 | "*" 291 | "/" 292 | "%" 293 | "^" 294 | "&" 295 | "|" 296 | "<<" 297 | ">>" 298 | "+=" 299 | "-=" 300 | "*=" 301 | "/=" 302 | "%=" 303 | "^=" 304 | "&=" 305 | "|=" 306 | "<<=" 307 | ">>=" 308 | "=" 309 | "==" 310 | "!=" 311 | "<" 312 | ">" 313 | "<=" 314 | ">=" 315 | "&&" 316 | "||" 317 | "," 318 | ".*" 319 | "->*" 320 for-range-declaration → attribute-specifier-seq-opt decl-specifier-seq declarator 321 | attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" 322 for-range-initializer → expr-or-braced-init-list 323 function-body → ctor-initializer-opt compound-statement 324 | function-try-block 325 | "=" "default" ";" 326 | "=" "delete" ";" 327 function-definition → attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 328 | attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 329 function-specifier → "virtual" 330 | explicit-specifier 331 function-try-block → "try" ctor-initializer-opt compound-statement handler-seq 332 global-module-fragment → "module" ";" declaration-seq-opt 333 global-module-fragment-opt → %empty 334 | global-module-fragment 335 handler → "catch" "(" exception-declaration ")" compound-statement 336 handler-seq → handler handler-seq-opt 337 handler-seq-opt → %empty 338 | handler-seq 339 header-name → HEADER_NAME 340 id-expression → unqualified-id 341 | qualified-id 342 identifier-list → IDENTIFIER 343 | identifier-list "," IDENTIFIER 344 inclusive-or-expression → exclusive-or-expression 345 | inclusive-or-expression "|" exclusive-or-expression 346 init-capture → ELLIPSIS-opt IDENTIFIER initializer 347 | "&" ELLIPSIS-opt IDENTIFIER initializer 348 init-declarator → declarator initializer-opt 349 | declarator requires-clause 350 init-declarator-list → init-declarator 351 | init-declarator-list "," init-declarator 352 init-declarator-list-opt → %empty 353 | init-declarator-list 354 init-statement → expression-statement 355 | simple-declaration 356 | alias-declaration 357 init-statement-opt → %empty 358 | init-statement 359 initializer → brace-or-equal-initializer 360 | "(" expression-list ")" 361 initializer-clause → assignment-expression 362 | braced-init-list 363 initializer-list → initializer-clause ELLIPSIS-opt 364 | initializer-list "," initializer-clause ELLIPSIS-opt 365 initializer-opt → %empty 366 | initializer 367 iteration-statement → "while" "(" condition ")" statement 368 | "do" statement "while" "(" expression ")" ";" 369 | "for" "(" init-statement condition-opt ";" expression-opt ")" statement 370 | "for" "(" init-statement-opt for-range-declaration ":" for-range-initializer ")" statement 371 jump-statement → "break" ";" 372 | "continue" ";" 373 | "return" expr-or-braced-init-list-opt ";" 374 | coroutine-return-statement 375 | "goto" IDENTIFIER ";" 376 labeled-statement → attribute-specifier-seq-opt IDENTIFIER ":" statement 377 | attribute-specifier-seq-opt "case" constant-expression ":" statement 378 | attribute-specifier-seq-opt "default" ":" statement 379 lambda-capture → capture-default 380 | capture-list 381 | capture-default "," capture-list 382 lambda-capture-opt → %empty 383 | lambda-capture 384 lambda-declarator → lambda-specifiers 385 | "(" parameter-declaration-clause ")" lambda-specifiers requires-clause-opt 386 lambda-expression → lambda-introducer lambda-declarator compound-statement 387 | lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → "[" lambda-capture-opt "]" 389 lambda-specifiers → decl-specifier-seq-opt noexcept-specifier-opt attribute-specifier-seq-opt trailing-return-type-opt 390 linkage-specification → "extern" string-literal "{" declaration-seq-opt "}" 391 | "extern" string-literal declaration 392 literal-operator-id → "operator" string-literal IDENTIFIER 393 | "operator" user-defined-string-literal 394 logical-and-expression → inclusive-or-expression 395 | logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → logical-and-expression 397 | logical-or-expression "||" logical-and-expression 398 mem-initializer → mem-initializer-id "(" expression-list-opt ")" 399 | mem-initializer-id braced-init-list 400 mem-initializer-id → class-or-decltype 401 | IDENTIFIER 402 mem-initializer-list → mem-initializer ELLIPSIS-opt 403 | mem-initializer-list "," mem-initializer ELLIPSIS-opt 404 member-declaration → attribute-specifier-seq-opt decl-specifier-seq-opt member-declarator-list-opt ";" 405 | function-definition 406 | using-declaration 407 | using-enum-declaration 408 | static_assert-declaration 409 | template-declaration 410 | explicit-specialization 411 | deduction-guide 412 | alias-declaration 413 | opaque-enum-declaration 414 | empty-declaration 415 member-declarator → declarator virt-specifier-seq-opt pure-specifier-opt 416 | declarator requires-clause 417 | declarator brace-or-equal-initializer-opt 418 | IDENTIFIER-opt attribute-specifier-seq-opt ":" constant-expression brace-or-equal-initializer-opt 419 member-declarator-list → member-declarator 420 | member-declarator-list "," member-declarator 421 member-declarator-list-opt → %empty 422 | member-declarator-list 423 member-specification → member-declaration member-specification-opt 424 | access-specifier ":" member-specification-opt 425 member-specification-opt → %empty 426 | member-specification 427 module-declaration → EXPORT-opt "module" module-name module-partition-opt attribute-specifier-seq-opt ";" 428 module-import-declaration → "import" module-name attribute-specifier-seq-opt ";" 429 | "import" module-partition attribute-specifier-seq-opt ";" 430 | "import" header-name attribute-specifier-seq-opt ";" 431 module-name → module-name-qualifier-opt IDENTIFIER 432 module-name-qualifier → IDENTIFIER "." 433 | module-name-qualifier IDENTIFIER "." 434 module-name-qualifier-opt → %empty 435 | module-name-qualifier 436 module-partition → ":" module-name-qualifier-opt IDENTIFIER 437 module-partition-opt → %empty 438 | module-partition 439 multiplicative-expression → pm-expression 440 | multiplicative-expression "*" pm-expression 441 | multiplicative-expression "/" pm-expression 442 | multiplicative-expression "%" pm-expression 443 named-namespace-definition → INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 444 namespace-alias → IDENTIFIER 445 namespace-alias-definition → "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 446 namespace-body → declaration-seq-opt 447 namespace-definition → named-namespace-definition 448 | unnamed-namespace-definition 449 | nested-namespace-definition 450 namespace-name → IDENTIFIER 451 | namespace-alias 452 nested-name-specifier → "::" 453 | type-name "::" 454 | namespace-name "::" 455 | decltype-specifier "::" 456 | nested-name-specifier IDENTIFIER "::" 457 | nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → %empty 459 | nested-name-specifier 460 nested-namespace-definition → "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" 461 nested-requirement → "requires" constraint-expression ";" 462 new-declarator → ptr-operator new-declarator-opt 463 | noptr-new-declarator 464 new-declarator-opt → %empty 465 | new-declarator 466 new-expression → SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 468 new-initializer → "(" expression-list-opt ")" 469 | braced-init-list 470 new-initializer-opt → %empty 471 | new-initializer 472 new-placement → "(" expression-list ")" 473 new-placement-opt → %empty 474 | new-placement 475 new-type-id → type-specifier-seq new-declarator-opt 476 nodeclspec-function-declaration → attribute-specifier-seq-opt declarator ";" 477 noexcept-expression → "noexcept" "(" expression ")" 478 noexcept-specifier → "noexcept" "(" constant-expression ")" 479 | "noexcept" 480 noexcept-specifier-opt → %empty 481 | noexcept-specifier 482 noptr-abstract-declarator → noptr-abstract-declarator-opt parameters-and-qualifiers 483 | noptr-abstract-declarator-opt "[" constant-expression-opt "]" attribute-specifier-seq-opt 484 | "(" ptr-abstract-declarator ")" 485 noptr-abstract-declarator-opt → %empty 486 | noptr-abstract-declarator 487 noptr-abstract-pack-declarator → noptr-abstract-pack-declarator parameters-and-qualifiers 488 | noptr-abstract-pack-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 489 | "..." 490 noptr-declarator → declarator-id attribute-specifier-seq-opt 491 | noptr-declarator parameters-and-qualifiers 492 | noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 493 | "(" ptr-declarator ")" 494 noptr-new-declarator → "[" expression-opt "]" attribute-specifier-seq-opt 495 | noptr-new-declarator "[" constant-expression "]" attribute-specifier-seq-opt 496 opaque-enum-declaration → enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 497 operator-function-id → "operator" overloadable-operator 498 | "operator" overloadable-operator "<" template-argument-list-opt ">" 499 overloadable-operator → "new" 500 | "delete" 501 | "new" "[" "]" 502 | "delete" "[" "]" 503 | "co_await" 504 | "(" ")" 505 | "[" "]" 506 | "->" 507 | "->*" 508 | "~" 509 | "!" 510 | "+" 511 | "-" 512 | "*" 513 | "/" 514 | "%" 515 | "^" 516 | "&" 517 | "|" 518 | "=" 519 | "+=" 520 | "-=" 521 | "*=" 522 | "/=" 523 | "%=" 524 | "^=" 525 | "&=" 526 | "|=" 527 | "==" 528 | "!=" 529 | "<" 530 | ">" 531 | "<=" 532 | ">=" 533 | "<=>" 534 | "&&" 535 | "||" 536 | "<<" 537 | ">>" 538 | "<<=" 539 | ">>=" 540 | "++" 541 | "--" 542 | "," 543 parameter-declaration → attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator 544 | attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator "=" initializer-clause 545 | attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt 546 | attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt "=" initializer-clause 547 parameter-declaration-clause → parameter-declaration-list-opt ELLIPSIS-opt 548 | parameter-declaration-list "," "..." 549 parameter-declaration-list → parameter-declaration 550 | parameter-declaration-list "," parameter-declaration 551 parameter-declaration-list-opt → %empty 552 | parameter-declaration-list 553 parameters-and-qualifiers → "(" parameter-declaration-clause ")" cv-qualifier-seq-opt ref-qualifier-opt noexcept-specifier-opt attribute-specifier-seq-opt 554 placeholder-type-specifier → type-constraint-opt "auto" 555 | type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → cast-expression 557 | pm-expression ".*" cast-expression 558 | pm-expression "->*" cast-expression 559 postfix-expression → primary-expression 560 | postfix-expression "[" expression-list-opt "]" 561 | postfix-expression "(" expression-list-opt ")" 562 | simple-type-specifier "(" expression-list-opt ")" 563 | typename-specifier "(" expression-list-opt ")" 564 | simple-type-specifier braced-init-list 565 | typename-specifier braced-init-list 566 | postfix-expression "." TEMPLATE-opt id-expression 567 | postfix-expression "->" TEMPLATE-opt id-expression 568 | postfix-expression "++" 569 | postfix-expression "--" 570 | "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | "static_cast" "<" type-id ">" "(" expression ")" 572 | "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | "const_cast" "<" type-id ">" "(" expression ")" 574 | "typeid" "(" expression ")" 575 | "typeid" "(" type-id ")" 576 primary-expression → "literal" 577 | string-literal 578 | "this" 579 | "(" expression ")" 580 | id-expression 581 | lambda-expression 582 | fold-expression 583 | requires-expression 584 private-module-fragment → "module" ":" "private" ";" declaration-seq-opt 585 private-module-fragment-opt → %empty 586 | private-module-fragment 587 ptr-abstract-declarator → noptr-abstract-declarator 588 | ptr-operator ptr-abstract-declarator-opt 589 ptr-abstract-declarator-opt → %empty 590 | ptr-abstract-declarator 591 ptr-declarator → noptr-declarator 592 | ptr-operator ptr-declarator 593 ptr-operator → "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 594 | "&" attribute-specifier-seq-opt 595 | "&&" attribute-specifier-seq-opt 596 | nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 597 pure-specifier → "=" '0' 598 pure-specifier-opt → %empty 599 | pure-specifier 600 qualified-id → nested-name-specifier TEMPLATE-opt unqualified-id 601 qualified-namespace-specifier → nested-name-specifier-opt namespace-name 602 ref-qualifier → "&" 603 | "&&" 604 ref-qualifier-opt → %empty 605 | ref-qualifier 606 relational-expression → compare-expression 607 | relational-expression "<" compare-expression 608 | relational-expression ">" compare-expression 609 | relational-expression "<=" compare-expression 610 | relational-expression ">=" compare-expression 611 requirement → simple-requirement 612 | type-requirement 613 | compound-requirement 614 | nested-requirement 615 requirement-body → "{" requirement-seq "}" 616 requirement-parameter-list → "(" parameter-declaration-clause ")" 617 requirement-parameter-list-opt → %empty 618 | requirement-parameter-list 619 requirement-seq → requirement 620 | requirement-seq requirement 621 requires-clause → "requires" constraint-logical-or-expression 622 requires-clause-opt → %empty 623 | requires-clause 624 requires-expression → "requires" requirement-parameter-list-opt requirement-body 625 return-type-requirement → "->" type-constraint 626 return-type-requirement-opt → %empty 627 | return-type-requirement 628 selection-statement → "if" CONSTEXPR-opt "(" init-statement-opt condition ")" statement 629 | "if" CONSTEXPR-opt "(" init-statement-opt condition ")" statement "else" statement 630 | "if" NOT-opt "consteval" compound-statement 631 | "if" NOT-opt "consteval" compound-statement "else" statement 632 | "switch" "(" init-statement-opt condition ")" statement 633 shift-expression → additive-expression 634 | shift-expression "<<" additive-expression 635 | shift-expression ">>" additive-expression 636 simple-capture → IDENTIFIER ELLIPSIS-opt 637 | "&" IDENTIFIER ELLIPSIS-opt 638 | "this" 639 | "*" "this" 640 simple-declaration → decl-specifier-seq init-declarator-list-opt ";" 641 | attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 643 simple-requirement → expression ";" 644 simple-template-id → template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → nested-name-specifier-opt type-name 646 | nested-name-specifier "template" simple-template-id 647 | decltype-specifier 648 | placeholder-type-specifier 649 | nested-name-specifier-opt template-name 650 | "char" 651 | "char8_t" 652 | "char16_t" 653 | "char32_t" 654 | "wchar_t" 655 | "bool" 656 | "short" 657 | "int" 658 | "long" 659 | "signed" 660 | "unsigned" 661 | "float" 662 | "double" 663 | "void" 664 statement → labeled-statement 665 | attribute-specifier-seq-opt expression-statement 666 | attribute-specifier-seq-opt compound-statement 667 | attribute-specifier-seq-opt selection-statement 668 | attribute-specifier-seq-opt iteration-statement 669 | attribute-specifier-seq-opt jump-statement 670 | declaration-statement 671 | attribute-specifier-seq-opt try-block 672 statement-seq → statement 673 | statement-seq statement 674 statement-seq-opt → %empty 675 | statement-seq 676 static_assert-declaration → "static_assert" "(" constant-expression ")" ";" 677 | "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → "static" 679 | "thread_local" 680 | "extern" 681 | "mutable" 682 string-literal → STRING_LITERAL 683 template-argument → constant-expression 684 | type-id 685 | id-expression 686 template-argument-list → template-argument ELLIPSIS-opt 687 | template-argument-list "," template-argument ELLIPSIS-opt 688 template-argument-list-opt → %empty 689 | template-argument-list 690 template-declaration → template-head declaration 691 | template-head concept-definition 692 template-head → "template" "<" template-parameter-list ">" requires-clause-opt 693 template-id → simple-template-id 694 | operator-function-id "<" template-argument-list-opt ">" 695 | literal-operator-id "<" template-argument-list-opt ">" 696 template-name → IDENTIFIER 697 template-parameter → type-parameter 698 | parameter-declaration 699 template-parameter-list → template-parameter 700 | template-parameter-list "," template-parameter 701 throw-expression → "throw" assignment-expression-opt 702 trailing-return-type → "->" type-id 703 trailing-return-type-opt → %empty 704 | trailing-return-type 705 translation-unit → declaration-seq-opt 706 | global-module-fragment-opt module-declaration declaration-seq-opt private-module-fragment-opt 707 try-block → "try" compound-statement handler-seq 708 type-constraint → nested-name-specifier-opt concept-name 709 | nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → %empty 711 | type-constraint 712 type-id → type-specifier-seq abstract-declarator-opt 713 type-name → class-name 714 | enum-name 715 | typedef-name 716 type-parameter → type-parameter-key ELLIPSIS-opt IDENTIFIER-opt 717 | type-parameter-key IDENTIFIER-opt "=" type-id 718 | type-constraint ELLIPSIS-opt IDENTIFIER-opt 719 | type-constraint IDENTIFIER-opt "=" type-id 720 | template-head type-parameter-key ELLIPSIS-opt IDENTIFIER-opt 721 | template-head type-parameter-key IDENTIFIER-opt "=" id-expression 722 type-parameter-key → "class" 723 | "typename" 724 type-requirement → "typename" nested-name-specifier-opt type-name ";" 725 type-specifier → simple-type-specifier 726 | elaborated-type-specifier 727 | typename-specifier 728 | cv-qualifier 729 type-specifier-seq → type-specifier attribute-specifier-seq-opt 730 | type-specifier type-specifier-seq 731 typedef-name → IDENTIFIER 732 | simple-template-id 733 typename-specifier → "typename" nested-name-specifier IDENTIFIER 734 | "typename" nested-name-specifier TEMPLATE-opt simple-template-id 735 ud-suffix → IDENTIFIER 736 unary-expression → postfix-expression 737 | unary-operator cast-expression 738 | "++" cast-expression 739 | "--" cast-expression 740 | await-expression 741 | "sizeof" unary-expression 742 | "sizeof" "(" type-id ")" 743 | "sizeof" "..." "(" IDENTIFIER ")" 744 | "alignof" "(" type-id ")" 745 | noexcept-expression 746 | new-expression 747 | delete-expression 748 unary-operator → "*" 749 | "&" 750 | "+" 751 | "-" 752 | "!" 753 | "~" 754 unnamed-namespace-definition → INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body "}" 755 unqualified-id → IDENTIFIER 756 | operator-function-id 757 | conversion-function-id 758 | literal-operator-id 759 | "~" type-name 760 | "~" decltype-specifier 761 | template-id 762 user-defined-string-literal → string-literal ud-suffix 763 using-declaration → "using" using-declarator-list ";" 764 using-declarator → TYPENAME-opt nested-name-specifier unqualified-id 765 using-declarator-list → using-declarator ELLIPSIS-opt 766 | using-declarator-list "," using-declarator ELLIPSIS-opt 767 using-directive → attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → "using" elaborated-enum-specifier ";" 769 virt-specifier → "override" 770 | "final" 771 virt-specifier-seq → virt-specifier 772 | virt-specifier-seq virt-specifier 773 virt-specifier-seq-opt → %empty 774 | virt-specifier-seq 775 yield-expression → "co_yield" assignment-expression 776 | "co_yield" braced-init-list 777 result → translation-unit
0 $accept → • result $end 9 EXTERN-opt → • %empty ["template"] 10 | • "extern" 13 INLINE-opt → • %empty ["namespace"] 14 | • "inline" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 71 attribute-declaration → • attribute-specifier-seq ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "using", "alignas", "(", "&", "asm", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 193 declaration → • block-declaration 194 | • nodeclspec-function-declaration 195 | • function-definition 196 | • template-declaration 197 | • deduction-guide 198 | • explicit-instantiation 199 | • explicit-specialization 200 | • export-declaration 201 | • linkage-specification 202 | • namespace-definition 203 | • empty-declaration 204 | • attribute-declaration 205 | • module-import-declaration 206 declaration-seq → • declaration 207 | • declaration-seq declaration 208 declaration-seq-opt → • %empty [$end] 209 | • declaration-seq 214 decltype-specifier → • "decltype" "(" expression ")" 215 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 233 empty-declaration → • ";" 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 264 explicit-instantiation → • EXTERN-opt "template" declaration 265 explicit-specialization → • "template" "<" ">" declaration 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 268 explicit-specifier-opt → • %empty [IDENTIFIER] 269 | • explicit-specifier 270 export-declaration → • "export" declaration 271 | • "export" "{" declaration-seq-opt "}" 272 | • "export" module-import-declaration 327 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 328 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 329 function-specifier → • "virtual" 330 | • explicit-specifier 332 global-module-fragment → • "module" ";" declaration-seq-opt 333 global-module-fragment-opt → • %empty ["export", "module"] 334 | • global-module-fragment 390 linkage-specification → • "extern" string-literal "{" declaration-seq-opt "}" 391 | • "extern" string-literal declaration 428 module-import-declaration → • "import" module-name attribute-specifier-seq-opt ";" 429 | • "import" module-partition attribute-specifier-seq-opt ";" 430 | • "import" header-name attribute-specifier-seq-opt ";" 443 named-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 447 namespace-definition → • named-namespace-definition 448 | • unnamed-namespace-definition 449 | • nested-namespace-definition 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 460 nested-namespace-definition → • "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" 476 nodeclspec-function-declaration → • attribute-specifier-seq-opt declarator ";" 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 690 template-declaration → • template-head declaration 691 | • template-head concept-definition 692 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 696 template-name → • IDENTIFIER 705 translation-unit → • declaration-seq-opt 706 | • global-module-fragment-opt module-declaration declaration-seq-opt private-module-fragment-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 754 unnamed-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body "}" 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" 777 result → • translation-unit "constexpr" shift, and go to state 1 "export" shift, and go to state 2 "extern" shift, and go to state 3 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 5 "::" shift, and go to state 6 "template" shift, and go to state 7 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 ";" shift, and go to state 11 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "module" shift, and go to state 24 "import" shift, and go to state 25 "namespace" shift, and go to state 26 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 $end reduce using rule 208 (declaration-seq-opt) "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "export" [reduce using rule 333 (global-module-fragment-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 268 (explicit-specifier-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "template" [reduce using rule 9 (EXTERN-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "module" [reduce using rule 333 (global-module-fragment-opt)] "namespace" [reduce using rule 13 (INLINE-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) EXTERN-opt go to state 45 INLINE-opt go to state 46 alias-declaration go to state 47 asm-declaration go to state 48 attribute-declaration go to state 49 attribute-specifier-seq go to state 50 attribute-specifier-seq-opt go to state 51 block-declaration go to state 52 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration go to state 60 declaration-seq go to state 61 declaration-seq-opt go to state 62 decltype-specifier go to state 63 deduction-guide go to state 64 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 empty-declaration go to state 68 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-instantiation go to state 73 explicit-specialization go to state 74 explicit-specifier go to state 75 explicit-specifier-opt go to state 76 export-declaration go to state 77 function-definition go to state 78 function-specifier go to state 79 global-module-fragment go to state 80 global-module-fragment-opt go to state 81 linkage-specification go to state 82 module-import-declaration go to state 83 named-namespace-definition go to state 84 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-definition go to state 87 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 nested-namespace-definition go to state 91 nodeclspec-function-declaration go to state 92 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-declaration go to state 100 template-head go to state 101 template-name go to state 102 translation-unit go to state 103 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 unnamed-namespace-definition go to state 110 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113 result go to state 114
185 decl-specifier → "constexpr" • $default reduce using rule 185 (decl-specifier)
9 EXTERN-opt → • %empty ["template"] 10 | • "extern" 13 INLINE-opt → • %empty ["namespace"] 14 | • "inline" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 71 attribute-declaration → • attribute-specifier-seq ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "using", "alignas", "(", "&", "asm", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 193 declaration → • block-declaration 194 | • nodeclspec-function-declaration 195 | • function-definition 196 | • template-declaration 197 | • deduction-guide 198 | • explicit-instantiation 199 | • explicit-specialization 200 | • export-declaration 201 | • linkage-specification 202 | • namespace-definition 203 | • empty-declaration 204 | • attribute-declaration 205 | • module-import-declaration 214 decltype-specifier → • "decltype" "(" expression ")" 215 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 233 empty-declaration → • ";" 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 264 explicit-instantiation → • EXTERN-opt "template" declaration 265 explicit-specialization → • "template" "<" ">" declaration 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 268 explicit-specifier-opt → • %empty [IDENTIFIER] 269 | • explicit-specifier 270 export-declaration → • "export" declaration 270 | "export" • declaration 271 | • "export" "{" declaration-seq-opt "}" 271 | "export" • "{" declaration-seq-opt "}" 272 | • "export" module-import-declaration 272 | "export" • module-import-declaration 327 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 328 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 329 function-specifier → • "virtual" 330 | • explicit-specifier 390 linkage-specification → • "extern" string-literal "{" declaration-seq-opt "}" 391 | • "extern" string-literal declaration 428 module-import-declaration → • "import" module-name attribute-specifier-seq-opt ";" 429 | • "import" module-partition attribute-specifier-seq-opt ";" 430 | • "import" header-name attribute-specifier-seq-opt ";" 443 named-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 447 namespace-definition → • named-namespace-definition 448 | • unnamed-namespace-definition 449 | • nested-namespace-definition 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 460 nested-namespace-definition → • "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" 476 nodeclspec-function-declaration → • attribute-specifier-seq-opt declarator ";" 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 690 template-declaration → • template-head declaration 691 | • template-head concept-definition 692 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 754 unnamed-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body "}" 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "export" shift, and go to state 2 "extern" shift, and go to state 3 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 5 "::" shift, and go to state 6 "template" shift, and go to state 7 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 ";" shift, and go to state 11 "{" shift, and go to state 115 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "import" shift, and go to state 25 "namespace" shift, and go to state 26 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 268 (explicit-specifier-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "template" [reduce using rule 9 (EXTERN-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "namespace" [reduce using rule 13 (INLINE-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) EXTERN-opt go to state 45 INLINE-opt go to state 46 alias-declaration go to state 47 asm-declaration go to state 48 attribute-declaration go to state 49 attribute-specifier-seq go to state 50 attribute-specifier-seq-opt go to state 51 block-declaration go to state 52 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration go to state 116 decltype-specifier go to state 63 deduction-guide go to state 64 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 empty-declaration go to state 68 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-instantiation go to state 73 explicit-specialization go to state 74 explicit-specifier go to state 75 explicit-specifier-opt go to state 76 export-declaration go to state 77 function-definition go to state 78 function-specifier go to state 79 linkage-specification go to state 82 module-import-declaration go to state 117 named-namespace-definition go to state 84 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-definition go to state 87 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 nested-namespace-definition go to state 91 nodeclspec-function-declaration go to state 92 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-declaration go to state 100 template-head go to state 101 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 unnamed-namespace-definition go to state 110 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
10 EXTERN-opt → "extern" • ["template"] 390 linkage-specification → "extern" • string-literal "{" declaration-seq-opt "}" 391 | "extern" • string-literal declaration 680 storage-class-specifier → "extern" • ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", ";", "alignas", "(", "&", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 682 string-literal → • STRING_LITERAL STRING_LITERAL shift, and go to state 118 "template" reduce using rule 10 (EXTERN-opt) $default reduce using rule 680 (storage-class-specifier) string-literal go to state 119
137 class-name → IDENTIFIER • ["::"] 246 enum-name → IDENTIFIER • ["::"] 444 namespace-alias → IDENTIFIER • ["::"] 450 namespace-name → IDENTIFIER • ["::"] 696 template-name → IDENTIFIER • ["<"] 731 typedef-name → IDENTIFIER • ["::"] "::" reduce using rule 137 (class-name) "::" [reduce using rule 246 (enum-name)] "::" [reduce using rule 444 (namespace-alias)] "::" [reduce using rule 450 (namespace-name)] "::" [reduce using rule 731 (typedef-name)] "<" reduce using rule 696 (template-name) $default reduce using rule 137 (class-name)
14 INLINE-opt → "inline" • ["namespace"] 188 decl-specifier → "inline" • ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", ";", "alignas", "(", "&", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] "namespace" reduce using rule 14 (INLINE-opt) $default reduce using rule 188 (decl-specifier)
452 nested-name-specifier → "::" • $default reduce using rule 452 (nested-name-specifier)
265 explicit-specialization → "template" • "<" ">" declaration 692 template-head → "template" • "<" template-parameter-list ">" requires-clause-opt "<" shift, and go to state 120
137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → "typename" • nested-name-specifier IDENTIFIER 734 | "typename" • nested-name-specifier TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "decltype" shift, and go to state 21 class-name go to state 55 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 122 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
329 function-specifier → "virtual" • $default reduce using rule 329 (function-specifier)
25 TYPENAME-opt → • %empty [IDENTIFIER, "::", "decltype"] 26 | • "typename" 44 alias-declaration → "using" • IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 763 using-declaration → "using" • using-declarator-list ";" 764 using-declarator → • TYPENAME-opt nested-name-specifier unqualified-id 765 using-declarator-list → • using-declarator ELLIPSIS-opt 766 | • using-declarator-list "," using-declarator ELLIPSIS-opt 768 using-enum-declaration → "using" • elaborated-enum-specifier ";" IDENTIFIER shift, and go to state 123 "typename" shift, and go to state 124 "enum" shift, and go to state 125 IDENTIFIER [reduce using rule 25 (TYPENAME-opt)] $default reduce using rule 25 (TYPENAME-opt) TYPENAME-opt go to state 126 elaborated-enum-specifier go to state 127 using-declarator go to state 128 using-declarator-list go to state 129
233 empty-declaration → ";" • $default reduce using rule 233 (empty-declaration)
134 class-key → "class" • $default reduce using rule 134 (class-key)
135 class-key → "struct" • $default reduce using rule 135 (class-key)
136 class-key → "union" • $default reduce using rule 136 (class-key)
175 cv-qualifier → "const" • $default reduce using rule 175 (cv-qualifier)
176 cv-qualifier → "volatile" • $default reduce using rule 176 (cv-qualifier)
183 decl-specifier → "friend" • $default reduce using rule 183 (decl-specifier)
184 decl-specifier → "typedef" • $default reduce using rule 184 (decl-specifier)
186 decl-specifier → "consteval" • $default reduce using rule 186 (decl-specifier)
187 decl-specifier → "constinit" • $default reduce using rule 187 (decl-specifier)
214 decltype-specifier → "decltype" • "(" expression ")" "(" shift, and go to state 130
137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 228 elaborated-enum-specifier → "enum" • nested-name-specifier-opt IDENTIFIER 243 enum-key → "enum" • [IDENTIFIER, "::", "alignas", "[", ":", "{", "decltype"] 244 | "enum" • "class" 245 | "enum" • "struct" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "class" shift, and go to state 131 "struct" shift, and go to state 132 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 243 (enum-key)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "::" [reduce using rule 243 (enum-key)] "decltype" [reduce using rule 243 (enum-key)] $default reduce using rule 243 (enum-key) class-name go to state 55 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 133 nested-name-specifier-opt go to state 134 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
266 explicit-specifier → "explicit" • "(" constant-expression ")" 267 | "explicit" • [",", "constexpr", "...", "extern", IDENTIFIER, "inline", "noexcept", "::", "typename", "virtual", "=", ";", "alignas", "(", ")", "&", "[", ":", "{", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", "enum", ">", "explicit", "*", "requires", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] "(" shift, and go to state 135 "(" [reduce using rule 267 (explicit-specifier)] $default reduce using rule 267 (explicit-specifier)
332 global-module-fragment → "module" • ";" declaration-seq-opt ";" shift, and go to state 136
339 header-name → • HEADER_NAME 428 module-import-declaration → "import" • module-name attribute-specifier-seq-opt ";" 429 | "import" • module-partition attribute-specifier-seq-opt ";" 430 | "import" • header-name attribute-specifier-seq-opt ";" 431 module-name → • module-name-qualifier-opt IDENTIFIER 432 module-name-qualifier → • IDENTIFIER "." 433 | • module-name-qualifier IDENTIFIER "." 434 module-name-qualifier-opt → • %empty [IDENTIFIER] 435 | • module-name-qualifier 436 module-partition → • ":" module-name-qualifier-opt IDENTIFIER IDENTIFIER shift, and go to state 137 ":" shift, and go to state 138 HEADER_NAME shift, and go to state 139 IDENTIFIER [reduce using rule 434 (module-name-qualifier-opt)] header-name go to state 140 module-name go to state 141 module-name-qualifier go to state 142 module-name-qualifier-opt go to state 143 module-partition go to state 144
234 enclosing-namespace-specifier → • IDENTIFIER 235 | • enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER 445 namespace-alias-definition → "namespace" • IDENTIFIER "=" qualified-namespace-specifier ";" 460 nested-namespace-definition → "namespace" • enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" IDENTIFIER shift, and go to state 145 enclosing-namespace-specifier go to state 146
650 simple-type-specifier → "char" • $default reduce using rule 650 (simple-type-specifier)
651 simple-type-specifier → "char8_t" • $default reduce using rule 651 (simple-type-specifier)
652 simple-type-specifier → "char16_t" • $default reduce using rule 652 (simple-type-specifier)
653 simple-type-specifier → "char32_t" • $default reduce using rule 653 (simple-type-specifier)
654 simple-type-specifier → "wchar_t" • $default reduce using rule 654 (simple-type-specifier)
655 simple-type-specifier → "bool" • $default reduce using rule 655 (simple-type-specifier)
656 simple-type-specifier → "short" • $default reduce using rule 656 (simple-type-specifier)
657 simple-type-specifier → "int" • $default reduce using rule 657 (simple-type-specifier)
658 simple-type-specifier → "long" • $default reduce using rule 658 (simple-type-specifier)
659 simple-type-specifier → "signed" • $default reduce using rule 659 (simple-type-specifier)
660 simple-type-specifier → "unsigned" • $default reduce using rule 660 (simple-type-specifier)
661 simple-type-specifier → "float" • $default reduce using rule 661 (simple-type-specifier)
662 simple-type-specifier → "double" • $default reduce using rule 662 (simple-type-specifier)
663 simple-type-specifier → "void" • $default reduce using rule 663 (simple-type-specifier)
676 static_assert-declaration → "static_assert" • "(" constant-expression ")" ";" 677 | "static_assert" • "(" constant-expression "," string-literal ")" ";" "(" shift, and go to state 147
678 storage-class-specifier → "static" • $default reduce using rule 678 (storage-class-specifier)
679 storage-class-specifier → "thread_local" • $default reduce using rule 679 (storage-class-specifier)
681 storage-class-specifier → "mutable" • $default reduce using rule 681 (storage-class-specifier)
264 explicit-instantiation → EXTERN-opt • "template" declaration "template" shift, and go to state 148
443 named-namespace-definition → INLINE-opt • "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 754 unnamed-namespace-definition → INLINE-opt • "namespace" attribute-specifier-seq-opt "{" namespace-body "}" "namespace" shift, and go to state 149
114 block-declaration → alias-declaration • $default reduce using rule 114 (block-declaration)
108 block-declaration → asm-declaration • $default reduce using rule 108 (block-declaration)
204 declaration → attribute-declaration • $default reduce using rule 204 (declaration)
71 attribute-declaration → attribute-specifier-seq • ";" 84 attribute-specifier-seq-opt → attribute-specifier-seq • ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "using", "alignas", "(", "&", "asm", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 329 function-specifier → • "virtual" 330 | • explicit-specifier 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 641 simple-declaration → attribute-specifier-seq • decl-specifier-seq init-declarator-list ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 151 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 ";" shift, and go to state 152 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 84 (attribute-specifier-seq-opt)] "extern" [reduce using rule 84 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 84 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 84 (attribute-specifier-seq-opt)] "::" [reduce using rule 84 (attribute-specifier-seq-opt)] "typename" [reduce using rule 84 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 84 (attribute-specifier-seq-opt)] "class" [reduce using rule 84 (attribute-specifier-seq-opt)] "struct" [reduce using rule 84 (attribute-specifier-seq-opt)] "union" [reduce using rule 84 (attribute-specifier-seq-opt)] "const" [reduce using rule 84 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 84 (attribute-specifier-seq-opt)] "friend" [reduce using rule 84 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 84 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 84 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 84 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 84 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 84 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 84 (attribute-specifier-seq-opt)] "auto" reduce using rule 84 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 84 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 84 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 84 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 84 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 84 (attribute-specifier-seq-opt)] "bool" [reduce using rule 84 (attribute-specifier-seq-opt)] "short" [reduce using rule 84 (attribute-specifier-seq-opt)] "int" [reduce using rule 84 (attribute-specifier-seq-opt)] "long" [reduce using rule 84 (attribute-specifier-seq-opt)] "signed" [reduce using rule 84 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 84 (attribute-specifier-seq-opt)] "float" [reduce using rule 84 (attribute-specifier-seq-opt)] "double" [reduce using rule 84 (attribute-specifier-seq-opt)] "void" [reduce using rule 84 (attribute-specifier-seq-opt)] "static" [reduce using rule 84 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 84 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 84 (attribute-specifier-seq-opt)] $default reduce using rule 84 (attribute-specifier-seq-opt) class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 153 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 154 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 155 function-specifier go to state 79 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109
5 ELLIPSIS-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 6 | • "..." 45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 49 asm-declaration → attribute-specifier-seq-opt • "asm" "(" string-literal ")" ";" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 191 decl-specifier-seq-opt → • %empty ["...", IDENTIFIER, "::", "(", "&", "&&", "operator", "decltype", "*", "~"] 192 | • decl-specifier-seq 211 declarator → • ptr-declarator 212 | • noptr-declarator parameters-and-qualifiers trailing-return-type 213 declarator-id → • ELLIPSIS-opt id-expression 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 327 function-definition → attribute-specifier-seq-opt • decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 328 | attribute-specifier-seq-opt • decl-specifier-seq-opt declarator requires-clause function-body 329 function-specifier → • "virtual" 330 | • explicit-specifier 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 476 nodeclspec-function-declaration → attribute-specifier-seq-opt • declarator ";" 490 noptr-declarator → • declarator-id attribute-specifier-seq-opt 491 | • noptr-declarator parameters-and-qualifiers 492 | • noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 493 | • "(" ptr-declarator ")" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 591 ptr-declarator → • noptr-declarator 592 | • ptr-operator ptr-declarator 593 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 594 | • "&" attribute-specifier-seq-opt 595 | • "&&" attribute-specifier-seq-opt 596 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 642 simple-declaration → attribute-specifier-seq-opt • decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 767 using-directive → attribute-specifier-seq-opt • "using" "namespace" nested-name-specifier-opt namespace-name ";" "constexpr" shift, and go to state 1 "..." shift, and go to state 156 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 151 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 157 "alignas" shift, and go to state 158 "(" shift, and go to state 159 "&" shift, and go to state 160 "asm" shift, and go to state 161 "[" shift, and go to state 162 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "&&" shift, and go to state 163 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "*" shift, and go to state 164 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "..." [reduce using rule 191 (decl-specifier-seq-opt)] IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] IDENTIFIER [reduce using rule 191 (decl-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "::" [reduce using rule 5 (ELLIPSIS-opt)] "::" [reduce using rule 191 (decl-specifier-seq-opt)] "(" [reduce using rule 191 (decl-specifier-seq-opt)] "&" [reduce using rule 191 (decl-specifier-seq-opt)] "&&" [reduce using rule 191 (decl-specifier-seq-opt)] "operator" reduce using rule 5 (ELLIPSIS-opt) "operator" [reduce using rule 191 (decl-specifier-seq-opt)] "decltype" [reduce using rule 5 (ELLIPSIS-opt)] "decltype" [reduce using rule 191 (decl-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "*" [reduce using rule 191 (decl-specifier-seq-opt)] "~" reduce using rule 5 (ELLIPSIS-opt) "~" [reduce using rule 191 (decl-specifier-seq-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 165 alignment-specifier go to state 166 attribute-specifier go to state 167 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 168 decl-specifier-seq-opt go to state 169 declarator go to state 170 declarator-id go to state 171 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 154 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 155 function-specifier go to state 79 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 172 nested-name-specifier-opt go to state 90 noptr-declarator go to state 173 placeholder-type-specifier go to state 94 ptr-declarator go to state 174 ptr-operator go to state 175 simple-template-id go to state 96 simple-type-specifier go to state 97 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109
193 declaration → block-declaration • $default reduce using rule 193 (declaration)
142 class-specifier → class-head • "{" member-specification-opt "}" "{" shift, and go to state 176
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty [IDENTIFIER, "::", "alignas", "[", ":", "{", "decltype"] 84 | • attribute-specifier-seq 131 class-head → class-key • attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | class-key • attribute-specifier-seq-opt base-clause-opt 137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 229 elaborated-type-specifier → class-key • attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | class-key • simple-template-id 231 | class-key • nested-name-specifier TEMPLATE-opt simple-template-id 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 178 class-name go to state 55 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 179 simple-template-id go to state 180 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
713 type-name → class-name • $default reduce using rule 713 (type-name)
218 defining-type-specifier → class-specifier • $default reduce using rule 218 (defining-type-specifier)
728 type-specifier → cv-qualifier • $default reduce using rule 728 (type-specifier)
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty [",", "...", IDENTIFIER, "noexcept", "::", "=", ";", "alignas", "(", ")", "&", "[", ":", "{", "&&", "operator", "decltype", "->", ">", "*", "requires", "~"] 84 | • attribute-specifier-seq 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 189 | decl-specifier • attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 190 | decl-specifier • decl-specifier-seq 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 329 function-specifier → • "virtual" 330 | • explicit-specifier 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 151 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 181 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 182 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 154 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 155 function-specifier go to state 79 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109
5 ELLIPSIS-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 6 | • "..." 137 class-name → • IDENTIFIER 138 | • simple-template-id 211 declarator → • ptr-declarator 212 | • noptr-declarator parameters-and-qualifiers trailing-return-type 213 declarator-id → • ELLIPSIS-opt id-expression 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 348 init-declarator → • declarator initializer-opt 349 | • declarator requires-clause 350 init-declarator-list → • init-declarator 351 | • init-declarator-list "," init-declarator 352 init-declarator-list-opt → • %empty [";"] 353 | • init-declarator-list 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 490 noptr-declarator → • declarator-id attribute-specifier-seq-opt 491 | • noptr-declarator parameters-and-qualifiers 492 | • noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 493 | • "(" ptr-declarator ")" 591 ptr-declarator → • noptr-declarator 592 | • ptr-operator ptr-declarator 593 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 594 | • "&" attribute-specifier-seq-opt 595 | • "&&" attribute-specifier-seq-opt 596 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 640 simple-declaration → decl-specifier-seq • init-declarator-list-opt ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id "..." shift, and go to state 156 IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 159 "&" shift, and go to state 160 "&&" shift, and go to state 163 "decltype" shift, and go to state 21 "*" shift, and go to state 164 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "::" [reduce using rule 5 (ELLIPSIS-opt)] ";" reduce using rule 352 (init-declarator-list-opt) "decltype" [reduce using rule 5 (ELLIPSIS-opt)] $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 165 class-name go to state 55 declarator go to state 183 declarator-id go to state 171 decltype-specifier go to state 121 enum-name go to state 71 init-declarator go to state 184 init-declarator-list go to state 185 init-declarator-list-opt go to state 186 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 187 noptr-declarator go to state 173 ptr-declarator go to state 174 ptr-operator go to state 175 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
206 declaration-seq → declaration • $default reduce using rule 206 (declaration-seq)
9 EXTERN-opt → • %empty ["template"] 10 | • "extern" 13 INLINE-opt → • %empty ["namespace"] 14 | • "inline" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 71 attribute-declaration → • attribute-specifier-seq ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "using", "alignas", "(", "&", "asm", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 193 declaration → • block-declaration 194 | • nodeclspec-function-declaration 195 | • function-definition 196 | • template-declaration 197 | • deduction-guide 198 | • explicit-instantiation 199 | • explicit-specialization 200 | • export-declaration 201 | • linkage-specification 202 | • namespace-definition 203 | • empty-declaration 204 | • attribute-declaration 205 | • module-import-declaration 207 declaration-seq → declaration-seq • declaration 209 declaration-seq-opt → declaration-seq • [$end, "export", "}", "module"] 214 decltype-specifier → • "decltype" "(" expression ")" 215 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 233 empty-declaration → • ";" 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 264 explicit-instantiation → • EXTERN-opt "template" declaration 265 explicit-specialization → • "template" "<" ">" declaration 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 268 explicit-specifier-opt → • %empty [IDENTIFIER] 269 | • explicit-specifier 270 export-declaration → • "export" declaration 271 | • "export" "{" declaration-seq-opt "}" 272 | • "export" module-import-declaration 327 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 328 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 329 function-specifier → • "virtual" 330 | • explicit-specifier 390 linkage-specification → • "extern" string-literal "{" declaration-seq-opt "}" 391 | • "extern" string-literal declaration 428 module-import-declaration → • "import" module-name attribute-specifier-seq-opt ";" 429 | • "import" module-partition attribute-specifier-seq-opt ";" 430 | • "import" header-name attribute-specifier-seq-opt ";" 443 named-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 447 namespace-definition → • named-namespace-definition 448 | • unnamed-namespace-definition 449 | • nested-namespace-definition 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 460 nested-namespace-definition → • "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" 476 nodeclspec-function-declaration → • attribute-specifier-seq-opt declarator ";" 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 690 template-declaration → • template-head declaration 691 | • template-head concept-definition 692 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 754 unnamed-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body "}" 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "export" shift, and go to state 2 "extern" shift, and go to state 3 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 5 "::" shift, and go to state 6 "template" shift, and go to state 7 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 ";" shift, and go to state 11 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "import" shift, and go to state 25 "namespace" shift, and go to state 26 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 $end reduce using rule 209 (declaration-seq-opt) "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "export" [reduce using rule 209 (declaration-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 268 (explicit-specifier-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "template" [reduce using rule 9 (EXTERN-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "}" reduce using rule 209 (declaration-seq-opt) "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "module" reduce using rule 209 (declaration-seq-opt) "namespace" [reduce using rule 13 (INLINE-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) EXTERN-opt go to state 45 INLINE-opt go to state 46 alias-declaration go to state 47 asm-declaration go to state 48 attribute-declaration go to state 49 attribute-specifier-seq go to state 50 attribute-specifier-seq-opt go to state 51 block-declaration go to state 52 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration go to state 188 decltype-specifier go to state 63 deduction-guide go to state 64 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 empty-declaration go to state 68 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-instantiation go to state 73 explicit-specialization go to state 74 explicit-specifier go to state 75 explicit-specifier-opt go to state 76 export-declaration go to state 77 function-definition go to state 78 function-specifier go to state 79 linkage-specification go to state 82 module-import-declaration go to state 83 named-namespace-definition go to state 84 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-definition go to state 87 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 nested-namespace-definition go to state 91 nodeclspec-function-declaration go to state 92 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-declaration go to state 100 template-head go to state 101 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 unnamed-namespace-definition go to state 110 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
705 translation-unit → declaration-seq-opt • $default reduce using rule 705 (translation-unit)
455 nested-name-specifier → decltype-specifier • "::" 647 simple-type-specifier → decltype-specifier • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] "::" shift, and go to state 189 "::" [reduce using rule 647 (simple-type-specifier)] $default reduce using rule 647 (simple-type-specifier)
197 declaration → deduction-guide • $default reduce using rule 197 (declaration)
181 decl-specifier → defining-type-specifier • $default reduce using rule 181 (decl-specifier)
232 elaborated-type-specifier → elaborated-enum-specifier • $default reduce using rule 232 (elaborated-type-specifier)
726 type-specifier → elaborated-type-specifier • $default reduce using rule 726 (type-specifier)
203 declaration → empty-declaration • $default reduce using rule 203 (declaration)
247 enum-specifier → enum-head • "{" enumerator-list-opt "}" 248 | enum-head • "{" enumerator-list "," "}" "{" shift, and go to state 190
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 239 enum-head → enum-key • attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 496 opaque-enum-declaration → enum-key • attribute-specifier-seq-opt enum-head-name enum-base-opt ";" $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 191
714 type-name → enum-name • $default reduce using rule 714 (type-name)
219 defining-type-specifier → enum-specifier • $default reduce using rule 219 (defining-type-specifier)
198 declaration → explicit-instantiation • $default reduce using rule 198 (declaration)
199 declaration → explicit-specialization • $default reduce using rule 199 (declaration)
269 explicit-specifier-opt → explicit-specifier • [IDENTIFIER] 330 function-specifier → explicit-specifier • ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", ";", "alignas", "(", "&", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] IDENTIFIER reduce using rule 269 (explicit-specifier-opt) IDENTIFIER [reduce using rule 330 (function-specifier)] $default reduce using rule 330 (function-specifier)
215 deduction-guide → explicit-specifier-opt • template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 696 template-name → • IDENTIFIER IDENTIFIER shift, and go to state 192 template-name go to state 193
200 declaration → export-declaration • $default reduce using rule 200 (declaration)
195 declaration → function-definition • $default reduce using rule 195 (declaration)
182 decl-specifier → function-specifier • $default reduce using rule 182 (decl-specifier)
334 global-module-fragment-opt → global-module-fragment • $default reduce using rule 334 (global-module-fragment-opt)
7 EXPORT-opt → • %empty ["module"] 8 | • "export" 427 module-declaration → • EXPORT-opt "module" module-name module-partition-opt attribute-specifier-seq-opt ";" 706 translation-unit → global-module-fragment-opt • module-declaration declaration-seq-opt private-module-fragment-opt "export" shift, and go to state 194 $default reduce using rule 7 (EXPORT-opt) EXPORT-opt go to state 195 module-declaration go to state 196
201 declaration → linkage-specification • $default reduce using rule 201 (declaration)
205 declaration → module-import-declaration • $default reduce using rule 205 (declaration)
447 namespace-definition → named-namespace-definition • $default reduce using rule 447 (namespace-definition)
451 namespace-name → namespace-alias • $default reduce using rule 451 (namespace-name)
109 block-declaration → namespace-alias-definition • $default reduce using rule 109 (block-declaration)
202 declaration → namespace-definition • $default reduce using rule 202 (declaration)
454 nested-name-specifier → namespace-name • "::" "::" shift, and go to state 197
21 TEMPLATE-opt → • %empty [IDENTIFIER] 22 | • "template" 456 nested-name-specifier → nested-name-specifier • IDENTIFIER "::" 457 | nested-name-specifier • TEMPLATE-opt simple-template-id "::" 459 nested-name-specifier-opt → nested-name-specifier • [IDENTIFIER] 646 simple-type-specifier → nested-name-specifier • "template" simple-template-id IDENTIFIER shift, and go to state 198 "template" shift, and go to state 199 IDENTIFIER [reduce using rule 21 (TEMPLATE-opt)] IDENTIFIER [reduce using rule 459 (nested-name-specifier-opt)] TEMPLATE-opt go to state 200
137 class-name → • IDENTIFIER 138 | • simple-template-id 151 concept-name → • IDENTIFIER 246 enum-name → • IDENTIFIER 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → nested-name-specifier-opt • type-name 649 | nested-name-specifier-opt • template-name 696 template-name → • IDENTIFIER 708 type-constraint → nested-name-specifier-opt • concept-name 709 | nested-name-specifier-opt • concept-name "<" template-argument-list-opt ">" 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 201 class-name go to state 55 concept-name go to state 202 enum-name go to state 71 simple-template-id go to state 96 template-name go to state 203 type-name go to state 204 typedef-name go to state 108
449 namespace-definition → nested-namespace-definition • $default reduce using rule 449 (namespace-definition)
194 declaration → nodeclspec-function-declaration • $default reduce using rule 194 (declaration)
115 block-declaration → opaque-enum-declaration • $default reduce using rule 115 (block-declaration)
648 simple-type-specifier → placeholder-type-specifier • $default reduce using rule 648 (simple-type-specifier)
107 block-declaration → simple-declaration • $default reduce using rule 107 (block-declaration)
138 class-name → simple-template-id • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 732 typedef-name → simple-template-id • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] "," reduce using rule 138 (class-name) "," [reduce using rule 732 (typedef-name)] "constexpr" reduce using rule 138 (class-name) "constexpr" [reduce using rule 732 (typedef-name)] "..." reduce using rule 138 (class-name) "..." [reduce using rule 732 (typedef-name)] "export" reduce using rule 138 (class-name) "export" [reduce using rule 732 (typedef-name)] "extern" reduce using rule 138 (class-name) "extern" [reduce using rule 732 (typedef-name)] IDENTIFIER reduce using rule 138 (class-name) IDENTIFIER [reduce using rule 732 (typedef-name)] "inline" reduce using rule 138 (class-name) "inline" [reduce using rule 732 (typedef-name)] "noexcept" reduce using rule 138 (class-name) "noexcept" [reduce using rule 732 (typedef-name)] "::" reduce using rule 138 (class-name) "::" [reduce using rule 732 (typedef-name)] "template" reduce using rule 138 (class-name) "template" [reduce using rule 732 (typedef-name)] "typename" reduce using rule 138 (class-name) "typename" [reduce using rule 732 (typedef-name)] "virtual" reduce using rule 138 (class-name) "virtual" [reduce using rule 732 (typedef-name)] "+" reduce using rule 138 (class-name) "+" [reduce using rule 732 (typedef-name)] "-" reduce using rule 138 (class-name) "-" [reduce using rule 732 (typedef-name)] "using" reduce using rule 138 (class-name) "using" [reduce using rule 732 (typedef-name)] "=" reduce using rule 138 (class-name) "=" [reduce using rule 732 (typedef-name)] ";" reduce using rule 138 (class-name) ";" [reduce using rule 732 (typedef-name)] "alignas" reduce using rule 138 (class-name) "alignas" [reduce using rule 732 (typedef-name)] "(" reduce using rule 138 (class-name) "(" [reduce using rule 732 (typedef-name)] ")" reduce using rule 138 (class-name) ")" [reduce using rule 732 (typedef-name)] "&" reduce using rule 138 (class-name) "&" [reduce using rule 732 (typedef-name)] "asm" reduce using rule 138 (class-name) "asm" [reduce using rule 732 (typedef-name)] "*=" reduce using rule 138 (class-name) "*=" [reduce using rule 732 (typedef-name)] "/=" reduce using rule 138 (class-name) "/=" [reduce using rule 732 (typedef-name)] "%=" reduce using rule 138 (class-name) "%=" [reduce using rule 732 (typedef-name)] "+=" reduce using rule 138 (class-name) "+=" [reduce using rule 732 (typedef-name)] "-=" reduce using rule 138 (class-name) "-=" [reduce using rule 732 (typedef-name)] ">>=" reduce using rule 138 (class-name) ">>=" [reduce using rule 732 (typedef-name)] "<<=" reduce using rule 138 (class-name) "<<=" [reduce using rule 732 (typedef-name)] "&=" reduce using rule 138 (class-name) "&=" [reduce using rule 732 (typedef-name)] "^=" reduce using rule 138 (class-name) "^=" [reduce using rule 732 (typedef-name)] "|=" reduce using rule 138 (class-name) "|=" [reduce using rule 732 (typedef-name)] "[" reduce using rule 138 (class-name) "[" [reduce using rule 732 (typedef-name)] "]" reduce using rule 138 (class-name) "]" [reduce using rule 732 (typedef-name)] ":" reduce using rule 138 (class-name) ":" [reduce using rule 732 (typedef-name)] "{" reduce using rule 138 (class-name) "{" [reduce using rule 732 (typedef-name)] "}" reduce using rule 138 (class-name) "}" [reduce using rule 732 (typedef-name)] "class" reduce using rule 138 (class-name) "class" [reduce using rule 732 (typedef-name)] "struct" reduce using rule 138 (class-name) "struct" [reduce using rule 732 (typedef-name)] "union" reduce using rule 138 (class-name) "union" [reduce using rule 732 (typedef-name)] "final" reduce using rule 138 (class-name) "final" [reduce using rule 732 (typedef-name)] "<=>" reduce using rule 138 (class-name) "<=>" [reduce using rule 732 (typedef-name)] "concept" reduce using rule 138 (class-name) "concept" [reduce using rule 732 (typedef-name)] "?" reduce using rule 138 (class-name) "?" [reduce using rule 732 (typedef-name)] "&&" reduce using rule 138 (class-name) "&&" [reduce using rule 732 (typedef-name)] "||" reduce using rule 138 (class-name) "||" [reduce using rule 732 (typedef-name)] "operator" reduce using rule 138 (class-name) "operator" [reduce using rule 732 (typedef-name)] "const" reduce using rule 138 (class-name) "const" [reduce using rule 732 (typedef-name)] "volatile" reduce using rule 138 (class-name) "volatile" [reduce using rule 732 (typedef-name)] "friend" reduce using rule 138 (class-name) "friend" [reduce using rule 732 (typedef-name)] "typedef" reduce using rule 138 (class-name) "typedef" [reduce using rule 732 (typedef-name)] "consteval" reduce using rule 138 (class-name) "consteval" [reduce using rule 732 (typedef-name)] "constinit" reduce using rule 138 (class-name) "constinit" [reduce using rule 732 (typedef-name)] "decltype" reduce using rule 138 (class-name) "decltype" [reduce using rule 732 (typedef-name)] "->" reduce using rule 138 (class-name) "->" [reduce using rule 732 (typedef-name)] "." reduce using rule 138 (class-name) "." [reduce using rule 732 (typedef-name)] "enum" reduce using rule 138 (class-name) "enum" [reduce using rule 732 (typedef-name)] "==" reduce using rule 138 (class-name) "==" [reduce using rule 732 (typedef-name)] "!=" reduce using rule 138 (class-name) "!=" [reduce using rule 732 (typedef-name)] "^" reduce using rule 138 (class-name) "^" [reduce using rule 732 (typedef-name)] "<" reduce using rule 138 (class-name) "<" [reduce using rule 732 (typedef-name)] ">" reduce using rule 138 (class-name) ">" [reduce using rule 732 (typedef-name)] "explicit" reduce using rule 138 (class-name) "explicit" [reduce using rule 732 (typedef-name)] "*" reduce using rule 138 (class-name) "*" [reduce using rule 732 (typedef-name)] "/" reduce using rule 138 (class-name) "/" [reduce using rule 732 (typedef-name)] "%" reduce using rule 138 (class-name) "%" [reduce using rule 732 (typedef-name)] "|" reduce using rule 138 (class-name) "|" [reduce using rule 732 (typedef-name)] "<<" reduce using rule 138 (class-name) "<<" [reduce using rule 732 (typedef-name)] ">>" reduce using rule 138 (class-name) ">>" [reduce using rule 732 (typedef-name)] "<=" reduce using rule 138 (class-name) "<=" [reduce using rule 732 (typedef-name)] ">=" reduce using rule 138 (class-name) ">=" [reduce using rule 732 (typedef-name)] ".*" reduce using rule 138 (class-name) ".*" [reduce using rule 732 (typedef-name)] "->*" reduce using rule 138 (class-name) "->*" [reduce using rule 732 (typedef-name)] "try" reduce using rule 138 (class-name) "try" [reduce using rule 732 (typedef-name)] "import" reduce using rule 138 (class-name) "import" [reduce using rule 732 (typedef-name)] "namespace" reduce using rule 138 (class-name) "namespace" [reduce using rule 732 (typedef-name)] "requires" reduce using rule 138 (class-name) "requires" [reduce using rule 732 (typedef-name)] "~" reduce using rule 138 (class-name) "~" [reduce using rule 732 (typedef-name)] "++" reduce using rule 138 (class-name) "++" [reduce using rule 732 (typedef-name)] "--" reduce using rule 138 (class-name) "--" [reduce using rule 732 (typedef-name)] "auto" reduce using rule 138 (class-name) "auto" [reduce using rule 732 (typedef-name)] "char" reduce using rule 138 (class-name) "char" [reduce using rule 732 (typedef-name)] "char8_t" reduce using rule 138 (class-name) "char8_t" [reduce using rule 732 (typedef-name)] "char16_t" reduce using rule 138 (class-name) "char16_t" [reduce using rule 732 (typedef-name)] "char32_t" reduce using rule 138 (class-name) "char32_t" [reduce using rule 732 (typedef-name)] "wchar_t" reduce using rule 138 (class-name) "wchar_t" [reduce using rule 732 (typedef-name)] "bool" reduce using rule 138 (class-name) "bool" [reduce using rule 732 (typedef-name)] "short" reduce using rule 138 (class-name) "short" [reduce using rule 732 (typedef-name)] "int" reduce using rule 138 (class-name) "int" [reduce using rule 732 (typedef-name)] "long" reduce using rule 138 (class-name) "long" [reduce using rule 732 (typedef-name)] "signed" reduce using rule 138 (class-name) "signed" [reduce using rule 732 (typedef-name)] "unsigned" reduce using rule 138 (class-name) "unsigned" [reduce using rule 732 (typedef-name)] "float" reduce using rule 138 (class-name) "float" [reduce using rule 732 (typedef-name)] "double" reduce using rule 138 (class-name) "double" [reduce using rule 732 (typedef-name)] "void" reduce using rule 138 (class-name) "void" [reduce using rule 732 (typedef-name)] "static_assert" reduce using rule 138 (class-name) "static_assert" [reduce using rule 732 (typedef-name)] "static" reduce using rule 138 (class-name) "static" [reduce using rule 732 (typedef-name)] "thread_local" reduce using rule 138 (class-name) "thread_local" [reduce using rule 732 (typedef-name)] "mutable" reduce using rule 138 (class-name) "mutable" [reduce using rule 732 (typedef-name)] "override" reduce using rule 138 (class-name) "override" [reduce using rule 732 (typedef-name)] $default reduce using rule 138 (class-name)
725 type-specifier → simple-type-specifier • $default reduce using rule 725 (type-specifier)
113 block-declaration → static_assert-declaration • $default reduce using rule 113 (block-declaration)
180 decl-specifier → storage-class-specifier • $default reduce using rule 180 (decl-specifier)
196 declaration → template-declaration • $default reduce using rule 196 (declaration)
9 EXTERN-opt → • %empty ["template"] 10 | • "extern" 13 INLINE-opt → • %empty ["namespace"] 14 | • "inline" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 71 attribute-declaration → • attribute-specifier-seq ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "using", "alignas", "(", "&", "asm", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 150 concept-definition → • "concept" concept-name "=" constraint-expression ";" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 193 declaration → • block-declaration 194 | • nodeclspec-function-declaration 195 | • function-definition 196 | • template-declaration 197 | • deduction-guide 198 | • explicit-instantiation 199 | • explicit-specialization 200 | • export-declaration 201 | • linkage-specification 202 | • namespace-definition 203 | • empty-declaration 204 | • attribute-declaration 205 | • module-import-declaration 214 decltype-specifier → • "decltype" "(" expression ")" 215 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 233 empty-declaration → • ";" 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 264 explicit-instantiation → • EXTERN-opt "template" declaration 265 explicit-specialization → • "template" "<" ">" declaration 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 268 explicit-specifier-opt → • %empty [IDENTIFIER] 269 | • explicit-specifier 270 export-declaration → • "export" declaration 271 | • "export" "{" declaration-seq-opt "}" 272 | • "export" module-import-declaration 327 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 328 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 329 function-specifier → • "virtual" 330 | • explicit-specifier 390 linkage-specification → • "extern" string-literal "{" declaration-seq-opt "}" 391 | • "extern" string-literal declaration 428 module-import-declaration → • "import" module-name attribute-specifier-seq-opt ";" 429 | • "import" module-partition attribute-specifier-seq-opt ";" 430 | • "import" header-name attribute-specifier-seq-opt ";" 443 named-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 447 namespace-definition → • named-namespace-definition 448 | • unnamed-namespace-definition 449 | • nested-namespace-definition 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 460 nested-namespace-definition → • "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" 476 nodeclspec-function-declaration → • attribute-specifier-seq-opt declarator ";" 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 690 template-declaration → • template-head declaration 690 | template-head • declaration 691 | • template-head concept-definition 691 | template-head • concept-definition 692 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 754 unnamed-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body "}" 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "export" shift, and go to state 2 "extern" shift, and go to state 3 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 5 "::" shift, and go to state 6 "template" shift, and go to state 7 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 ";" shift, and go to state 11 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "concept" shift, and go to state 205 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "import" shift, and go to state 25 "namespace" shift, and go to state 26 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 268 (explicit-specifier-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "template" [reduce using rule 9 (EXTERN-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "namespace" [reduce using rule 13 (INLINE-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) EXTERN-opt go to state 45 INLINE-opt go to state 46 alias-declaration go to state 47 asm-declaration go to state 48 attribute-declaration go to state 49 attribute-specifier-seq go to state 50 attribute-specifier-seq-opt go to state 51 block-declaration go to state 52 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 concept-definition go to state 206 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration go to state 207 decltype-specifier go to state 63 deduction-guide go to state 64 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 empty-declaration go to state 68 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-instantiation go to state 73 explicit-specialization go to state 74 explicit-specifier go to state 75 explicit-specifier-opt go to state 76 export-declaration go to state 77 function-definition go to state 78 function-specifier go to state 79 linkage-specification go to state 82 module-import-declaration go to state 83 named-namespace-definition go to state 84 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-definition go to state 87 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 nested-namespace-definition go to state 91 nodeclspec-function-declaration go to state 92 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-declaration go to state 100 template-head go to state 101 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 unnamed-namespace-definition go to state 110 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
644 simple-template-id → template-name • "<" template-argument-list-opt ">" "<" shift, and go to state 208
777 result → translation-unit • $default reduce using rule 777 (result)
711 type-constraint-opt → type-constraint • $default reduce using rule 711 (type-constraint-opt)
554 placeholder-type-specifier → type-constraint-opt • "auto" 555 | type-constraint-opt • "decltype" "(" "auto" ")" "decltype" shift, and go to state 209 "auto" shift, and go to state 210
453 nested-name-specifier → type-name • "::" "::" shift, and go to state 211
217 defining-type-specifier → type-specifier • $default reduce using rule 217 (defining-type-specifier)
715 type-name → typedef-name • $default reduce using rule 715 (type-name)
727 type-specifier → typename-specifier • $default reduce using rule 727 (type-specifier)
448 namespace-definition → unnamed-namespace-definition • $default reduce using rule 448 (namespace-definition)
110 block-declaration → using-declaration • $default reduce using rule 110 (block-declaration)
112 block-declaration → using-directive • $default reduce using rule 112 (block-declaration)
111 block-declaration → using-enum-declaration • $default reduce using rule 111 (block-declaration)
0 $accept → result • $end $end shift, and go to state 212
9 EXTERN-opt → • %empty ["template"] 10 | • "extern" 13 INLINE-opt → • %empty ["namespace"] 14 | • "inline" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 71 attribute-declaration → • attribute-specifier-seq ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "using", "alignas", "(", "&", "asm", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 193 declaration → • block-declaration 194 | • nodeclspec-function-declaration 195 | • function-definition 196 | • template-declaration 197 | • deduction-guide 198 | • explicit-instantiation 199 | • explicit-specialization 200 | • export-declaration 201 | • linkage-specification 202 | • namespace-definition 203 | • empty-declaration 204 | • attribute-declaration 205 | • module-import-declaration 206 declaration-seq → • declaration 207 | • declaration-seq declaration 208 declaration-seq-opt → • %empty ["}"] 209 | • declaration-seq 214 decltype-specifier → • "decltype" "(" expression ")" 215 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 233 empty-declaration → • ";" 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 264 explicit-instantiation → • EXTERN-opt "template" declaration 265 explicit-specialization → • "template" "<" ">" declaration 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 268 explicit-specifier-opt → • %empty [IDENTIFIER] 269 | • explicit-specifier 270 export-declaration → • "export" declaration 271 | • "export" "{" declaration-seq-opt "}" 271 | "export" "{" • declaration-seq-opt "}" 272 | • "export" module-import-declaration 327 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 328 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 329 function-specifier → • "virtual" 330 | • explicit-specifier 390 linkage-specification → • "extern" string-literal "{" declaration-seq-opt "}" 391 | • "extern" string-literal declaration 428 module-import-declaration → • "import" module-name attribute-specifier-seq-opt ";" 429 | • "import" module-partition attribute-specifier-seq-opt ";" 430 | • "import" header-name attribute-specifier-seq-opt ";" 443 named-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 447 namespace-definition → • named-namespace-definition 448 | • unnamed-namespace-definition 449 | • nested-namespace-definition 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 460 nested-namespace-definition → • "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" 476 nodeclspec-function-declaration → • attribute-specifier-seq-opt declarator ";" 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 690 template-declaration → • template-head declaration 691 | • template-head concept-definition 692 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 754 unnamed-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body "}" 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "export" shift, and go to state 2 "extern" shift, and go to state 3 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 5 "::" shift, and go to state 6 "template" shift, and go to state 7 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 ";" shift, and go to state 11 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "import" shift, and go to state 25 "namespace" shift, and go to state 26 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 268 (explicit-specifier-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "template" [reduce using rule 9 (EXTERN-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "}" reduce using rule 208 (declaration-seq-opt) "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "namespace" [reduce using rule 13 (INLINE-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) EXTERN-opt go to state 45 INLINE-opt go to state 46 alias-declaration go to state 47 asm-declaration go to state 48 attribute-declaration go to state 49 attribute-specifier-seq go to state 50 attribute-specifier-seq-opt go to state 51 block-declaration go to state 52 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration go to state 60 declaration-seq go to state 61 declaration-seq-opt go to state 213 decltype-specifier go to state 63 deduction-guide go to state 64 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 empty-declaration go to state 68 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-instantiation go to state 73 explicit-specialization go to state 74 explicit-specifier go to state 75 explicit-specifier-opt go to state 76 export-declaration go to state 77 function-definition go to state 78 function-specifier go to state 79 linkage-specification go to state 82 module-import-declaration go to state 83 named-namespace-definition go to state 84 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-definition go to state 87 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 nested-namespace-definition go to state 91 nodeclspec-function-declaration go to state 92 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-declaration go to state 100 template-head go to state 101 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 unnamed-namespace-definition go to state 110 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
270 export-declaration → "export" declaration • $default reduce using rule 270 (export-declaration)
205 declaration → module-import-declaration • [$end, "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "::", "template", "typename", "virtual", "private", "protected", "public", "using", ";", "alignas", "(", "&", "asm", "[", ":", "}", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "module", "import", "namespace", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable"] 272 export-declaration → "export" module-import-declaration • [$end, "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "::", "template", "typename", "virtual", "private", "protected", "public", "using", ";", "alignas", "(", "&", "asm", "[", ":", "}", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "module", "import", "namespace", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable"] $end reduce using rule 205 (declaration) $end [reduce using rule 272 (export-declaration)] "constexpr" reduce using rule 205 (declaration) "constexpr" [reduce using rule 272 (export-declaration)] "..." reduce using rule 205 (declaration) "..." [reduce using rule 272 (export-declaration)] "export" reduce using rule 205 (declaration) "export" [reduce using rule 272 (export-declaration)] "extern" reduce using rule 205 (declaration) "extern" [reduce using rule 272 (export-declaration)] IDENTIFIER reduce using rule 205 (declaration) IDENTIFIER [reduce using rule 272 (export-declaration)] "inline" reduce using rule 205 (declaration) "inline" [reduce using rule 272 (export-declaration)] "::" reduce using rule 205 (declaration) "::" [reduce using rule 272 (export-declaration)] "template" reduce using rule 205 (declaration) "template" [reduce using rule 272 (export-declaration)] "typename" reduce using rule 205 (declaration) "typename" [reduce using rule 272 (export-declaration)] "virtual" reduce using rule 205 (declaration) "virtual" [reduce using rule 272 (export-declaration)] "private" reduce using rule 205 (declaration) "private" [reduce using rule 272 (export-declaration)] "protected" reduce using rule 205 (declaration) "protected" [reduce using rule 272 (export-declaration)] "public" reduce using rule 205 (declaration) "public" [reduce using rule 272 (export-declaration)] "using" reduce using rule 205 (declaration) "using" [reduce using rule 272 (export-declaration)] ";" reduce using rule 205 (declaration) ";" [reduce using rule 272 (export-declaration)] "alignas" reduce using rule 205 (declaration) "alignas" [reduce using rule 272 (export-declaration)] "(" reduce using rule 205 (declaration) "(" [reduce using rule 272 (export-declaration)] "&" reduce using rule 205 (declaration) "&" [reduce using rule 272 (export-declaration)] "asm" reduce using rule 205 (declaration) "asm" [reduce using rule 272 (export-declaration)] "[" reduce using rule 205 (declaration) "[" [reduce using rule 272 (export-declaration)] ":" reduce using rule 205 (declaration) ":" [reduce using rule 272 (export-declaration)] "}" reduce using rule 205 (declaration) "}" [reduce using rule 272 (export-declaration)] "class" reduce using rule 205 (declaration) "class" [reduce using rule 272 (export-declaration)] "struct" reduce using rule 205 (declaration) "struct" [reduce using rule 272 (export-declaration)] "union" reduce using rule 205 (declaration) "union" [reduce using rule 272 (export-declaration)] "&&" reduce using rule 205 (declaration) "&&" [reduce using rule 272 (export-declaration)] "operator" reduce using rule 205 (declaration) "operator" [reduce using rule 272 (export-declaration)] "const" reduce using rule 205 (declaration) "const" [reduce using rule 272 (export-declaration)] "volatile" reduce using rule 205 (declaration) "volatile" [reduce using rule 272 (export-declaration)] "friend" reduce using rule 205 (declaration) "friend" [reduce using rule 272 (export-declaration)] "typedef" reduce using rule 205 (declaration) "typedef" [reduce using rule 272 (export-declaration)] "consteval" reduce using rule 205 (declaration) "consteval" [reduce using rule 272 (export-declaration)] "constinit" reduce using rule 205 (declaration) "constinit" [reduce using rule 272 (export-declaration)] "decltype" reduce using rule 205 (declaration) "decltype" [reduce using rule 272 (export-declaration)] "enum" reduce using rule 205 (declaration) "enum" [reduce using rule 272 (export-declaration)] "explicit" reduce using rule 205 (declaration) "explicit" [reduce using rule 272 (export-declaration)] "*" reduce using rule 205 (declaration) "*" [reduce using rule 272 (export-declaration)] "module" reduce using rule 205 (declaration) "module" [reduce using rule 272 (export-declaration)] "import" reduce using rule 205 (declaration) "import" [reduce using rule 272 (export-declaration)] "namespace" reduce using rule 205 (declaration) "namespace" [reduce using rule 272 (export-declaration)] "~" reduce using rule 205 (declaration) "~" [reduce using rule 272 (export-declaration)] "auto" reduce using rule 205 (declaration) "auto" [reduce using rule 272 (export-declaration)] "char" reduce using rule 205 (declaration) "char" [reduce using rule 272 (export-declaration)] "char8_t" reduce using rule 205 (declaration) "char8_t" [reduce using rule 272 (export-declaration)] "char16_t" reduce using rule 205 (declaration) "char16_t" [reduce using rule 272 (export-declaration)] "char32_t" reduce using rule 205 (declaration) "char32_t" [reduce using rule 272 (export-declaration)] "wchar_t" reduce using rule 205 (declaration) "wchar_t" [reduce using rule 272 (export-declaration)] "bool" reduce using rule 205 (declaration) "bool" [reduce using rule 272 (export-declaration)] "short" reduce using rule 205 (declaration) "short" [reduce using rule 272 (export-declaration)] "int" reduce using rule 205 (declaration) "int" [reduce using rule 272 (export-declaration)] "long" reduce using rule 205 (declaration) "long" [reduce using rule 272 (export-declaration)] "signed" reduce using rule 205 (declaration) "signed" [reduce using rule 272 (export-declaration)] "unsigned" reduce using rule 205 (declaration) "unsigned" [reduce using rule 272 (export-declaration)] "float" reduce using rule 205 (declaration) "float" [reduce using rule 272 (export-declaration)] "double" reduce using rule 205 (declaration) "double" [reduce using rule 272 (export-declaration)] "void" reduce using rule 205 (declaration) "void" [reduce using rule 272 (export-declaration)] "static_assert" reduce using rule 205 (declaration) "static_assert" [reduce using rule 272 (export-declaration)] "static" reduce using rule 205 (declaration) "static" [reduce using rule 272 (export-declaration)] "thread_local" reduce using rule 205 (declaration) "thread_local" [reduce using rule 272 (export-declaration)] "mutable" reduce using rule 205 (declaration) "mutable" [reduce using rule 272 (export-declaration)] $default reduce using rule 205 (declaration)
682 string-literal → STRING_LITERAL • $default reduce using rule 682 (string-literal)
9 EXTERN-opt → • %empty ["template"] 10 | • "extern" 13 INLINE-opt → • %empty ["namespace"] 14 | • "inline" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 71 attribute-declaration → • attribute-specifier-seq ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "using", "alignas", "(", "&", "asm", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 193 declaration → • block-declaration 194 | • nodeclspec-function-declaration 195 | • function-definition 196 | • template-declaration 197 | • deduction-guide 198 | • explicit-instantiation 199 | • explicit-specialization 200 | • export-declaration 201 | • linkage-specification 202 | • namespace-definition 203 | • empty-declaration 204 | • attribute-declaration 205 | • module-import-declaration 214 decltype-specifier → • "decltype" "(" expression ")" 215 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 233 empty-declaration → • ";" 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 264 explicit-instantiation → • EXTERN-opt "template" declaration 265 explicit-specialization → • "template" "<" ">" declaration 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 268 explicit-specifier-opt → • %empty [IDENTIFIER] 269 | • explicit-specifier 270 export-declaration → • "export" declaration 271 | • "export" "{" declaration-seq-opt "}" 272 | • "export" module-import-declaration 327 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 328 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 329 function-specifier → • "virtual" 330 | • explicit-specifier 390 linkage-specification → • "extern" string-literal "{" declaration-seq-opt "}" 390 | "extern" string-literal • "{" declaration-seq-opt "}" 391 | • "extern" string-literal declaration 391 | "extern" string-literal • declaration 428 module-import-declaration → • "import" module-name attribute-specifier-seq-opt ";" 429 | • "import" module-partition attribute-specifier-seq-opt ";" 430 | • "import" header-name attribute-specifier-seq-opt ";" 443 named-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 447 namespace-definition → • named-namespace-definition 448 | • unnamed-namespace-definition 449 | • nested-namespace-definition 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 460 nested-namespace-definition → • "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" 476 nodeclspec-function-declaration → • attribute-specifier-seq-opt declarator ";" 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 690 template-declaration → • template-head declaration 691 | • template-head concept-definition 692 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 754 unnamed-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body "}" 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "export" shift, and go to state 2 "extern" shift, and go to state 3 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 5 "::" shift, and go to state 6 "template" shift, and go to state 7 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 ";" shift, and go to state 11 "{" shift, and go to state 214 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "import" shift, and go to state 25 "namespace" shift, and go to state 26 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 268 (explicit-specifier-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "template" [reduce using rule 9 (EXTERN-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "namespace" [reduce using rule 13 (INLINE-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) EXTERN-opt go to state 45 INLINE-opt go to state 46 alias-declaration go to state 47 asm-declaration go to state 48 attribute-declaration go to state 49 attribute-specifier-seq go to state 50 attribute-specifier-seq-opt go to state 51 block-declaration go to state 52 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration go to state 215 decltype-specifier go to state 63 deduction-guide go to state 64 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 empty-declaration go to state 68 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-instantiation go to state 73 explicit-specialization go to state 74 explicit-specifier go to state 75 explicit-specifier-opt go to state 76 export-declaration go to state 77 function-definition go to state 78 function-specifier go to state 79 linkage-specification go to state 82 module-import-declaration go to state 83 named-namespace-definition go to state 84 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-definition go to state 87 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 nested-namespace-definition go to state 91 nodeclspec-function-declaration go to state 92 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-declaration go to state 100 template-head go to state 101 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 unnamed-namespace-definition go to state 110 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "this", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 265 explicit-specialization → "template" "<" • ">" declaration 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 543 parameter-declaration → • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator 544 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator "=" initializer-clause 545 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt 546 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt "=" initializer-clause 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 692 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 692 | "template" "<" • template-parameter-list ">" requires-clause-opt 696 template-name → • IDENTIFIER 697 template-parameter → • type-parameter 698 | • parameter-declaration 699 template-parameter-list → • template-parameter 700 | • template-parameter-list "," template-parameter 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 716 type-parameter → • type-parameter-key ELLIPSIS-opt IDENTIFIER-opt 717 | • type-parameter-key IDENTIFIER-opt "=" type-id 718 | • type-constraint ELLIPSIS-opt IDENTIFIER-opt 719 | • type-constraint IDENTIFIER-opt "=" type-id 720 | • template-head type-parameter-key ELLIPSIS-opt IDENTIFIER-opt 721 | • template-head type-parameter-key IDENTIFIER-opt "=" id-expression 722 type-parameter-key → • "class" 723 | • "typename" 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "template" shift, and go to state 216 "typename" shift, and go to state 217 "class" shift, and go to state 218 "decltype" shift, and go to state 21 ">" shift, and go to state 219 IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 220 class-name go to state 55 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 133 nested-name-specifier-opt go to state 221 parameter-declaration go to state 222 simple-template-id go to state 96 template-head go to state 223 template-name go to state 102 template-parameter go to state 224 template-parameter-list go to state 225 type-constraint go to state 226 type-name go to state 106 type-parameter go to state 227 type-parameter-key go to state 228 typedef-name go to state 108
455 nested-name-specifier → decltype-specifier • "::" "::" shift, and go to state 189
21 TEMPLATE-opt → • %empty [IDENTIFIER] 22 | • "template" 456 nested-name-specifier → nested-name-specifier • IDENTIFIER "::" 457 | nested-name-specifier • TEMPLATE-opt simple-template-id "::" 733 typename-specifier → "typename" nested-name-specifier • IDENTIFIER 734 | "typename" nested-name-specifier • TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 229 "template" shift, and go to state 230 IDENTIFIER [reduce using rule 21 (TEMPLATE-opt)] TEMPLATE-opt go to state 231
44 alias-declaration → "using" IDENTIFIER • attribute-specifier-seq-opt "=" defining-type-id ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 232
26 TYPENAME-opt → "typename" • $default reduce using rule 26 (TYPENAME-opt)
137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 228 elaborated-enum-specifier → "enum" • nested-name-specifier-opt IDENTIFIER 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] class-name go to state 55 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 133 nested-name-specifier-opt go to state 134 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 764 using-declarator → TYPENAME-opt • nested-name-specifier unqualified-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "decltype" shift, and go to state 21 class-name go to state 55 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 233 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
768 using-enum-declaration → "using" elaborated-enum-specifier • ";" ";" shift, and go to state 234
5 ELLIPSIS-opt → • %empty [",", ";"] 6 | • "..." 765 using-declarator-list → using-declarator • ELLIPSIS-opt "..." shift, and go to state 156 $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 235
763 using-declaration → "using" using-declarator-list • ";" 766 using-declarator-list → using-declarator-list • "," using-declarator ELLIPSIS-opt "," shift, and go to state 236 ";" shift, and go to state 237
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 214 | "decltype" "(" • expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 277 expression → • assignment-expression 278 | • expression "," assignment-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 261 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 "co_yield" shift, and go to state 264 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 assignment-expression go to state 268 await-expression go to state 269 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 272 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 expression go to state 277 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 285 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 throw-expression go to state 302 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306 yield-expression go to state 307
244 enum-key → "enum" "class" • $default reduce using rule 244 (enum-key)
245 enum-key → "enum" "struct" • $default reduce using rule 245 (enum-key)
21 TEMPLATE-opt → • %empty [IDENTIFIER] 22 | • "template" 456 nested-name-specifier → nested-name-specifier • IDENTIFIER "::" 457 | nested-name-specifier • TEMPLATE-opt simple-template-id "::" 459 nested-name-specifier-opt → nested-name-specifier • [IDENTIFIER] IDENTIFIER shift, and go to state 198 "template" shift, and go to state 230 IDENTIFIER [reduce using rule 21 (TEMPLATE-opt)] IDENTIFIER [reduce using rule 459 (nested-name-specifier-opt)] TEMPLATE-opt go to state 200
228 elaborated-enum-specifier → "enum" nested-name-specifier-opt • IDENTIFIER IDENTIFIER shift, and go to state 308
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 158 constant-expression → • conditional-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 266 explicit-specifier → "explicit" "(" • constant-expression ")" 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 await-expression go to state 269 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 309 constant-expression go to state 310 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 311 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306
9 EXTERN-opt → • %empty ["template"] 10 | • "extern" 13 INLINE-opt → • %empty ["namespace"] 14 | • "inline" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 71 attribute-declaration → • attribute-specifier-seq ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "using", "alignas", "(", "&", "asm", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 193 declaration → • block-declaration 194 | • nodeclspec-function-declaration 195 | • function-definition 196 | • template-declaration 197 | • deduction-guide 198 | • explicit-instantiation 199 | • explicit-specialization 200 | • export-declaration 201 | • linkage-specification 202 | • namespace-definition 203 | • empty-declaration 204 | • attribute-declaration 205 | • module-import-declaration 206 declaration-seq → • declaration 207 | • declaration-seq declaration 208 declaration-seq-opt → • %empty ["export", "module"] 209 | • declaration-seq 214 decltype-specifier → • "decltype" "(" expression ")" 215 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 233 empty-declaration → • ";" 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 264 explicit-instantiation → • EXTERN-opt "template" declaration 265 explicit-specialization → • "template" "<" ">" declaration 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 268 explicit-specifier-opt → • %empty [IDENTIFIER] 269 | • explicit-specifier 270 export-declaration → • "export" declaration 271 | • "export" "{" declaration-seq-opt "}" 272 | • "export" module-import-declaration 327 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 328 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 329 function-specifier → • "virtual" 330 | • explicit-specifier 332 global-module-fragment → "module" ";" • declaration-seq-opt 390 linkage-specification → • "extern" string-literal "{" declaration-seq-opt "}" 391 | • "extern" string-literal declaration 428 module-import-declaration → • "import" module-name attribute-specifier-seq-opt ";" 429 | • "import" module-partition attribute-specifier-seq-opt ";" 430 | • "import" header-name attribute-specifier-seq-opt ";" 443 named-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 447 namespace-definition → • named-namespace-definition 448 | • unnamed-namespace-definition 449 | • nested-namespace-definition 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 460 nested-namespace-definition → • "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" 476 nodeclspec-function-declaration → • attribute-specifier-seq-opt declarator ";" 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 690 template-declaration → • template-head declaration 691 | • template-head concept-definition 692 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 754 unnamed-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body "}" 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "export" shift, and go to state 2 "extern" shift, and go to state 3 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 5 "::" shift, and go to state 6 "template" shift, and go to state 7 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 ";" shift, and go to state 11 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "import" shift, and go to state 25 "namespace" shift, and go to state 26 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "export" [reduce using rule 208 (declaration-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 268 (explicit-specifier-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "template" [reduce using rule 9 (EXTERN-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "module" reduce using rule 208 (declaration-seq-opt) "namespace" [reduce using rule 13 (INLINE-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) EXTERN-opt go to state 45 INLINE-opt go to state 46 alias-declaration go to state 47 asm-declaration go to state 48 attribute-declaration go to state 49 attribute-specifier-seq go to state 50 attribute-specifier-seq-opt go to state 51 block-declaration go to state 52 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration go to state 60 declaration-seq go to state 61 declaration-seq-opt go to state 312 decltype-specifier go to state 63 deduction-guide go to state 64 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 empty-declaration go to state 68 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-instantiation go to state 73 explicit-specialization go to state 74 explicit-specifier go to state 75 explicit-specifier-opt go to state 76 export-declaration go to state 77 function-definition go to state 78 function-specifier go to state 79 linkage-specification go to state 82 module-import-declaration go to state 83 named-namespace-definition go to state 84 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-definition go to state 87 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 nested-namespace-definition go to state 91 nodeclspec-function-declaration go to state 92 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-declaration go to state 100 template-head go to state 101 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 unnamed-namespace-definition go to state 110 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
432 module-name-qualifier → IDENTIFIER • "." "." shift, and go to state 313
432 module-name-qualifier → • IDENTIFIER "." 433 | • module-name-qualifier IDENTIFIER "." 434 module-name-qualifier-opt → • %empty [IDENTIFIER] 435 | • module-name-qualifier 436 module-partition → ":" • module-name-qualifier-opt IDENTIFIER IDENTIFIER shift, and go to state 137 IDENTIFIER [reduce using rule 434 (module-name-qualifier-opt)] module-name-qualifier go to state 142 module-name-qualifier-opt go to state 314
339 header-name → HEADER_NAME • $default reduce using rule 339 (header-name)
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 430 module-import-declaration → "import" header-name • attribute-specifier-seq-opt ";" $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 315
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 428 module-import-declaration → "import" module-name • attribute-specifier-seq-opt ";" $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 316
433 module-name-qualifier → module-name-qualifier • IDENTIFIER "." 435 module-name-qualifier-opt → module-name-qualifier • [IDENTIFIER] IDENTIFIER shift, and go to state 317 IDENTIFIER [reduce using rule 435 (module-name-qualifier-opt)]
431 module-name → module-name-qualifier-opt • IDENTIFIER IDENTIFIER shift, and go to state 318
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 429 module-import-declaration → "import" module-partition • attribute-specifier-seq-opt ";" $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 319
234 enclosing-namespace-specifier → IDENTIFIER • ["::"] 445 namespace-alias-definition → "namespace" IDENTIFIER • "=" qualified-namespace-specifier ";" "=" shift, and go to state 320 $default reduce using rule 234 (enclosing-namespace-specifier)
235 enclosing-namespace-specifier → enclosing-namespace-specifier • "::" INLINE-opt IDENTIFIER 460 nested-namespace-definition → "namespace" enclosing-namespace-specifier • "::" INLINE-opt IDENTIFIER "{" namespace-body "}" "::" shift, and go to state 321
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 158 constant-expression → • conditional-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 676 static_assert-declaration → "static_assert" "(" • constant-expression ")" ";" 677 | "static_assert" "(" • constant-expression "," string-literal ")" ";" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 await-expression go to state 269 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 309 constant-expression go to state 322 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 311 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306
9 EXTERN-opt → • %empty ["template"] 10 | • "extern" 13 INLINE-opt → • %empty ["namespace"] 14 | • "inline" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 71 attribute-declaration → • attribute-specifier-seq ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "using", "alignas", "(", "&", "asm", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 193 declaration → • block-declaration 194 | • nodeclspec-function-declaration 195 | • function-definition 196 | • template-declaration 197 | • deduction-guide 198 | • explicit-instantiation 199 | • explicit-specialization 200 | • export-declaration 201 | • linkage-specification 202 | • namespace-definition 203 | • empty-declaration 204 | • attribute-declaration 205 | • module-import-declaration 214 decltype-specifier → • "decltype" "(" expression ")" 215 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 233 empty-declaration → • ";" 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 264 explicit-instantiation → • EXTERN-opt "template" declaration 264 | EXTERN-opt "template" • declaration 265 explicit-specialization → • "template" "<" ">" declaration 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 268 explicit-specifier-opt → • %empty [IDENTIFIER] 269 | • explicit-specifier 270 export-declaration → • "export" declaration 271 | • "export" "{" declaration-seq-opt "}" 272 | • "export" module-import-declaration 327 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 328 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 329 function-specifier → • "virtual" 330 | • explicit-specifier 390 linkage-specification → • "extern" string-literal "{" declaration-seq-opt "}" 391 | • "extern" string-literal declaration 428 module-import-declaration → • "import" module-name attribute-specifier-seq-opt ";" 429 | • "import" module-partition attribute-specifier-seq-opt ";" 430 | • "import" header-name attribute-specifier-seq-opt ";" 443 named-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 447 namespace-definition → • named-namespace-definition 448 | • unnamed-namespace-definition 449 | • nested-namespace-definition 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 460 nested-namespace-definition → • "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" 476 nodeclspec-function-declaration → • attribute-specifier-seq-opt declarator ";" 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 690 template-declaration → • template-head declaration 691 | • template-head concept-definition 692 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 754 unnamed-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body "}" 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "export" shift, and go to state 2 "extern" shift, and go to state 3 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 5 "::" shift, and go to state 6 "template" shift, and go to state 7 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 ";" shift, and go to state 11 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "import" shift, and go to state 25 "namespace" shift, and go to state 26 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 268 (explicit-specifier-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "template" [reduce using rule 9 (EXTERN-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "namespace" [reduce using rule 13 (INLINE-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) EXTERN-opt go to state 45 INLINE-opt go to state 46 alias-declaration go to state 47 asm-declaration go to state 48 attribute-declaration go to state 49 attribute-specifier-seq go to state 50 attribute-specifier-seq-opt go to state 51 block-declaration go to state 52 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration go to state 323 decltype-specifier go to state 63 deduction-guide go to state 64 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 empty-declaration go to state 68 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-instantiation go to state 73 explicit-specialization go to state 74 explicit-specifier go to state 75 explicit-specifier-opt go to state 76 export-declaration go to state 77 function-definition go to state 78 function-specifier go to state 79 linkage-specification go to state 82 module-import-declaration go to state 83 named-namespace-definition go to state 84 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-definition go to state 87 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 nested-namespace-definition go to state 91 nodeclspec-function-declaration go to state 92 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-declaration go to state 100 template-head go to state 101 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 unnamed-namespace-definition go to state 110 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 443 named-namespace-definition → INLINE-opt "namespace" • attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 754 unnamed-namespace-definition → INLINE-opt "namespace" • attribute-specifier-seq-opt "{" namespace-body "}" $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 324
680 storage-class-specifier → "extern" • $default reduce using rule 680 (storage-class-specifier)
188 decl-specifier → "inline" • $default reduce using rule 188 (decl-specifier)
71 attribute-declaration → attribute-specifier-seq ";" • $default reduce using rule 71 (attribute-declaration)
5 ELLIPSIS-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 6 | • "..." 137 class-name → • IDENTIFIER 138 | • simple-template-id 211 declarator → • ptr-declarator 212 | • noptr-declarator parameters-and-qualifiers trailing-return-type 213 declarator-id → • ELLIPSIS-opt id-expression 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 348 init-declarator → • declarator initializer-opt 349 | • declarator requires-clause 350 init-declarator-list → • init-declarator 351 | • init-declarator-list "," init-declarator 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 490 noptr-declarator → • declarator-id attribute-specifier-seq-opt 491 | • noptr-declarator parameters-and-qualifiers 492 | • noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 493 | • "(" ptr-declarator ")" 591 ptr-declarator → • noptr-declarator 592 | • ptr-operator ptr-declarator 593 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 594 | • "&" attribute-specifier-seq-opt 595 | • "&&" attribute-specifier-seq-opt 596 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 641 simple-declaration → attribute-specifier-seq decl-specifier-seq • init-declarator-list ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id "..." shift, and go to state 156 IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 159 "&" shift, and go to state 160 "&&" shift, and go to state 163 "decltype" shift, and go to state 21 "*" shift, and go to state 164 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "::" [reduce using rule 5 (ELLIPSIS-opt)] "decltype" [reduce using rule 5 (ELLIPSIS-opt)] $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 165 class-name go to state 55 declarator go to state 183 declarator-id go to state 171 decltype-specifier go to state 121 enum-name go to state 71 init-declarator go to state 184 init-declarator-list go to state 325 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 187 noptr-declarator go to state 173 ptr-declarator go to state 174 ptr-operator go to state 175 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 239 enum-head → enum-key • attribute-specifier-seq-opt enum-head-name-opt enum-base-opt $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 326
330 function-specifier → explicit-specifier • $default reduce using rule 330 (function-specifier)
6 ELLIPSIS-opt → "..." • $default reduce using rule 6 (ELLIPSIS-opt)
767 using-directive → attribute-specifier-seq-opt "using" • "namespace" nested-name-specifier-opt namespace-name ";" "namespace" shift, and go to state 327
45 alignment-specifier → "alignas" • "(" type-id ELLIPSIS-opt ")" 46 | "alignas" • "(" constant-expression ELLIPSIS-opt ")" "(" shift, and go to state 328
5 ELLIPSIS-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 6 | • "..." 137 class-name → • IDENTIFIER 138 | • simple-template-id 213 declarator-id → • ELLIPSIS-opt id-expression 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 490 noptr-declarator → • declarator-id attribute-specifier-seq-opt 491 | • noptr-declarator parameters-and-qualifiers 492 | • noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 493 | • "(" ptr-declarator ")" 493 | "(" • ptr-declarator ")" 591 ptr-declarator → • noptr-declarator 592 | • ptr-operator ptr-declarator 593 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 594 | • "&" attribute-specifier-seq-opt 595 | • "&&" attribute-specifier-seq-opt 596 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id "..." shift, and go to state 156 IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 159 "&" shift, and go to state 160 "&&" shift, and go to state 163 "decltype" shift, and go to state 21 "*" shift, and go to state 164 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "::" [reduce using rule 5 (ELLIPSIS-opt)] "decltype" [reduce using rule 5 (ELLIPSIS-opt)] $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 165 class-name go to state 55 declarator-id go to state 171 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 187 noptr-declarator go to state 329 ptr-declarator go to state 330 ptr-operator go to state 175 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 594 ptr-operator → "&" • attribute-specifier-seq-opt $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 331
49 asm-declaration → attribute-specifier-seq-opt "asm" • "(" string-literal ")" ";" "(" shift, and go to state 332
80 attribute-specifier → "[" • "[" attribute-using-prefix-opt attribute-list "]" "]" "[" shift, and go to state 333
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 595 ptr-operator → "&&" • attribute-specifier-seq-opt $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 334
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 593 ptr-operator → "*" • attribute-specifier-seq-opt cv-qualifier-seq-opt $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 335
137 class-name → • IDENTIFIER 138 | • simple-template-id 169 conversion-function-id → • "operator" conversion-type-id 213 declarator-id → ELLIPSIS-opt • id-expression 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 340 id-expression → • unqualified-id 341 | • qualified-id 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "::" shift, and go to state 6 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "~" shift, and go to state 336 class-name go to state 55 conversion-function-id go to state 273 decltype-specifier go to state 121 enum-name go to state 71 id-expression go to state 337 literal-operator-id go to state 283 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 338 operator-function-id go to state 290 qualified-id go to state 294 simple-template-id go to state 298 template-id go to state 301 template-name go to state 102 type-name go to state 106 typedef-name go to state 108 unqualified-id go to state 306
81 attribute-specifier → alignment-specifier • $default reduce using rule 81 (attribute-specifier)
82 attribute-specifier-seq → attribute-specifier-seq-opt attribute-specifier • $default reduce using rule 82 (attribute-specifier-seq)
192 decl-specifier-seq-opt → decl-specifier-seq • ["...", IDENTIFIER, "::", "(", "&", "&&", "operator", "decltype", "*", "~"] 602 ref-qualifier → • "&" 603 | • "&&" 604 ref-qualifier-opt → • %empty ["["] 605 | • ref-qualifier 642 simple-declaration → attribute-specifier-seq-opt decl-specifier-seq • ref-qualifier-opt "[" identifier-list "]" initializer ";" "&" shift, and go to state 339 "&&" shift, and go to state 340 "&" [reduce using rule 192 (decl-specifier-seq-opt)] "[" reduce using rule 604 (ref-qualifier-opt) "&&" [reduce using rule 192 (decl-specifier-seq-opt)] $default reduce using rule 192 (decl-specifier-seq-opt) ref-qualifier go to state 341 ref-qualifier-opt go to state 342
5 ELLIPSIS-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 6 | • "..." 137 class-name → • IDENTIFIER 138 | • simple-template-id 211 declarator → • ptr-declarator 212 | • noptr-declarator parameters-and-qualifiers trailing-return-type 213 declarator-id → • ELLIPSIS-opt id-expression 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 327 function-definition → attribute-specifier-seq-opt decl-specifier-seq-opt • declarator virt-specifier-seq-opt function-body 328 | attribute-specifier-seq-opt decl-specifier-seq-opt • declarator requires-clause function-body 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 490 noptr-declarator → • declarator-id attribute-specifier-seq-opt 491 | • noptr-declarator parameters-and-qualifiers 492 | • noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 493 | • "(" ptr-declarator ")" 591 ptr-declarator → • noptr-declarator 592 | • ptr-operator ptr-declarator 593 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 594 | • "&" attribute-specifier-seq-opt 595 | • "&&" attribute-specifier-seq-opt 596 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id "..." shift, and go to state 156 IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 159 "&" shift, and go to state 160 "&&" shift, and go to state 163 "decltype" shift, and go to state 21 "*" shift, and go to state 164 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "::" [reduce using rule 5 (ELLIPSIS-opt)] "decltype" [reduce using rule 5 (ELLIPSIS-opt)] $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 165 class-name go to state 55 declarator go to state 343 declarator-id go to state 171 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 187 noptr-declarator go to state 173 ptr-declarator go to state 174 ptr-operator go to state 175 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
476 nodeclspec-function-declaration → attribute-specifier-seq-opt declarator • ";" ";" shift, and go to state 344
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 490 noptr-declarator → declarator-id • attribute-specifier-seq-opt $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 345
21 TEMPLATE-opt → • %empty [IDENTIFIER] 22 | • "template" 456 nested-name-specifier → nested-name-specifier • IDENTIFIER "::" 457 | nested-name-specifier • TEMPLATE-opt simple-template-id "::" 459 nested-name-specifier-opt → nested-name-specifier • [IDENTIFIER] 596 ptr-operator → nested-name-specifier • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 646 simple-type-specifier → nested-name-specifier • "template" simple-template-id IDENTIFIER shift, and go to state 198 "template" shift, and go to state 199 "*" shift, and go to state 346 IDENTIFIER [reduce using rule 21 (TEMPLATE-opt)] IDENTIFIER [reduce using rule 459 (nested-name-specifier-opt)] TEMPLATE-opt go to state 200
212 declarator → noptr-declarator • parameters-and-qualifiers trailing-return-type 491 noptr-declarator → noptr-declarator • parameters-and-qualifiers 492 | noptr-declarator • "[" constant-expression-opt "]" attribute-specifier-seq-opt 553 parameters-and-qualifiers → • "(" parameter-declaration-clause ")" cv-qualifier-seq-opt ref-qualifier-opt noexcept-specifier-opt attribute-specifier-seq-opt 591 ptr-declarator → noptr-declarator • [",", "...", "=", ";", "(", ")", ":", "{", "final", ">", "try", "requires", "override"] "(" shift, and go to state 347 "[" shift, and go to state 348 "(" [reduce using rule 591 (ptr-declarator)] $default reduce using rule 591 (ptr-declarator) parameters-and-qualifiers go to state 349
211 declarator → ptr-declarator • $default reduce using rule 211 (declarator)
5 ELLIPSIS-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 6 | • "..." 137 class-name → • IDENTIFIER 138 | • simple-template-id 213 declarator-id → • ELLIPSIS-opt id-expression 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 490 noptr-declarator → • declarator-id attribute-specifier-seq-opt 491 | • noptr-declarator parameters-and-qualifiers 492 | • noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 493 | • "(" ptr-declarator ")" 591 ptr-declarator → • noptr-declarator 592 | • ptr-operator ptr-declarator 592 | ptr-operator • ptr-declarator 593 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 594 | • "&" attribute-specifier-seq-opt 595 | • "&&" attribute-specifier-seq-opt 596 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id "..." shift, and go to state 156 IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 159 "&" shift, and go to state 160 "&&" shift, and go to state 163 "decltype" shift, and go to state 21 "*" shift, and go to state 164 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "::" [reduce using rule 5 (ELLIPSIS-opt)] "decltype" [reduce using rule 5 (ELLIPSIS-opt)] $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 165 class-name go to state 55 declarator-id go to state 171 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 187 noptr-declarator go to state 329 ptr-declarator go to state 350 ptr-operator go to state 175 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
36 access-specifier → • "private" 37 | • "protected" 38 | • "public" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", ";", "alignas", "(", "&", "[", ":", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 142 class-specifier → class-head "{" • member-specification-opt "}" 215 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 233 empty-declaration → • ";" 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 265 explicit-specialization → • "template" "<" ">" declaration 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 268 explicit-specifier-opt → • %empty [IDENTIFIER] 269 | • explicit-specifier 327 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 328 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 404 member-declaration → • attribute-specifier-seq-opt decl-specifier-seq-opt member-declarator-list-opt ";" 405 | • function-definition 406 | • using-declaration 407 | • using-enum-declaration 408 | • static_assert-declaration 409 | • template-declaration 410 | • explicit-specialization 411 | • deduction-guide 412 | • alias-declaration 413 | • opaque-enum-declaration 414 | • empty-declaration 423 member-specification → • member-declaration member-specification-opt 424 | • access-specifier ":" member-specification-opt 425 member-specification-opt → • %empty ["}"] 426 | • member-specification 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 690 template-declaration → • template-head declaration 691 | • template-head concept-definition 692 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 763 using-declaration → • "using" using-declarator-list ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "template" shift, and go to state 7 "private" shift, and go to state 351 "protected" shift, and go to state 352 "public" shift, and go to state 353 "using" shift, and go to state 10 ";" shift, and go to state 11 "enum" shift, and go to state 354 "explicit" shift, and go to state 23 "static_assert" shift, and go to state 41 IDENTIFIER reduce using rule 83 (attribute-specifier-seq-opt) IDENTIFIER [reduce using rule 268 (explicit-specifier-opt)] ";" [reduce using rule 83 (attribute-specifier-seq-opt)] "}" reduce using rule 425 (member-specification-opt) "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) access-specifier go to state 355 alias-declaration go to state 356 attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 357 deduction-guide go to state 358 empty-declaration go to state 359 enum-key go to state 360 explicit-specialization go to state 361 explicit-specifier go to state 362 explicit-specifier-opt go to state 76 function-definition go to state 363 member-declaration go to state 364 member-specification go to state 365 member-specification-opt go to state 366 opaque-enum-declaration go to state 367 static_assert-declaration go to state 368 template-declaration go to state 369 template-head go to state 101 using-declaration go to state 370 using-enum-declaration go to state 371
84 attribute-specifier-seq-opt → attribute-specifier-seq • $default reduce using rule 84 (attribute-specifier-seq-opt)
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 99 base-clause → • ":" base-specifier-list 100 base-clause-opt → • %empty ["{"] 101 | • base-clause 131 class-head → class-key attribute-specifier-seq-opt • class-head-name class-virt-specifier-opt base-clause-opt 132 | class-key attribute-specifier-seq-opt • base-clause-opt 133 class-head-name → • nested-name-specifier-opt class-name 137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 229 elaborated-type-specifier → class-key attribute-specifier-seq-opt • nested-name-specifier-opt IDENTIFIER 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "alignas" shift, and go to state 158 "[" shift, and go to state 162 ":" shift, and go to state 372 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] $default reduce using rule 100 (base-clause-opt) alignment-specifier go to state 166 attribute-specifier go to state 167 base-clause go to state 373 base-clause-opt go to state 374 class-head-name go to state 375 class-name go to state 55 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 133 nested-name-specifier-opt go to state 376 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
21 TEMPLATE-opt → • %empty [IDENTIFIER] 22 | • "template" 231 elaborated-type-specifier → class-key nested-name-specifier • TEMPLATE-opt simple-template-id 456 nested-name-specifier → nested-name-specifier • IDENTIFIER "::" 457 | nested-name-specifier • TEMPLATE-opt simple-template-id "::" IDENTIFIER shift, and go to state 198 "template" shift, and go to state 230 IDENTIFIER [reduce using rule 21 (TEMPLATE-opt)] TEMPLATE-opt go to state 377
138 class-name → simple-template-id • ["::"] 230 elaborated-type-specifier → class-key simple-template-id • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 732 typedef-name → simple-template-id • ["::"] "::" reduce using rule 138 (class-name) "::" [reduce using rule 230 (elaborated-type-specifier)] "::" [reduce using rule 732 (typedef-name)] $default reduce using rule 230 (elaborated-type-specifier)
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 189 decl-specifier-seq → decl-specifier attribute-specifier-seq-opt • [",", "...", IDENTIFIER, "noexcept", "::", "=", ";", "alignas", "(", ")", "&", "[", ":", "{", "&&", "operator", "decltype", "->", ">", "*", "requires", "~"] "alignas" shift, and go to state 158 "[" shift, and go to state 162 "alignas" [reduce using rule 189 (decl-specifier-seq)] "[" [reduce using rule 189 (decl-specifier-seq)] $default reduce using rule 189 (decl-specifier-seq) alignment-specifier go to state 166 attribute-specifier go to state 167
190 decl-specifier-seq → decl-specifier decl-specifier-seq • $default reduce using rule 190 (decl-specifier-seq)
116 brace-or-equal-initializer → • "=" initializer-clause 117 | • braced-init-list 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 348 init-declarator → declarator • initializer-opt 349 | declarator • requires-clause 359 initializer → • brace-or-equal-initializer 360 | • "(" expression-list ")" 365 initializer-opt → • %empty [",", ";"] 366 | • initializer 621 requires-clause → • "requires" constraint-logical-or-expression "=" shift, and go to state 378 "(" shift, and go to state 379 "{" shift, and go to state 380 "requires" shift, and go to state 381 $default reduce using rule 365 (initializer-opt) brace-or-equal-initializer go to state 382 braced-init-list go to state 383 initializer go to state 384 initializer-opt go to state 385 requires-clause go to state 386
350 init-declarator-list → init-declarator • $default reduce using rule 350 (init-declarator-list)
351 init-declarator-list → init-declarator-list • "," init-declarator 353 init-declarator-list-opt → init-declarator-list • [";"] "," shift, and go to state 387 $default reduce using rule 353 (init-declarator-list-opt)
640 simple-declaration → decl-specifier-seq init-declarator-list-opt • ";" ";" shift, and go to state 388
21 TEMPLATE-opt → • %empty [IDENTIFIER] 22 | • "template" 456 nested-name-specifier → nested-name-specifier • IDENTIFIER "::" 457 | nested-name-specifier • TEMPLATE-opt simple-template-id "::" 596 ptr-operator → nested-name-specifier • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt IDENTIFIER shift, and go to state 198 "template" shift, and go to state 230 "*" shift, and go to state 346 IDENTIFIER [reduce using rule 21 (TEMPLATE-opt)] TEMPLATE-opt go to state 200
207 declaration-seq → declaration-seq declaration • $default reduce using rule 207 (declaration-seq)
455 nested-name-specifier → decltype-specifier "::" • $default reduce using rule 455 (nested-name-specifier)
247 enum-specifier → enum-head "{" • enumerator-list-opt "}" 248 | enum-head "{" • enumerator-list "," "}" 249 enumerator → • IDENTIFIER attribute-specifier-seq-opt 250 enumerator-definition → • enumerator 251 | • enumerator "=" constant-expression 252 enumerator-list → • enumerator-definition 253 | • enumerator-list "," enumerator-definition 254 enumerator-list-opt → • %empty ["}"] 255 | • enumerator-list IDENTIFIER shift, and go to state 389 $default reduce using rule 254 (enumerator-list-opt) enumerator go to state 390 enumerator-definition go to state 391 enumerator-list go to state 392 enumerator-list-opt go to state 393
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 239 enum-head → enum-key attribute-specifier-seq-opt • enum-head-name-opt enum-base-opt 240 enum-head-name → • nested-name-specifier-opt IDENTIFIER 241 enum-head-name-opt → • %empty [":", "{"] 242 | • enum-head-name 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 496 opaque-enum-declaration → enum-key attribute-specifier-seq-opt • enum-head-name enum-base-opt ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "alignas" shift, and go to state 158 "[" shift, and go to state 162 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] $default reduce using rule 241 (enum-head-name-opt) alignment-specifier go to state 166 attribute-specifier go to state 167 class-name go to state 55 decltype-specifier go to state 121 enum-head-name go to state 394 enum-head-name-opt go to state 395 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 133 nested-name-specifier-opt go to state 396 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
696 template-name → IDENTIFIER • $default reduce using rule 696 (template-name)
215 deduction-guide → explicit-specifier-opt template-name • "(" parameter-declaration-clause ")" "->" simple-template-id ";" "(" shift, and go to state 397
8 EXPORT-opt → "export" • $default reduce using rule 8 (EXPORT-opt)
427 module-declaration → EXPORT-opt • "module" module-name module-partition-opt attribute-specifier-seq-opt ";" "module" shift, and go to state 398
9 EXTERN-opt → • %empty ["template"] 10 | • "extern" 13 INLINE-opt → • %empty ["namespace"] 14 | • "inline" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 71 attribute-declaration → • attribute-specifier-seq ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "using", "alignas", "(", "&", "asm", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 193 declaration → • block-declaration 194 | • nodeclspec-function-declaration 195 | • function-definition 196 | • template-declaration 197 | • deduction-guide 198 | • explicit-instantiation 199 | • explicit-specialization 200 | • export-declaration 201 | • linkage-specification 202 | • namespace-definition 203 | • empty-declaration 204 | • attribute-declaration 205 | • module-import-declaration 206 declaration-seq → • declaration 207 | • declaration-seq declaration 208 declaration-seq-opt → • %empty [$end, "module"] 209 | • declaration-seq 214 decltype-specifier → • "decltype" "(" expression ")" 215 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 233 empty-declaration → • ";" 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 264 explicit-instantiation → • EXTERN-opt "template" declaration 265 explicit-specialization → • "template" "<" ">" declaration 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 268 explicit-specifier-opt → • %empty [IDENTIFIER] 269 | • explicit-specifier 270 export-declaration → • "export" declaration 271 | • "export" "{" declaration-seq-opt "}" 272 | • "export" module-import-declaration 327 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 328 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 329 function-specifier → • "virtual" 330 | • explicit-specifier 390 linkage-specification → • "extern" string-literal "{" declaration-seq-opt "}" 391 | • "extern" string-literal declaration 428 module-import-declaration → • "import" module-name attribute-specifier-seq-opt ";" 429 | • "import" module-partition attribute-specifier-seq-opt ";" 430 | • "import" header-name attribute-specifier-seq-opt ";" 443 named-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 447 namespace-definition → • named-namespace-definition 448 | • unnamed-namespace-definition 449 | • nested-namespace-definition 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 460 nested-namespace-definition → • "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" 476 nodeclspec-function-declaration → • attribute-specifier-seq-opt declarator ";" 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 690 template-declaration → • template-head declaration 691 | • template-head concept-definition 692 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 696 template-name → • IDENTIFIER 706 translation-unit → global-module-fragment-opt module-declaration • declaration-seq-opt private-module-fragment-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 754 unnamed-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body "}" 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "export" shift, and go to state 2 "extern" shift, and go to state 3 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 5 "::" shift, and go to state 6 "template" shift, and go to state 7 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 ";" shift, and go to state 11 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "import" shift, and go to state 25 "namespace" shift, and go to state 26 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 $end reduce using rule 208 (declaration-seq-opt) "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 268 (explicit-specifier-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "template" [reduce using rule 9 (EXTERN-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "module" reduce using rule 208 (declaration-seq-opt) "namespace" [reduce using rule 13 (INLINE-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) EXTERN-opt go to state 45 INLINE-opt go to state 46 alias-declaration go to state 47 asm-declaration go to state 48 attribute-declaration go to state 49 attribute-specifier-seq go to state 50 attribute-specifier-seq-opt go to state 51 block-declaration go to state 52 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration go to state 60 declaration-seq go to state 61 declaration-seq-opt go to state 399 decltype-specifier go to state 63 deduction-guide go to state 64 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 empty-declaration go to state 68 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-instantiation go to state 73 explicit-specialization go to state 74 explicit-specifier go to state 75 explicit-specifier-opt go to state 76 export-declaration go to state 77 function-definition go to state 78 function-specifier go to state 79 linkage-specification go to state 82 module-import-declaration go to state 83 named-namespace-definition go to state 84 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-definition go to state 87 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 nested-namespace-definition go to state 91 nodeclspec-function-declaration go to state 92 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-declaration go to state 100 template-head go to state 101 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 unnamed-namespace-definition go to state 110 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
454 nested-name-specifier → namespace-name "::" • $default reduce using rule 454 (nested-name-specifier)
456 nested-name-specifier → nested-name-specifier IDENTIFIER • "::" "::" shift, and go to state 400
22 TEMPLATE-opt → "template" • [IDENTIFIER, "operator", "~"] 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 646 simple-type-specifier → nested-name-specifier "template" • simple-template-id 696 template-name → • IDENTIFIER IDENTIFIER shift, and go to state 192 IDENTIFIER [reduce using rule 22 (TEMPLATE-opt)] $default reduce using rule 22 (TEMPLATE-opt) simple-template-id go to state 401 template-name go to state 102
457 nested-name-specifier → nested-name-specifier TEMPLATE-opt • simple-template-id "::" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER IDENTIFIER shift, and go to state 192 simple-template-id go to state 402 template-name go to state 102
137 class-name → IDENTIFIER • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 151 concept-name → IDENTIFIER • ["decltype", "<", "auto"] 246 enum-name → IDENTIFIER • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 696 template-name → IDENTIFIER • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 731 typedef-name → IDENTIFIER • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] "," reduce using rule 137 (class-name) "," [reduce using rule 246 (enum-name)] "," [reduce using rule 696 (template-name)] "," [reduce using rule 731 (typedef-name)] "constexpr" reduce using rule 137 (class-name) "constexpr" [reduce using rule 246 (enum-name)] "constexpr" [reduce using rule 696 (template-name)] "constexpr" [reduce using rule 731 (typedef-name)] "..." reduce using rule 137 (class-name) "..." [reduce using rule 246 (enum-name)] "..." [reduce using rule 696 (template-name)] "..." [reduce using rule 731 (typedef-name)] "export" reduce using rule 137 (class-name) "export" [reduce using rule 246 (enum-name)] "export" [reduce using rule 696 (template-name)] "export" [reduce using rule 731 (typedef-name)] "extern" reduce using rule 137 (class-name) "extern" [reduce using rule 246 (enum-name)] "extern" [reduce using rule 696 (template-name)] "extern" [reduce using rule 731 (typedef-name)] IDENTIFIER reduce using rule 137 (class-name) IDENTIFIER [reduce using rule 246 (enum-name)] IDENTIFIER [reduce using rule 696 (template-name)] IDENTIFIER [reduce using rule 731 (typedef-name)] "inline" reduce using rule 137 (class-name) "inline" [reduce using rule 246 (enum-name)] "inline" [reduce using rule 696 (template-name)] "inline" [reduce using rule 731 (typedef-name)] "noexcept" reduce using rule 137 (class-name) "noexcept" [reduce using rule 246 (enum-name)] "noexcept" [reduce using rule 696 (template-name)] "noexcept" [reduce using rule 731 (typedef-name)] "::" reduce using rule 137 (class-name) "::" [reduce using rule 246 (enum-name)] "::" [reduce using rule 696 (template-name)] "::" [reduce using rule 731 (typedef-name)] "template" reduce using rule 137 (class-name) "template" [reduce using rule 246 (enum-name)] "template" [reduce using rule 696 (template-name)] "template" [reduce using rule 731 (typedef-name)] "typename" reduce using rule 137 (class-name) "typename" [reduce using rule 246 (enum-name)] "typename" [reduce using rule 696 (template-name)] "typename" [reduce using rule 731 (typedef-name)] "virtual" reduce using rule 137 (class-name) "virtual" [reduce using rule 246 (enum-name)] "virtual" [reduce using rule 696 (template-name)] "virtual" [reduce using rule 731 (typedef-name)] "+" reduce using rule 137 (class-name) "+" [reduce using rule 246 (enum-name)] "+" [reduce using rule 696 (template-name)] "+" [reduce using rule 731 (typedef-name)] "-" reduce using rule 137 (class-name) "-" [reduce using rule 246 (enum-name)] "-" [reduce using rule 696 (template-name)] "-" [reduce using rule 731 (typedef-name)] "using" reduce using rule 137 (class-name) "using" [reduce using rule 246 (enum-name)] "using" [reduce using rule 696 (template-name)] "using" [reduce using rule 731 (typedef-name)] "=" reduce using rule 137 (class-name) "=" [reduce using rule 246 (enum-name)] "=" [reduce using rule 696 (template-name)] "=" [reduce using rule 731 (typedef-name)] ";" reduce using rule 137 (class-name) ";" [reduce using rule 246 (enum-name)] ";" [reduce using rule 696 (template-name)] ";" [reduce using rule 731 (typedef-name)] "alignas" reduce using rule 137 (class-name) "alignas" [reduce using rule 246 (enum-name)] "alignas" [reduce using rule 696 (template-name)] "alignas" [reduce using rule 731 (typedef-name)] "(" reduce using rule 137 (class-name) "(" [reduce using rule 246 (enum-name)] "(" [reduce using rule 696 (template-name)] "(" [reduce using rule 731 (typedef-name)] ")" reduce using rule 137 (class-name) ")" [reduce using rule 246 (enum-name)] ")" [reduce using rule 696 (template-name)] ")" [reduce using rule 731 (typedef-name)] "&" reduce using rule 137 (class-name) "&" [reduce using rule 246 (enum-name)] "&" [reduce using rule 696 (template-name)] "&" [reduce using rule 731 (typedef-name)] "asm" reduce using rule 137 (class-name) "asm" [reduce using rule 246 (enum-name)] "asm" [reduce using rule 696 (template-name)] "asm" [reduce using rule 731 (typedef-name)] "*=" reduce using rule 137 (class-name) "*=" [reduce using rule 246 (enum-name)] "*=" [reduce using rule 696 (template-name)] "*=" [reduce using rule 731 (typedef-name)] "/=" reduce using rule 137 (class-name) "/=" [reduce using rule 246 (enum-name)] "/=" [reduce using rule 696 (template-name)] "/=" [reduce using rule 731 (typedef-name)] "%=" reduce using rule 137 (class-name) "%=" [reduce using rule 246 (enum-name)] "%=" [reduce using rule 696 (template-name)] "%=" [reduce using rule 731 (typedef-name)] "+=" reduce using rule 137 (class-name) "+=" [reduce using rule 246 (enum-name)] "+=" [reduce using rule 696 (template-name)] "+=" [reduce using rule 731 (typedef-name)] "-=" reduce using rule 137 (class-name) "-=" [reduce using rule 246 (enum-name)] "-=" [reduce using rule 696 (template-name)] "-=" [reduce using rule 731 (typedef-name)] ">>=" reduce using rule 137 (class-name) ">>=" [reduce using rule 246 (enum-name)] ">>=" [reduce using rule 696 (template-name)] ">>=" [reduce using rule 731 (typedef-name)] "<<=" reduce using rule 137 (class-name) "<<=" [reduce using rule 246 (enum-name)] "<<=" [reduce using rule 696 (template-name)] "<<=" [reduce using rule 731 (typedef-name)] "&=" reduce using rule 137 (class-name) "&=" [reduce using rule 246 (enum-name)] "&=" [reduce using rule 696 (template-name)] "&=" [reduce using rule 731 (typedef-name)] "^=" reduce using rule 137 (class-name) "^=" [reduce using rule 246 (enum-name)] "^=" [reduce using rule 696 (template-name)] "^=" [reduce using rule 731 (typedef-name)] "|=" reduce using rule 137 (class-name) "|=" [reduce using rule 246 (enum-name)] "|=" [reduce using rule 696 (template-name)] "|=" [reduce using rule 731 (typedef-name)] "[" reduce using rule 137 (class-name) "[" [reduce using rule 246 (enum-name)] "[" [reduce using rule 696 (template-name)] "[" [reduce using rule 731 (typedef-name)] "]" reduce using rule 137 (class-name) "]" [reduce using rule 246 (enum-name)] "]" [reduce using rule 696 (template-name)] "]" [reduce using rule 731 (typedef-name)] ":" reduce using rule 137 (class-name) ":" [reduce using rule 246 (enum-name)] ":" [reduce using rule 696 (template-name)] ":" [reduce using rule 731 (typedef-name)] "{" reduce using rule 137 (class-name) "{" [reduce using rule 246 (enum-name)] "{" [reduce using rule 696 (template-name)] "{" [reduce using rule 731 (typedef-name)] "}" reduce using rule 137 (class-name) "}" [reduce using rule 246 (enum-name)] "}" [reduce using rule 696 (template-name)] "}" [reduce using rule 731 (typedef-name)] "class" reduce using rule 137 (class-name) "class" [reduce using rule 246 (enum-name)] "class" [reduce using rule 696 (template-name)] "class" [reduce using rule 731 (typedef-name)] "struct" reduce using rule 137 (class-name) "struct" [reduce using rule 246 (enum-name)] "struct" [reduce using rule 696 (template-name)] "struct" [reduce using rule 731 (typedef-name)] "union" reduce using rule 137 (class-name) "union" [reduce using rule 246 (enum-name)] "union" [reduce using rule 696 (template-name)] "union" [reduce using rule 731 (typedef-name)] "final" reduce using rule 137 (class-name) "final" [reduce using rule 246 (enum-name)] "final" [reduce using rule 696 (template-name)] "final" [reduce using rule 731 (typedef-name)] "<=>" reduce using rule 137 (class-name) "<=>" [reduce using rule 246 (enum-name)] "<=>" [reduce using rule 696 (template-name)] "<=>" [reduce using rule 731 (typedef-name)] "concept" reduce using rule 137 (class-name) "concept" [reduce using rule 246 (enum-name)] "concept" [reduce using rule 696 (template-name)] "concept" [reduce using rule 731 (typedef-name)] "?" reduce using rule 137 (class-name) "?" [reduce using rule 246 (enum-name)] "?" [reduce using rule 696 (template-name)] "?" [reduce using rule 731 (typedef-name)] "&&" reduce using rule 137 (class-name) "&&" [reduce using rule 246 (enum-name)] "&&" [reduce using rule 696 (template-name)] "&&" [reduce using rule 731 (typedef-name)] "||" reduce using rule 137 (class-name) "||" [reduce using rule 246 (enum-name)] "||" [reduce using rule 696 (template-name)] "||" [reduce using rule 731 (typedef-name)] "operator" reduce using rule 137 (class-name) "operator" [reduce using rule 246 (enum-name)] "operator" [reduce using rule 696 (template-name)] "operator" [reduce using rule 731 (typedef-name)] "const" reduce using rule 137 (class-name) "const" [reduce using rule 246 (enum-name)] "const" [reduce using rule 696 (template-name)] "const" [reduce using rule 731 (typedef-name)] "volatile" reduce using rule 137 (class-name) "volatile" [reduce using rule 246 (enum-name)] "volatile" [reduce using rule 696 (template-name)] "volatile" [reduce using rule 731 (typedef-name)] "friend" reduce using rule 137 (class-name) "friend" [reduce using rule 246 (enum-name)] "friend" [reduce using rule 696 (template-name)] "friend" [reduce using rule 731 (typedef-name)] "typedef" reduce using rule 137 (class-name) "typedef" [reduce using rule 246 (enum-name)] "typedef" [reduce using rule 696 (template-name)] "typedef" [reduce using rule 731 (typedef-name)] "consteval" reduce using rule 137 (class-name) "consteval" [reduce using rule 246 (enum-name)] "consteval" [reduce using rule 696 (template-name)] "consteval" [reduce using rule 731 (typedef-name)] "constinit" reduce using rule 137 (class-name) "constinit" [reduce using rule 246 (enum-name)] "constinit" [reduce using rule 696 (template-name)] "constinit" [reduce using rule 731 (typedef-name)] "decltype" reduce using rule 137 (class-name) "decltype" [reduce using rule 151 (concept-name)] "decltype" [reduce using rule 246 (enum-name)] "decltype" [reduce using rule 696 (template-name)] "decltype" [reduce using rule 731 (typedef-name)] "->" reduce using rule 137 (class-name) "->" [reduce using rule 246 (enum-name)] "->" [reduce using rule 696 (template-name)] "->" [reduce using rule 731 (typedef-name)] "." reduce using rule 137 (class-name) "." [reduce using rule 246 (enum-name)] "." [reduce using rule 696 (template-name)] "." [reduce using rule 731 (typedef-name)] "enum" reduce using rule 137 (class-name) "enum" [reduce using rule 246 (enum-name)] "enum" [reduce using rule 696 (template-name)] "enum" [reduce using rule 731 (typedef-name)] "==" reduce using rule 137 (class-name) "==" [reduce using rule 246 (enum-name)] "==" [reduce using rule 696 (template-name)] "==" [reduce using rule 731 (typedef-name)] "!=" reduce using rule 137 (class-name) "!=" [reduce using rule 246 (enum-name)] "!=" [reduce using rule 696 (template-name)] "!=" [reduce using rule 731 (typedef-name)] "^" reduce using rule 137 (class-name) "^" [reduce using rule 246 (enum-name)] "^" [reduce using rule 696 (template-name)] "^" [reduce using rule 731 (typedef-name)] "<" reduce using rule 137 (class-name) "<" [reduce using rule 151 (concept-name)] "<" [reduce using rule 246 (enum-name)] "<" [reduce using rule 696 (template-name)] "<" [reduce using rule 731 (typedef-name)] ">" reduce using rule 137 (class-name) ">" [reduce using rule 246 (enum-name)] ">" [reduce using rule 696 (template-name)] ">" [reduce using rule 731 (typedef-name)] "explicit" reduce using rule 137 (class-name) "explicit" [reduce using rule 246 (enum-name)] "explicit" [reduce using rule 696 (template-name)] "explicit" [reduce using rule 731 (typedef-name)] "*" reduce using rule 137 (class-name) "*" [reduce using rule 246 (enum-name)] "*" [reduce using rule 696 (template-name)] "*" [reduce using rule 731 (typedef-name)] "/" reduce using rule 137 (class-name) "/" [reduce using rule 246 (enum-name)] "/" [reduce using rule 696 (template-name)] "/" [reduce using rule 731 (typedef-name)] "%" reduce using rule 137 (class-name) "%" [reduce using rule 246 (enum-name)] "%" [reduce using rule 696 (template-name)] "%" [reduce using rule 731 (typedef-name)] "|" reduce using rule 137 (class-name) "|" [reduce using rule 246 (enum-name)] "|" [reduce using rule 696 (template-name)] "|" [reduce using rule 731 (typedef-name)] "<<" reduce using rule 137 (class-name) "<<" [reduce using rule 246 (enum-name)] "<<" [reduce using rule 696 (template-name)] "<<" [reduce using rule 731 (typedef-name)] ">>" reduce using rule 137 (class-name) ">>" [reduce using rule 246 (enum-name)] ">>" [reduce using rule 696 (template-name)] ">>" [reduce using rule 731 (typedef-name)] "<=" reduce using rule 137 (class-name) "<=" [reduce using rule 246 (enum-name)] "<=" [reduce using rule 696 (template-name)] "<=" [reduce using rule 731 (typedef-name)] ">=" reduce using rule 137 (class-name) ">=" [reduce using rule 246 (enum-name)] ">=" [reduce using rule 696 (template-name)] ">=" [reduce using rule 731 (typedef-name)] ".*" reduce using rule 137 (class-name) ".*" [reduce using rule 246 (enum-name)] ".*" [reduce using rule 696 (template-name)] ".*" [reduce using rule 731 (typedef-name)] "->*" reduce using rule 137 (class-name) "->*" [reduce using rule 246 (enum-name)] "->*" [reduce using rule 696 (template-name)] "->*" [reduce using rule 731 (typedef-name)] "try" reduce using rule 137 (class-name) "try" [reduce using rule 246 (enum-name)] "try" [reduce using rule 696 (template-name)] "try" [reduce using rule 731 (typedef-name)] "import" reduce using rule 137 (class-name) "import" [reduce using rule 246 (enum-name)] "import" [reduce using rule 696 (template-name)] "import" [reduce using rule 731 (typedef-name)] "namespace" reduce using rule 137 (class-name) "namespace" [reduce using rule 246 (enum-name)] "namespace" [reduce using rule 696 (template-name)] "namespace" [reduce using rule 731 (typedef-name)] "requires" reduce using rule 137 (class-name) "requires" [reduce using rule 246 (enum-name)] "requires" [reduce using rule 696 (template-name)] "requires" [reduce using rule 731 (typedef-name)] "~" reduce using rule 137 (class-name) "~" [reduce using rule 246 (enum-name)] "~" [reduce using rule 696 (template-name)] "~" [reduce using rule 731 (typedef-name)] "++" reduce using rule 137 (class-name) "++" [reduce using rule 246 (enum-name)] "++" [reduce using rule 696 (template-name)] "++" [reduce using rule 731 (typedef-name)] "--" reduce using rule 137 (class-name) "--" [reduce using rule 246 (enum-name)] "--" [reduce using rule 696 (template-name)] "--" [reduce using rule 731 (typedef-name)] "auto" reduce using rule 137 (class-name) "auto" [reduce using rule 151 (concept-name)] "auto" [reduce using rule 246 (enum-name)] "auto" [reduce using rule 696 (template-name)] "auto" [reduce using rule 731 (typedef-name)] "char" reduce using rule 137 (class-name) "char" [reduce using rule 246 (enum-name)] "char" [reduce using rule 696 (template-name)] "char" [reduce using rule 731 (typedef-name)] "char8_t" reduce using rule 137 (class-name) "char8_t" [reduce using rule 246 (enum-name)] "char8_t" [reduce using rule 696 (template-name)] "char8_t" [reduce using rule 731 (typedef-name)] "char16_t" reduce using rule 137 (class-name) "char16_t" [reduce using rule 246 (enum-name)] "char16_t" [reduce using rule 696 (template-name)] "char16_t" [reduce using rule 731 (typedef-name)] "char32_t" reduce using rule 137 (class-name) "char32_t" [reduce using rule 246 (enum-name)] "char32_t" [reduce using rule 696 (template-name)] "char32_t" [reduce using rule 731 (typedef-name)] "wchar_t" reduce using rule 137 (class-name) "wchar_t" [reduce using rule 246 (enum-name)] "wchar_t" [reduce using rule 696 (template-name)] "wchar_t" [reduce using rule 731 (typedef-name)] "bool" reduce using rule 137 (class-name) "bool" [reduce using rule 246 (enum-name)] "bool" [reduce using rule 696 (template-name)] "bool" [reduce using rule 731 (typedef-name)] "short" reduce using rule 137 (class-name) "short" [reduce using rule 246 (enum-name)] "short" [reduce using rule 696 (template-name)] "short" [reduce using rule 731 (typedef-name)] "int" reduce using rule 137 (class-name) "int" [reduce using rule 246 (enum-name)] "int" [reduce using rule 696 (template-name)] "int" [reduce using rule 731 (typedef-name)] "long" reduce using rule 137 (class-name) "long" [reduce using rule 246 (enum-name)] "long" [reduce using rule 696 (template-name)] "long" [reduce using rule 731 (typedef-name)] "signed" reduce using rule 137 (class-name) "signed" [reduce using rule 246 (enum-name)] "signed" [reduce using rule 696 (template-name)] "signed" [reduce using rule 731 (typedef-name)] "unsigned" reduce using rule 137 (class-name) "unsigned" [reduce using rule 246 (enum-name)] "unsigned" [reduce using rule 696 (template-name)] "unsigned" [reduce using rule 731 (typedef-name)] "float" reduce using rule 137 (class-name) "float" [reduce using rule 246 (enum-name)] "float" [reduce using rule 696 (template-name)] "float" [reduce using rule 731 (typedef-name)] "double" reduce using rule 137 (class-name) "double" [reduce using rule 246 (enum-name)] "double" [reduce using rule 696 (template-name)] "double" [reduce using rule 731 (typedef-name)] "void" reduce using rule 137 (class-name) "void" [reduce using rule 246 (enum-name)] "void" [reduce using rule 696 (template-name)] "void" [reduce using rule 731 (typedef-name)] "static_assert" reduce using rule 137 (class-name) "static_assert" [reduce using rule 246 (enum-name)] "static_assert" [reduce using rule 696 (template-name)] "static_assert" [reduce using rule 731 (typedef-name)] "static" reduce using rule 137 (class-name) "static" [reduce using rule 246 (enum-name)] "static" [reduce using rule 696 (template-name)] "static" [reduce using rule 731 (typedef-name)] "thread_local" reduce using rule 137 (class-name) "thread_local" [reduce using rule 246 (enum-name)] "thread_local" [reduce using rule 696 (template-name)] "thread_local" [reduce using rule 731 (typedef-name)] "mutable" reduce using rule 137 (class-name) "mutable" [reduce using rule 246 (enum-name)] "mutable" [reduce using rule 696 (template-name)] "mutable" [reduce using rule 731 (typedef-name)] "override" reduce using rule 137 (class-name) "override" [reduce using rule 246 (enum-name)] "override" [reduce using rule 696 (template-name)] "override" [reduce using rule 731 (typedef-name)] $default reduce using rule 137 (class-name)
708 type-constraint → nested-name-specifier-opt concept-name • [",", "...", IDENTIFIER, "=", ";", "decltype", ">", "auto"] 709 | nested-name-specifier-opt concept-name • "<" template-argument-list-opt ">" "<" shift, and go to state 403 $default reduce using rule 708 (type-constraint)
644 simple-template-id → template-name • "<" template-argument-list-opt ">" 649 simple-type-specifier → nested-name-specifier-opt template-name • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] "<" shift, and go to state 208 "<" [reduce using rule 649 (simple-type-specifier)] $default reduce using rule 649 (simple-type-specifier)
645 simple-type-specifier → nested-name-specifier-opt type-name • $default reduce using rule 645 (simple-type-specifier)
150 concept-definition → "concept" • concept-name "=" constraint-expression ";" 151 concept-name → • IDENTIFIER IDENTIFIER shift, and go to state 404 concept-name go to state 405
691 template-declaration → template-head concept-definition • $default reduce using rule 691 (template-declaration)
690 template-declaration → template-head declaration • $default reduce using rule 690 (template-declaration)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 158 constant-expression → • conditional-expression 169 conversion-function-id → • "operator" conversion-type-id 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 644 | template-name "<" • template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 683 template-argument → • constant-expression 684 | • type-id 685 | • id-expression 686 template-argument-list → • template-argument ELLIPSIS-opt 687 | • template-argument-list "," template-argument ELLIPSIS-opt 688 template-argument-list-opt → • %empty [">"] 689 | • template-argument-list 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 712 type-id → • type-specifier-seq abstract-declarator-opt 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 729 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 730 | • type-specifier type-specifier-seq 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "operator" shift, and go to state 249 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 125 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] ">" reduce using rule 688 (template-argument-list-opt) "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 await-expression go to state 269 cast-expression go to state 270 class-key go to state 406 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 309 constant-expression go to state 407 conversion-function-id go to state 273 cv-qualifier go to state 57 decltype-specifier go to state 63 delete-expression go to state 274 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 fold-expression go to state 278 id-expression go to state 408 inclusive-or-expression go to state 280 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 311 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 409 string-literal go to state 300 template-argument go to state 410 template-argument-list go to state 411 template-argument-list-opt go to state 412 template-id go to state 301 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 413 type-name go to state 106 type-specifier go to state 414 type-specifier-seq go to state 415 typedef-name go to state 108 typename-specifier go to state 416 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306
555 placeholder-type-specifier → type-constraint-opt "decltype" • "(" "auto" ")" "(" shift, and go to state 417
554 placeholder-type-specifier → type-constraint-opt "auto" • $default reduce using rule 554 (placeholder-type-specifier)
453 nested-name-specifier → type-name "::" • $default reduce using rule 453 (nested-name-specifier)
0 $accept → result $end • $default accept
271 export-declaration → "export" "{" declaration-seq-opt • "}" "}" shift, and go to state 418
9 EXTERN-opt → • %empty ["template"] 10 | • "extern" 13 INLINE-opt → • %empty ["namespace"] 14 | • "inline" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 71 attribute-declaration → • attribute-specifier-seq ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "using", "alignas", "(", "&", "asm", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 193 declaration → • block-declaration 194 | • nodeclspec-function-declaration 195 | • function-definition 196 | • template-declaration 197 | • deduction-guide 198 | • explicit-instantiation 199 | • explicit-specialization 200 | • export-declaration 201 | • linkage-specification 202 | • namespace-definition 203 | • empty-declaration 204 | • attribute-declaration 205 | • module-import-declaration 206 declaration-seq → • declaration 207 | • declaration-seq declaration 208 declaration-seq-opt → • %empty ["}"] 209 | • declaration-seq 214 decltype-specifier → • "decltype" "(" expression ")" 215 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 233 empty-declaration → • ";" 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 264 explicit-instantiation → • EXTERN-opt "template" declaration 265 explicit-specialization → • "template" "<" ">" declaration 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 268 explicit-specifier-opt → • %empty [IDENTIFIER] 269 | • explicit-specifier 270 export-declaration → • "export" declaration 271 | • "export" "{" declaration-seq-opt "}" 272 | • "export" module-import-declaration 327 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 328 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 329 function-specifier → • "virtual" 330 | • explicit-specifier 390 linkage-specification → • "extern" string-literal "{" declaration-seq-opt "}" 390 | "extern" string-literal "{" • declaration-seq-opt "}" 391 | • "extern" string-literal declaration 428 module-import-declaration → • "import" module-name attribute-specifier-seq-opt ";" 429 | • "import" module-partition attribute-specifier-seq-opt ";" 430 | • "import" header-name attribute-specifier-seq-opt ";" 443 named-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 447 namespace-definition → • named-namespace-definition 448 | • unnamed-namespace-definition 449 | • nested-namespace-definition 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 460 nested-namespace-definition → • "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" 476 nodeclspec-function-declaration → • attribute-specifier-seq-opt declarator ";" 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 690 template-declaration → • template-head declaration 691 | • template-head concept-definition 692 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 754 unnamed-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body "}" 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "export" shift, and go to state 2 "extern" shift, and go to state 3 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 5 "::" shift, and go to state 6 "template" shift, and go to state 7 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 ";" shift, and go to state 11 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "import" shift, and go to state 25 "namespace" shift, and go to state 26 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 268 (explicit-specifier-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "template" [reduce using rule 9 (EXTERN-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "}" reduce using rule 208 (declaration-seq-opt) "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "namespace" [reduce using rule 13 (INLINE-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) EXTERN-opt go to state 45 INLINE-opt go to state 46 alias-declaration go to state 47 asm-declaration go to state 48 attribute-declaration go to state 49 attribute-specifier-seq go to state 50 attribute-specifier-seq-opt go to state 51 block-declaration go to state 52 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration go to state 60 declaration-seq go to state 61 declaration-seq-opt go to state 419 decltype-specifier go to state 63 deduction-guide go to state 64 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 empty-declaration go to state 68 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-instantiation go to state 73 explicit-specialization go to state 74 explicit-specifier go to state 75 explicit-specifier-opt go to state 76 export-declaration go to state 77 function-definition go to state 78 function-specifier go to state 79 linkage-specification go to state 82 module-import-declaration go to state 83 named-namespace-definition go to state 84 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-definition go to state 87 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 nested-namespace-definition go to state 91 nodeclspec-function-declaration go to state 92 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-declaration go to state 100 template-head go to state 101 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 unnamed-namespace-definition go to state 110 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
391 linkage-specification → "extern" string-literal declaration • $default reduce using rule 391 (linkage-specification)
692 template-head → "template" • "<" template-parameter-list ">" requires-clause-opt "<" shift, and go to state 420
723 type-parameter-key → "typename" • $default reduce using rule 723 (type-parameter-key)
722 type-parameter-key → "class" • $default reduce using rule 722 (type-parameter-key)
9 EXTERN-opt → • %empty ["template"] 10 | • "extern" 13 INLINE-opt → • %empty ["namespace"] 14 | • "inline" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 71 attribute-declaration → • attribute-specifier-seq ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "using", "alignas", "(", "&", "asm", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 193 declaration → • block-declaration 194 | • nodeclspec-function-declaration 195 | • function-definition 196 | • template-declaration 197 | • deduction-guide 198 | • explicit-instantiation 199 | • explicit-specialization 200 | • export-declaration 201 | • linkage-specification 202 | • namespace-definition 203 | • empty-declaration 204 | • attribute-declaration 205 | • module-import-declaration 214 decltype-specifier → • "decltype" "(" expression ")" 215 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 233 empty-declaration → • ";" 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 264 explicit-instantiation → • EXTERN-opt "template" declaration 265 explicit-specialization → • "template" "<" ">" declaration 265 | "template" "<" ">" • declaration 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 268 explicit-specifier-opt → • %empty [IDENTIFIER] 269 | • explicit-specifier 270 export-declaration → • "export" declaration 271 | • "export" "{" declaration-seq-opt "}" 272 | • "export" module-import-declaration 327 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 328 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 329 function-specifier → • "virtual" 330 | • explicit-specifier 390 linkage-specification → • "extern" string-literal "{" declaration-seq-opt "}" 391 | • "extern" string-literal declaration 428 module-import-declaration → • "import" module-name attribute-specifier-seq-opt ";" 429 | • "import" module-partition attribute-specifier-seq-opt ";" 430 | • "import" header-name attribute-specifier-seq-opt ";" 443 named-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 447 namespace-definition → • named-namespace-definition 448 | • unnamed-namespace-definition 449 | • nested-namespace-definition 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 460 nested-namespace-definition → • "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" 476 nodeclspec-function-declaration → • attribute-specifier-seq-opt declarator ";" 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 690 template-declaration → • template-head declaration 691 | • template-head concept-definition 692 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 754 unnamed-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body "}" 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "export" shift, and go to state 2 "extern" shift, and go to state 3 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 5 "::" shift, and go to state 6 "template" shift, and go to state 7 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 ";" shift, and go to state 11 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "import" shift, and go to state 25 "namespace" shift, and go to state 26 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 268 (explicit-specifier-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "template" [reduce using rule 9 (EXTERN-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "namespace" [reduce using rule 13 (INLINE-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) EXTERN-opt go to state 45 INLINE-opt go to state 46 alias-declaration go to state 47 asm-declaration go to state 48 attribute-declaration go to state 49 attribute-specifier-seq go to state 50 attribute-specifier-seq-opt go to state 51 block-declaration go to state 52 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration go to state 421 decltype-specifier go to state 63 deduction-guide go to state 64 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 empty-declaration go to state 68 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-instantiation go to state 73 explicit-specialization go to state 74 explicit-specifier go to state 75 explicit-specifier-opt go to state 76 export-declaration go to state 77 function-definition go to state 78 function-specifier go to state 79 linkage-specification go to state 82 module-import-declaration go to state 83 named-namespace-definition go to state 84 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-definition go to state 87 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 nested-namespace-definition go to state 91 nodeclspec-function-declaration go to state 92 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-declaration go to state 100 template-head go to state 101 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 unnamed-namespace-definition go to state 110 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
23 THIS-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 24 | • "this" 45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 543 parameter-declaration → attribute-specifier-seq-opt • THIS-opt decl-specifier-seq declarator 544 | attribute-specifier-seq-opt • THIS-opt decl-specifier-seq declarator "=" initializer-clause 545 | attribute-specifier-seq-opt • THIS-opt decl-specifier-seq abstract-declarator-opt 546 | attribute-specifier-seq-opt • THIS-opt decl-specifier-seq abstract-declarator-opt "=" initializer-clause "this" shift, and go to state 422 "alignas" shift, and go to state 158 "[" shift, and go to state 162 $default reduce using rule 23 (THIS-opt) THIS-opt go to state 423 alignment-specifier go to state 166 attribute-specifier go to state 167
151 concept-name → • IDENTIFIER 708 type-constraint → nested-name-specifier-opt • concept-name 709 | nested-name-specifier-opt • concept-name "<" template-argument-list-opt ">" IDENTIFIER shift, and go to state 404 concept-name go to state 202
698 template-parameter → parameter-declaration • $default reduce using rule 698 (template-parameter)
720 type-parameter → template-head • type-parameter-key ELLIPSIS-opt IDENTIFIER-opt 721 | template-head • type-parameter-key IDENTIFIER-opt "=" id-expression 722 type-parameter-key → • "class" 723 | • "typename" "typename" shift, and go to state 217 "class" shift, and go to state 218 type-parameter-key go to state 424
699 template-parameter-list → template-parameter • $default reduce using rule 699 (template-parameter-list)
692 template-head → "template" "<" template-parameter-list • ">" requires-clause-opt 700 template-parameter-list → template-parameter-list • "," template-parameter "," shift, and go to state 425 ">" shift, and go to state 426
5 ELLIPSIS-opt → • %empty [",", IDENTIFIER, ">"] 6 | • "..." 11 IDENTIFIER-opt → • %empty ["="] 12 | • IDENTIFIER 718 type-parameter → type-constraint • ELLIPSIS-opt IDENTIFIER-opt 719 | type-constraint • IDENTIFIER-opt "=" type-id "..." shift, and go to state 156 IDENTIFIER shift, and go to state 427 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "=" reduce using rule 11 (IDENTIFIER-opt) $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 428 IDENTIFIER-opt go to state 429
697 template-parameter → type-parameter • $default reduce using rule 697 (template-parameter)
5 ELLIPSIS-opt → • %empty [",", IDENTIFIER, ">"] 6 | • "..." 11 IDENTIFIER-opt → • %empty ["="] 12 | • IDENTIFIER 716 type-parameter → type-parameter-key • ELLIPSIS-opt IDENTIFIER-opt 717 | type-parameter-key • IDENTIFIER-opt "=" type-id "..." shift, and go to state 156 IDENTIFIER shift, and go to state 427 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "=" reduce using rule 11 (IDENTIFIER-opt) $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 430 IDENTIFIER-opt go to state 431
456 nested-name-specifier → nested-name-specifier IDENTIFIER • "::" 733 typename-specifier → "typename" nested-name-specifier IDENTIFIER • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] "::" shift, and go to state 400 "::" [reduce using rule 733 (typename-specifier)] $default reduce using rule 733 (typename-specifier)
22 TEMPLATE-opt → "template" • $default reduce using rule 22 (TEMPLATE-opt)
457 nested-name-specifier → nested-name-specifier TEMPLATE-opt • simple-template-id "::" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 734 typename-specifier → "typename" nested-name-specifier TEMPLATE-opt • simple-template-id IDENTIFIER shift, and go to state 192 simple-template-id go to state 432 template-name go to state 102
44 alias-declaration → "using" IDENTIFIER attribute-specifier-seq-opt • "=" defining-type-id ";" 45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier "=" shift, and go to state 433 "alignas" shift, and go to state 158 "[" shift, and go to state 162 alignment-specifier go to state 166 attribute-specifier go to state 167
21 TEMPLATE-opt → • %empty [IDENTIFIER] 22 | • "template" 169 conversion-function-id → • "operator" conversion-type-id 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 456 nested-name-specifier → nested-name-specifier • IDENTIFIER "::" 457 | nested-name-specifier • TEMPLATE-opt simple-template-id "::" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 764 using-declarator → TYPENAME-opt nested-name-specifier • unqualified-id IDENTIFIER shift, and go to state 434 "template" shift, and go to state 230 "operator" shift, and go to state 249 "~" shift, and go to state 336 IDENTIFIER [reduce using rule 21 (TEMPLATE-opt)] TEMPLATE-opt go to state 200 conversion-function-id go to state 273 literal-operator-id go to state 283 operator-function-id go to state 290 simple-template-id go to state 435 template-id go to state 301 template-name go to state 102 unqualified-id go to state 436
768 using-enum-declaration → "using" elaborated-enum-specifier ";" • $default reduce using rule 768 (using-enum-declaration)
765 using-declarator-list → using-declarator ELLIPSIS-opt • $default reduce using rule 765 (using-declarator-list)
25 TYPENAME-opt → • %empty [IDENTIFIER, "::", "decltype"] 26 | • "typename" 764 using-declarator → • TYPENAME-opt nested-name-specifier unqualified-id 766 using-declarator-list → using-declarator-list "," • using-declarator ELLIPSIS-opt "typename" shift, and go to state 124 $default reduce using rule 25 (TYPENAME-opt) TYPENAME-opt go to state 126 using-declarator go to state 437
763 using-declaration → "using" using-declarator-list ";" • $default reduce using rule 763 (using-declaration)
137 class-name → IDENTIFIER • ["::"] 246 enum-name → IDENTIFIER • ["::"] 444 namespace-alias → IDENTIFIER • ["::"] 450 namespace-name → IDENTIFIER • ["::"] 696 template-name → IDENTIFIER • ["<"] 731 typedef-name → IDENTIFIER • ["::"] 755 unqualified-id → IDENTIFIER • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] "::" reduce using rule 137 (class-name) "::" [reduce using rule 246 (enum-name)] "::" [reduce using rule 444 (namespace-alias)] "::" [reduce using rule 450 (namespace-name)] "::" [reduce using rule 731 (typedef-name)] "::" [reduce using rule 755 (unqualified-id)] "<" reduce using rule 696 (template-name) "<" [reduce using rule 755 (unqualified-id)] $default reduce using rule 755 (unqualified-id)
477 noexcept-expression → "noexcept" • "(" expression ")" "(" shift, and go to state 438
752 unary-operator → "!" • $default reduce using rule 752 (unary-operator)
20 SCOPE-opt → "::" • ["delete", "new"] 452 nested-name-specifier → "::" • [IDENTIFIER, "template", "operator", "~"] "delete" reduce using rule 20 (SCOPE-opt) "new" reduce using rule 20 (SCOPE-opt) $default reduce using rule 452 (nested-name-specifier)
578 primary-expression → "this" • $default reduce using rule 578 (primary-expression)
750 unary-operator → "+" • $default reduce using rule 750 (unary-operator)
751 unary-operator → "-" • $default reduce using rule 751 (unary-operator)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 130 | "(" • type-id ")" cast-expression 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 277 expression → • assignment-expression 278 | • expression "," assignment-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 285 | "(" • cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 286 | "(" • "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 287 | "(" • cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 579 | "(" • expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 712 type-id → • type-specifier-seq abstract-declarator-opt 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 729 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 730 | • type-specifier type-specifier-seq 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list "..." shift, and go to state 439 IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "operator" shift, and go to state 249 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 125 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 261 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 "co_yield" shift, and go to state 264 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 assignment-expression go to state 268 await-expression go to state 269 cast-expression go to state 440 class-key go to state 406 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 272 conversion-function-id go to state 273 cv-qualifier go to state 57 decltype-specifier go to state 63 delete-expression go to state 274 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 expression go to state 441 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 285 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 409 string-literal go to state 300 template-id go to state 301 template-name go to state 102 throw-expression go to state 302 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 442 type-name go to state 106 type-specifier go to state 414 type-specifier-seq go to state 415 typedef-name go to state 108 typename-specifier go to state 416 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306 yield-expression go to state 307
749 unary-operator → "&" • $default reduce using rule 749 (unary-operator)
5 ELLIPSIS-opt → • %empty [IDENTIFIER] 6 | • "..." 123 capture → • simple-capture 124 | • init-capture 125 capture-default → • "&" 126 | • "=" 127 capture-list → • capture 128 | • capture-list "," capture 346 init-capture → • ELLIPSIS-opt IDENTIFIER initializer 347 | • "&" ELLIPSIS-opt IDENTIFIER initializer 379 lambda-capture → • capture-default 380 | • capture-list 381 | • capture-default "," capture-list 382 lambda-capture-opt → • %empty ["]"] 383 | • lambda-capture 388 lambda-introducer → "[" • lambda-capture-opt "]" 636 simple-capture → • IDENTIFIER ELLIPSIS-opt 637 | • "&" IDENTIFIER ELLIPSIS-opt 638 | • "this" 639 | • "*" "this" "..." shift, and go to state 156 IDENTIFIER shift, and go to state 443 "this" shift, and go to state 444 "=" shift, and go to state 445 "&" shift, and go to state 446 "*" shift, and go to state 447 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] $default reduce using rule 382 (lambda-capture-opt) ELLIPSIS-opt go to state 448 capture go to state 449 capture-default go to state 450 capture-list go to state 451 init-capture go to state 452 lambda-capture go to state 453 lambda-capture-opt go to state 454 simple-capture go to state 455
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 90 await-expression → • "co_await" cast-expression 90 | "co_await" • cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 await-expression go to state 269 cast-expression go to state 456 class-name go to state 55 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 fold-expression go to state 278 id-expression go to state 279 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 requires-expression go to state 296 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306
134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 169 conversion-function-id → "operator" • conversion-type-id 170 conversion-type-id → • type-specifier-seq conversion-declarator-opt 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 246 enum-name → • IDENTIFIER 392 literal-operator-id → "operator" • string-literal IDENTIFIER 393 | "operator" • user-defined-string-literal 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 497 operator-function-id → "operator" • overloadable-operator 498 | "operator" • overloadable-operator "<" template-argument-list-opt ">" 499 overloadable-operator → • "new" 500 | • "delete" 501 | • "new" "[" "]" 502 | • "delete" "[" "]" 503 | • "co_await" 504 | • "(" ")" 505 | • "[" "]" 506 | • "->" 507 | • "->*" 508 | • "~" 509 | • "!" 510 | • "+" 511 | • "-" 512 | • "*" 513 | • "/" 514 | • "%" 515 | • "^" 516 | • "&" 517 | • "|" 518 | • "=" 519 | • "+=" 520 | • "-=" 521 | • "*=" 522 | • "/=" 523 | • "%=" 524 | • "^=" 525 | • "&=" 526 | • "|=" 527 | • "==" 528 | • "!=" 529 | • "<" 530 | • ">" 531 | • "<=" 532 | • ">=" 533 | • "<=>" 534 | • "&&" 535 | • "||" 536 | • "<<" 537 | • ">>" 538 | • "<<=" 539 | • ">>=" 540 | • "++" 541 | • "--" 542 | • "," 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 729 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 730 | • type-specifier type-specifier-seq 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 762 user-defined-string-literal → • string-literal ud-suffix "," shift, and go to state 457 IDENTIFIER shift, and go to state 4 "!" shift, and go to state 458 "::" shift, and go to state 6 "typename" shift, and go to state 8 "+" shift, and go to state 459 "-" shift, and go to state 460 "=" shift, and go to state 461 "(" shift, and go to state 462 "&" shift, and go to state 463 "*=" shift, and go to state 464 "/=" shift, and go to state 465 "%=" shift, and go to state 466 "+=" shift, and go to state 467 "-=" shift, and go to state 468 ">>=" shift, and go to state 469 "<<=" shift, and go to state 470 "&=" shift, and go to state 471 "^=" shift, and go to state 472 "|=" shift, and go to state 473 "[" shift, and go to state 474 "co_await" shift, and go to state 475 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "<=>" shift, and go to state 476 "&&" shift, and go to state 477 "||" shift, and go to state 478 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "->" shift, and go to state 479 "delete" shift, and go to state 480 "enum" shift, and go to state 125 "==" shift, and go to state 481 "!=" shift, and go to state 482 "^" shift, and go to state 483 "<" shift, and go to state 484 ">" shift, and go to state 485 "*" shift, and go to state 486 "/" shift, and go to state 487 "%" shift, and go to state 488 "|" shift, and go to state 489 "<<" shift, and go to state 490 ">>" shift, and go to state 491 "<=" shift, and go to state 492 ">=" shift, and go to state 493 "->*" shift, and go to state 494 "new" shift, and go to state 495 "~" shift, and go to state 496 "++" shift, and go to state 497 "--" shift, and go to state 498 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] $default reduce using rule 710 (type-constraint-opt) class-key go to state 406 class-name go to state 55 conversion-type-id go to state 499 cv-qualifier go to state 57 decltype-specifier go to state 63 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 overloadable-operator go to state 500 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 string-literal go to state 501 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 414 type-specifier-seq go to state 502 typedef-name go to state 108 typename-specifier go to state 109 user-defined-string-literal go to state 503
748 unary-operator → "*" • $default reduce using rule 748 (unary-operator)
616 requirement-parameter-list → • "(" parameter-declaration-clause ")" 617 requirement-parameter-list-opt → • %empty ["{"] 618 | • requirement-parameter-list 624 requires-expression → "requires" • requirement-parameter-list-opt requirement-body "(" shift, and go to state 504 $default reduce using rule 617 (requirement-parameter-list-opt) requirement-parameter-list go to state 505 requirement-parameter-list-opt go to state 506
137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 753 unary-operator → "~" • [IDENTIFIER, "noexcept", "!", "::", "this", "typename", "+", "-", "(", "&", "[", "co_await", "operator", "decltype", "delete", "*", "requires", "new", "~", "++", "--", "auto", "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "literal", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", STRING_LITERAL, "sizeof", "alignof"] 759 unqualified-id → "~" • type-name 760 | "~" • decltype-specifier IDENTIFIER shift, and go to state 507 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 753 (unary-operator)] "decltype" [reduce using rule 753 (unary-operator)] $default reduce using rule 753 (unary-operator) class-name go to state 55 decltype-specifier go to state 508 enum-name go to state 71 simple-template-id go to state 96 template-name go to state 102 type-name go to state 509 typedef-name go to state 108
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 738 | "++" • cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 await-expression go to state 269 cast-expression go to state 510 class-name go to state 55 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 fold-expression go to state 278 id-expression go to state 279 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 requires-expression go to state 296 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 739 | "--" • cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 await-expression go to state 269 cast-expression go to state 511 class-name go to state 55 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 fold-expression go to state 278 id-expression go to state 279 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 requires-expression go to state 296 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306
570 postfix-expression → "dynamic_cast" • "<" type-id ">" "(" expression ")" "<" shift, and go to state 512
571 postfix-expression → "static_cast" • "<" type-id ">" "(" expression ")" "<" shift, and go to state 513
572 postfix-expression → "reinterpret_cast" • "<" type-id ">" "(" expression ")" "<" shift, and go to state 514
573 postfix-expression → "const_cast" • "<" type-id ">" "(" expression ")" "<" shift, and go to state 515
574 postfix-expression → "typeid" • "(" expression ")" 575 | "typeid" • "(" type-id ")" "(" shift, and go to state 516
576 primary-expression → "literal" • $default reduce using rule 576 (primary-expression)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 54 assignment-expression-opt → • %empty [",", "...", "=", ";", ")", "]", ":", "{", "}", ">"] 55 | • assignment-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 701 | "throw" • assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 261 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 "co_yield" shift, and go to state 264 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "delete" reduce using rule 19 (SCOPE-opt) "new" reduce using rule 19 (SCOPE-opt) "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 54 (assignment-expression-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 assignment-expression go to state 517 assignment-expression-opt go to state 518 await-expression go to state 269 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 272 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 285 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 throw-expression go to state 302 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306 yield-expression go to state 307
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 90 await-expression → • "co_await" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 741 | "sizeof" • unary-expression 742 | • "sizeof" "(" type-id ")" 742 | "sizeof" • "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 743 | "sizeof" • "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id "..." shift, and go to state 519 IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 520 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 await-expression go to state 269 class-name go to state 55 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 fold-expression go to state 278 id-expression go to state 279 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 requires-expression go to state 296 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 521 unary-operator go to state 305 unqualified-id go to state 306
744 unary-expression → "alignof" • "(" type-id ")" "(" shift, and go to state 522
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 775 | "co_yield" • assignment-expression 776 | • "co_yield" braced-init-list 776 | "co_yield" • braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "{" shift, and go to state 380 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 261 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 "co_yield" shift, and go to state 264 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 assignment-expression go to state 523 await-expression go to state 269 braced-init-list go to state 524 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 272 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 285 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 throw-expression go to state 302 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306 yield-expression go to state 307
222 delete-expression → SCOPE-opt • "delete" cast-expression 223 | SCOPE-opt • "delete" "[" "]" cast-expression 466 new-expression → SCOPE-opt • "new" new-placement-opt new-type-id new-initializer-opt 467 | SCOPE-opt • "new" new-placement-opt "(" type-id ")" new-initializer-opt "delete" shift, and go to state 525 "new" shift, and go to state 526
42 additive-expression → additive-expression • "+" multiplicative-expression 43 | additive-expression • "-" multiplicative-expression 633 shift-expression → additive-expression • [",", "...", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "|", "<<", ">>", "<=", ">="] "+" shift, and go to state 527 "-" shift, and go to state 528 $default reduce using rule 633 (shift-expression)
48 and-expression → and-expression • "&" equality-expression 262 exclusive-or-expression → and-expression • [",", "...", "=", ";", ")", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "&&", "||", "^", ">", "|"] "&" shift, and go to state 529 $default reduce using rule 262 (exclusive-or-expression)
277 expression → assignment-expression • $default reduce using rule 277 (expression)
740 unary-expression → await-expression • $default reduce using rule 740 (unary-expression)
556 pm-expression → cast-expression • $default reduce using rule 556 (pm-expression)
147 compare-expression → compare-expression • "<=>" shift-expression 606 relational-expression → compare-expression • [",", "...", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "&&", "||", "==", "!=", "^", "<", ">", "|", "<=", ">="] "<=>" shift, and go to state 530 $default reduce using rule 606 (relational-expression)
50 assignment-expression → conditional-expression • $default reduce using rule 50 (assignment-expression)
757 unqualified-id → conversion-function-id • $default reduce using rule 757 (unqualified-id)
747 unary-expression → delete-expression • $default reduce using rule 747 (unary-expression)
47 and-expression → equality-expression • [",", "...", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "&&", "||", "^", ">", "|"] 257 equality-expression → equality-expression • "==" relational-expression 258 | equality-expression • "!=" relational-expression "==" shift, and go to state 531 "!=" shift, and go to state 532 $default reduce using rule 47 (and-expression)
263 exclusive-or-expression → exclusive-or-expression • "^" and-expression 344 inclusive-or-expression → exclusive-or-expression • [",", "...", "=", ";", ")", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "&&", "||", ">", "|"] "^" shift, and go to state 533 $default reduce using rule 344 (inclusive-or-expression)
214 decltype-specifier → "decltype" "(" expression • ")" 278 expression → expression • "," assignment-expression "," shift, and go to state 534 ")" shift, and go to state 535
582 primary-expression → fold-expression • $default reduce using rule 582 (primary-expression)
580 primary-expression → id-expression • $default reduce using rule 580 (primary-expression)
345 inclusive-or-expression → inclusive-or-expression • "|" exclusive-or-expression 394 logical-and-expression → inclusive-or-expression • [",", "...", "=", ";", ")", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "&&", "||", ">"] "|" shift, and go to state 536 $default reduce using rule 394 (logical-and-expression)
581 primary-expression → lambda-expression • $default reduce using rule 581 (primary-expression)
131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 191 decl-specifier-seq-opt → • %empty ["noexcept", "alignas", "[", "{", "->"] 192 | • decl-specifier-seq 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 329 function-specifier → • "virtual" 330 | • explicit-specifier 384 lambda-declarator → • lambda-specifiers 385 | • "(" parameter-declaration-clause ")" lambda-specifiers requires-clause-opt 386 lambda-expression → lambda-introducer • lambda-declarator compound-statement 387 | lambda-introducer • "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 389 lambda-specifiers → • decl-specifier-seq-opt noexcept-specifier-opt attribute-specifier-seq-opt trailing-return-type-opt 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 151 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "(" shift, and go to state 537 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "<" shift, and go to state 538 "explicit" shift, and go to state 23 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 191 (decl-specifier-seq-opt) class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 539 decl-specifier-seq-opt go to state 540 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 154 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 155 function-specifier go to state 79 lambda-declarator go to state 541 lambda-specifiers go to state 542 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109
695 template-id → literal-operator-id • "<" template-argument-list-opt ">" 758 unqualified-id → literal-operator-id • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] "<" shift, and go to state 543 "<" [reduce using rule 758 (unqualified-id)] $default reduce using rule 758 (unqualified-id)
395 logical-and-expression → logical-and-expression • "&&" inclusive-or-expression 396 logical-or-expression → logical-and-expression • [",", "...", "=", ";", ")", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "||", ">"] "&&" shift, and go to state 544 $default reduce using rule 396 (logical-or-expression)
53 assignment-expression → logical-or-expression • assignment-operator initializer-clause 56 assignment-operator → • "=" 57 | • "*=" 58 | • "/=" 59 | • "%=" 60 | • "+=" 61 | • "-=" 62 | • ">>=" 63 | • "<<=" 64 | • "&=" 65 | • "^=" 66 | • "|=" 156 conditional-expression → logical-or-expression • [",", "...", "=", ";", ")", "]", ":", "{", "}", ">"] 157 | logical-or-expression • "?" expression ":" assignment-expression 397 logical-or-expression → logical-or-expression • "||" logical-and-expression "=" shift, and go to state 545 "*=" shift, and go to state 546 "/=" shift, and go to state 547 "%=" shift, and go to state 548 "+=" shift, and go to state 549 "-=" shift, and go to state 550 ">>=" shift, and go to state 551 "<<=" shift, and go to state 552 "&=" shift, and go to state 553 "^=" shift, and go to state 554 "|=" shift, and go to state 555 "?" shift, and go to state 556 "||" shift, and go to state 557 "=" [reduce using rule 156 (conditional-expression)] $default reduce using rule 156 (conditional-expression) assignment-operator go to state 558
41 additive-expression → multiplicative-expression • [",", "...", "+", "-", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "|", "<<", ">>", "<=", ">="] 440 multiplicative-expression → multiplicative-expression • "*" pm-expression 441 | multiplicative-expression • "/" pm-expression 442 | multiplicative-expression • "%" pm-expression "*" shift, and go to state 559 "/" shift, and go to state 560 "%" shift, and go to state 561 $default reduce using rule 41 (additive-expression)
21 TEMPLATE-opt → • %empty [IDENTIFIER, "operator", "~"] 22 | • "template" 456 nested-name-specifier → nested-name-specifier • IDENTIFIER "::" 457 | nested-name-specifier • TEMPLATE-opt simple-template-id "::" 459 nested-name-specifier-opt → nested-name-specifier • [IDENTIFIER] 600 qualified-id → nested-name-specifier • TEMPLATE-opt unqualified-id 646 simple-type-specifier → nested-name-specifier • "template" simple-template-id IDENTIFIER shift, and go to state 198 "template" shift, and go to state 199 IDENTIFIER [reduce using rule 21 (TEMPLATE-opt)] IDENTIFIER [reduce using rule 459 (nested-name-specifier-opt)] $default reduce using rule 21 (TEMPLATE-opt) TEMPLATE-opt go to state 562
746 unary-expression → new-expression • $default reduce using rule 746 (unary-expression)
745 unary-expression → noexcept-expression • $default reduce using rule 745 (unary-expression)
694 template-id → operator-function-id • "<" template-argument-list-opt ">" 756 unqualified-id → operator-function-id • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] "<" shift, and go to state 563 "<" [reduce using rule 756 (unqualified-id)] $default reduce using rule 756 (unqualified-id)
439 multiplicative-expression → pm-expression • [",", "...", "+", "-", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "*", "/", "%", "|", "<<", ">>", "<=", ">="] 557 pm-expression → pm-expression • ".*" cast-expression 558 | pm-expression • "->*" cast-expression ".*" shift, and go to state 564 "->*" shift, and go to state 565 $default reduce using rule 439 (multiplicative-expression)
560 postfix-expression → postfix-expression • "[" expression-list-opt "]" 561 | postfix-expression • "(" expression-list-opt ")" 566 | postfix-expression • "." TEMPLATE-opt id-expression 567 | postfix-expression • "->" TEMPLATE-opt id-expression 568 | postfix-expression • "++" 569 | postfix-expression • "--" 736 unary-expression → postfix-expression • [",", "...", "+", "-", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*"] "(" shift, and go to state 566 "[" shift, and go to state 567 "->" shift, and go to state 568 "." shift, and go to state 569 "++" shift, and go to state 570 "--" shift, and go to state 571 $default reduce using rule 736 (unary-expression)
559 postfix-expression → primary-expression • $default reduce using rule 559 (postfix-expression)
341 id-expression → qualified-id • $default reduce using rule 341 (id-expression)
256 equality-expression → relational-expression • [",", "...", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "&&", "||", "==", "!=", "^", ">", "|"] 607 relational-expression → relational-expression • "<" compare-expression 608 | relational-expression • ">" compare-expression 609 | relational-expression • "<=" compare-expression 610 | relational-expression • ">=" compare-expression "<" shift, and go to state 572 ">" shift, and go to state 573 "<=" shift, and go to state 574 ">=" shift, and go to state 575 ">" [reduce using rule 256 (equality-expression)] $default reduce using rule 256 (equality-expression)
583 primary-expression → requires-expression • $default reduce using rule 583 (primary-expression)
146 compare-expression → shift-expression • [",", "...", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "|", "<=", ">="] 634 shift-expression → shift-expression • "<<" additive-expression 635 | shift-expression • ">>" additive-expression "<<" shift, and go to state 576 ">>" shift, and go to state 577 $default reduce using rule 146 (compare-expression)
138 class-name → simple-template-id • ["::"] 693 template-id → simple-template-id • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 732 typedef-name → simple-template-id • ["::"] "::" reduce using rule 138 (class-name) "::" [reduce using rule 693 (template-id)] "::" [reduce using rule 732 (typedef-name)] $default reduce using rule 693 (template-id)
120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 562 postfix-expression → simple-type-specifier • "(" expression-list-opt ")" 564 | simple-type-specifier • braced-init-list "(" shift, and go to state 578 "{" shift, and go to state 380 braced-init-list go to state 579
577 primary-expression → string-literal • $default reduce using rule 577 (primary-expression)
761 unqualified-id → template-id • $default reduce using rule 761 (unqualified-id)
52 assignment-expression → throw-expression • $default reduce using rule 52 (assignment-expression)
120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 563 postfix-expression → typename-specifier • "(" expression-list-opt ")" 565 | typename-specifier • braced-init-list "(" shift, and go to state 580 "{" shift, and go to state 380 braced-init-list go to state 581
129 cast-expression → unary-expression • $default reduce using rule 129 (cast-expression)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 737 | unary-operator • cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 await-expression go to state 269 cast-expression go to state 582 class-name go to state 55 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 fold-expression go to state 278 id-expression go to state 279 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 requires-expression go to state 296 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306
340 id-expression → unqualified-id • $default reduce using rule 340 (id-expression)
51 assignment-expression → yield-expression • $default reduce using rule 51 (assignment-expression)
228 elaborated-enum-specifier → "enum" nested-name-specifier-opt IDENTIFIER • $default reduce using rule 228 (elaborated-enum-specifier)
158 constant-expression → conditional-expression • $default reduce using rule 158 (constant-expression)
266 explicit-specifier → "explicit" "(" constant-expression • ")" ")" shift, and go to state 583
156 conditional-expression → logical-or-expression • [",", "...", "=", ";", ")", "]", ":", "{", "}", ">"] 157 | logical-or-expression • "?" expression ":" assignment-expression 397 logical-or-expression → logical-or-expression • "||" logical-and-expression "?" shift, and go to state 556 "||" shift, and go to state 557 $default reduce using rule 156 (conditional-expression)
332 global-module-fragment → "module" ";" declaration-seq-opt • $default reduce using rule 332 (global-module-fragment)
432 module-name-qualifier → IDENTIFIER "." • $default reduce using rule 432 (module-name-qualifier)
436 module-partition → ":" module-name-qualifier-opt • IDENTIFIER IDENTIFIER shift, and go to state 584
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 430 module-import-declaration → "import" header-name attribute-specifier-seq-opt • ";" ";" shift, and go to state 585 "alignas" shift, and go to state 158 "[" shift, and go to state 162 alignment-specifier go to state 166 attribute-specifier go to state 167
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 428 module-import-declaration → "import" module-name attribute-specifier-seq-opt • ";" ";" shift, and go to state 586 "alignas" shift, and go to state 158 "[" shift, and go to state 162 alignment-specifier go to state 166 attribute-specifier go to state 167
433 module-name-qualifier → module-name-qualifier IDENTIFIER • "." "." shift, and go to state 587
431 module-name → module-name-qualifier-opt IDENTIFIER • $default reduce using rule 431 (module-name)
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 429 module-import-declaration → "import" module-partition attribute-specifier-seq-opt • ";" ";" shift, and go to state 588 "alignas" shift, and go to state 158 "[" shift, and go to state 162 alignment-specifier go to state 166 attribute-specifier go to state 167
137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → "namespace" IDENTIFIER "=" • qualified-namespace-specifier ";" 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 601 qualified-namespace-specifier → • nested-name-specifier-opt namespace-name 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] class-name go to state 55 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 133 nested-name-specifier-opt go to state 589 qualified-namespace-specifier go to state 590 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
13 INLINE-opt → • %empty [IDENTIFIER] 14 | • "inline" 235 enclosing-namespace-specifier → enclosing-namespace-specifier "::" • INLINE-opt IDENTIFIER 460 nested-namespace-definition → "namespace" enclosing-namespace-specifier "::" • INLINE-opt IDENTIFIER "{" namespace-body "}" "inline" shift, and go to state 591 $default reduce using rule 13 (INLINE-opt) INLINE-opt go to state 592
676 static_assert-declaration → "static_assert" "(" constant-expression • ")" ";" 677 | "static_assert" "(" constant-expression • "," string-literal ")" ";" "," shift, and go to state 593 ")" shift, and go to state 594
264 explicit-instantiation → EXTERN-opt "template" declaration • $default reduce using rule 264 (explicit-instantiation)
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 443 named-namespace-definition → INLINE-opt "namespace" attribute-specifier-seq-opt • IDENTIFIER "{" namespace-body "}" 754 unnamed-namespace-definition → INLINE-opt "namespace" attribute-specifier-seq-opt • "{" namespace-body "}" IDENTIFIER shift, and go to state 595 "alignas" shift, and go to state 158 "[" shift, and go to state 162 "{" shift, and go to state 596 alignment-specifier go to state 166 attribute-specifier go to state 167
351 init-declarator-list → init-declarator-list • "," init-declarator 641 simple-declaration → attribute-specifier-seq decl-specifier-seq init-declarator-list • ";" "," shift, and go to state 387 ";" shift, and go to state 597
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 239 enum-head → enum-key attribute-specifier-seq-opt • enum-head-name-opt enum-base-opt 240 enum-head-name → • nested-name-specifier-opt IDENTIFIER 241 enum-head-name-opt → • %empty [":", "{"] 242 | • enum-head-name 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "alignas" shift, and go to state 158 "[" shift, and go to state 162 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] $default reduce using rule 241 (enum-head-name-opt) alignment-specifier go to state 166 attribute-specifier go to state 167 class-name go to state 55 decltype-specifier go to state 121 enum-head-name go to state 598 enum-head-name-opt go to state 395 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 133 nested-name-specifier-opt go to state 396 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 767 using-directive → attribute-specifier-seq-opt "using" "namespace" • nested-name-specifier-opt namespace-name ";" IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] class-name go to state 55 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 133 nested-name-specifier-opt go to state 599 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 45 alignment-specifier → "alignas" "(" • type-id ELLIPSIS-opt ")" 46 | "alignas" "(" • constant-expression ELLIPSIS-opt ")" 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 158 constant-expression → • conditional-expression 169 conversion-function-id → • "operator" conversion-type-id 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 712 type-id → • type-specifier-seq abstract-declarator-opt 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 729 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 730 | • type-specifier type-specifier-seq 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "operator" shift, and go to state 249 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 125 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 await-expression go to state 269 cast-expression go to state 270 class-key go to state 406 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 309 constant-expression go to state 600 conversion-function-id go to state 273 cv-qualifier go to state 57 decltype-specifier go to state 63 delete-expression go to state 274 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 311 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 409 string-literal go to state 300 template-id go to state 301 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 601 type-name go to state 106 type-specifier go to state 414 type-specifier-seq go to state 415 typedef-name go to state 108 typename-specifier go to state 416 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306
491 noptr-declarator → noptr-declarator • parameters-and-qualifiers 492 | noptr-declarator • "[" constant-expression-opt "]" attribute-specifier-seq-opt 553 parameters-and-qualifiers → • "(" parameter-declaration-clause ")" cv-qualifier-seq-opt ref-qualifier-opt noexcept-specifier-opt attribute-specifier-seq-opt 591 ptr-declarator → noptr-declarator • [",", "...", "=", ";", "(", ")", ":", "{", "final", ">", "try", "requires", "override"] "(" shift, and go to state 347 "[" shift, and go to state 348 "(" [reduce using rule 591 (ptr-declarator)] $default reduce using rule 591 (ptr-declarator) parameters-and-qualifiers go to state 602
493 noptr-declarator → "(" ptr-declarator • ")" ")" shift, and go to state 603
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 594 ptr-operator → "&" attribute-specifier-seq-opt • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] "alignas" shift, and go to state 158 "[" shift, and go to state 162 "alignas" [reduce using rule 594 (ptr-operator)] "[" [reduce using rule 594 (ptr-operator)] $default reduce using rule 594 (ptr-operator) alignment-specifier go to state 166 attribute-specifier go to state 167
49 asm-declaration → attribute-specifier-seq-opt "asm" "(" • string-literal ")" ";" 682 string-literal → • STRING_LITERAL STRING_LITERAL shift, and go to state 118 string-literal go to state 604
80 attribute-specifier → "[" "[" • attribute-using-prefix-opt attribute-list "]" "]" 87 attribute-using-prefix → • "using" attribute-namespace ":" 88 attribute-using-prefix-opt → • %empty [",", IDENTIFIER, "]"] 89 | • attribute-using-prefix "using" shift, and go to state 605 $default reduce using rule 88 (attribute-using-prefix-opt) attribute-using-prefix go to state 606 attribute-using-prefix-opt go to state 607
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 595 ptr-operator → "&&" attribute-specifier-seq-opt • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] "alignas" shift, and go to state 158 "[" shift, and go to state 162 "alignas" [reduce using rule 595 (ptr-operator)] "[" [reduce using rule 595 (ptr-operator)] $default reduce using rule 595 (ptr-operator) alignment-specifier go to state 166 attribute-specifier go to state 167
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 175 cv-qualifier → • "const" 176 | • "volatile" 177 cv-qualifier-seq → • cv-qualifier cv-qualifier-seq-opt 178 cv-qualifier-seq-opt → • %empty [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 179 | • cv-qualifier-seq 593 ptr-operator → "*" attribute-specifier-seq-opt • cv-qualifier-seq-opt "alignas" shift, and go to state 158 "[" shift, and go to state 162 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "alignas" [reduce using rule 178 (cv-qualifier-seq-opt)] "[" [reduce using rule 178 (cv-qualifier-seq-opt)] "const" [reduce using rule 178 (cv-qualifier-seq-opt)] "volatile" [reduce using rule 178 (cv-qualifier-seq-opt)] $default reduce using rule 178 (cv-qualifier-seq-opt) alignment-specifier go to state 166 attribute-specifier go to state 167 cv-qualifier go to state 608 cv-qualifier-seq go to state 609 cv-qualifier-seq-opt go to state 610
137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 759 unqualified-id → "~" • type-name 760 | "~" • decltype-specifier IDENTIFIER shift, and go to state 507 "decltype" shift, and go to state 21 class-name go to state 55 decltype-specifier go to state 508 enum-name go to state 71 simple-template-id go to state 96 template-name go to state 102 type-name go to state 509 typedef-name go to state 108
213 declarator-id → ELLIPSIS-opt id-expression • $default reduce using rule 213 (declarator-id)
21 TEMPLATE-opt → • %empty [IDENTIFIER, "operator", "~"] 22 | • "template" 456 nested-name-specifier → nested-name-specifier • IDENTIFIER "::" 457 | nested-name-specifier • TEMPLATE-opt simple-template-id "::" 600 qualified-id → nested-name-specifier • TEMPLATE-opt unqualified-id IDENTIFIER shift, and go to state 198 "template" shift, and go to state 230 IDENTIFIER [reduce using rule 21 (TEMPLATE-opt)] $default reduce using rule 21 (TEMPLATE-opt) TEMPLATE-opt go to state 562
602 ref-qualifier → "&" • $default reduce using rule 602 (ref-qualifier)
603 ref-qualifier → "&&" • $default reduce using rule 603 (ref-qualifier)
605 ref-qualifier-opt → ref-qualifier • $default reduce using rule 605 (ref-qualifier-opt)
642 simple-declaration → attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt • "[" identifier-list "]" initializer ";" "[" shift, and go to state 611
327 function-definition → attribute-specifier-seq-opt decl-specifier-seq-opt declarator • virt-specifier-seq-opt function-body 328 | attribute-specifier-seq-opt decl-specifier-seq-opt declarator • requires-clause function-body 621 requires-clause → • "requires" constraint-logical-or-expression 769 virt-specifier → • "override" 770 | • "final" 771 virt-specifier-seq → • virt-specifier 772 | • virt-specifier-seq virt-specifier 773 virt-specifier-seq-opt → • %empty ["=", ":", "{", "try"] 774 | • virt-specifier-seq "final" shift, and go to state 612 "requires" shift, and go to state 381 "override" shift, and go to state 613 $default reduce using rule 773 (virt-specifier-seq-opt) requires-clause go to state 614 virt-specifier go to state 615 virt-specifier-seq go to state 616 virt-specifier-seq-opt go to state 617
476 nodeclspec-function-declaration → attribute-specifier-seq-opt declarator ";" • $default reduce using rule 476 (nodeclspec-function-declaration)
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 490 noptr-declarator → declarator-id attribute-specifier-seq-opt • [",", "...", "=", ";", "(", ")", "[", ":", "{", "final", ">", "try", "requires", "override"] "alignas" shift, and go to state 158 "[" shift, and go to state 162 "[" [reduce using rule 490 (noptr-declarator)] $default reduce using rule 490 (noptr-declarator) alignment-specifier go to state 166 attribute-specifier go to state 167
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 596 ptr-operator → nested-name-specifier "*" • attribute-specifier-seq-opt cv-qualifier-seq-opt $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 618
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "this", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 543 parameter-declaration → • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator 544 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator "=" initializer-clause 545 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt 546 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt "=" initializer-clause 547 parameter-declaration-clause → • parameter-declaration-list-opt ELLIPSIS-opt 548 | • parameter-declaration-list "," "..." 549 parameter-declaration-list → • parameter-declaration 550 | • parameter-declaration-list "," parameter-declaration 551 parameter-declaration-list-opt → • %empty ["...", ")"] 552 | • parameter-declaration-list 553 parameters-and-qualifiers → "(" • parameter-declaration-clause ")" cv-qualifier-seq-opt ref-qualifier-opt noexcept-specifier-opt attribute-specifier-seq-opt "..." reduce using rule 551 (parameter-declaration-list-opt) ")" reduce using rule 551 (parameter-declaration-list-opt) $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 220 parameter-declaration go to state 619 parameter-declaration-clause go to state 620 parameter-declaration-list go to state 621 parameter-declaration-list-opt go to state 622
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 158 constant-expression → • conditional-expression 159 constant-expression-opt → • %empty ["]"] 160 | • constant-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 492 noptr-declarator → noptr-declarator "[" • constant-expression-opt "]" attribute-specifier-seq-opt 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "]" reduce using rule 159 (constant-expression-opt) "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 await-expression go to state 269 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 309 constant-expression go to state 623 constant-expression-opt go to state 624 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 311 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306
212 declarator → noptr-declarator parameters-and-qualifiers • trailing-return-type 491 noptr-declarator → noptr-declarator parameters-and-qualifiers • [",", "...", "=", ";", "(", ")", "[", ":", "{", "final", ">", "try", "requires", "override"] 702 trailing-return-type → • "->" type-id "->" shift, and go to state 625 $default reduce using rule 491 (noptr-declarator) trailing-return-type go to state 626
592 ptr-declarator → ptr-operator ptr-declarator • $default reduce using rule 592 (ptr-declarator)
36 access-specifier → "private" • $default reduce using rule 36 (access-specifier)
37 access-specifier → "protected" • $default reduce using rule 37 (access-specifier)
38 access-specifier → "public" • $default reduce using rule 38 (access-specifier)
243 enum-key → "enum" • [IDENTIFIER, "::", "alignas", "[", "decltype"] 244 | "enum" • "class" 245 | "enum" • "struct" "class" shift, and go to state 131 "struct" shift, and go to state 132 $default reduce using rule 243 (enum-key)
424 member-specification → access-specifier • ":" member-specification-opt ":" shift, and go to state 627
412 member-declaration → alias-declaration • $default reduce using rule 412 (member-declaration)
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 191 decl-specifier-seq-opt → • %empty ["...", IDENTIFIER, "::", ";", "alignas", "(", "&", "[", ":", "&&", "operator", "decltype", "*", "~"] 192 | • decl-specifier-seq 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 327 function-definition → attribute-specifier-seq-opt • decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 328 | attribute-specifier-seq-opt • decl-specifier-seq-opt declarator requires-clause function-body 329 function-specifier → • "virtual" 330 | • explicit-specifier 404 member-declaration → attribute-specifier-seq-opt • decl-specifier-seq-opt member-declarator-list-opt ";" 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 151 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "alignas" shift, and go to state 158 "[" shift, and go to state 162 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 IDENTIFIER [reduce using rule 191 (decl-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "::" [reduce using rule 191 (decl-specifier-seq-opt)] "alignas" [reduce using rule 191 (decl-specifier-seq-opt)] "[" [reduce using rule 191 (decl-specifier-seq-opt)] "decltype" [reduce using rule 191 (decl-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 191 (decl-specifier-seq-opt) alignment-specifier go to state 166 attribute-specifier go to state 167 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 539 decl-specifier-seq-opt go to state 628 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 154 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 155 function-specifier go to state 79 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109
411 member-declaration → deduction-guide • $default reduce using rule 411 (member-declaration)
414 member-declaration → empty-declaration • $default reduce using rule 414 (member-declaration)
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 496 opaque-enum-declaration → enum-key • attribute-specifier-seq-opt enum-head-name enum-base-opt ";" $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 629
410 member-declaration → explicit-specialization • $default reduce using rule 410 (member-declaration)
269 explicit-specifier-opt → explicit-specifier • $default reduce using rule 269 (explicit-specifier-opt)
405 member-declaration → function-definition • $default reduce using rule 405 (member-declaration)
36 access-specifier → • "private" 37 | • "protected" 38 | • "public" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", ";", "alignas", "(", "&", "[", ":", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 215 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 233 empty-declaration → • ";" 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 265 explicit-specialization → • "template" "<" ">" declaration 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 268 explicit-specifier-opt → • %empty [IDENTIFIER] 269 | • explicit-specifier 327 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 328 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 404 member-declaration → • attribute-specifier-seq-opt decl-specifier-seq-opt member-declarator-list-opt ";" 405 | • function-definition 406 | • using-declaration 407 | • using-enum-declaration 408 | • static_assert-declaration 409 | • template-declaration 410 | • explicit-specialization 411 | • deduction-guide 412 | • alias-declaration 413 | • opaque-enum-declaration 414 | • empty-declaration 423 member-specification → • member-declaration member-specification-opt 423 | member-declaration • member-specification-opt 424 | • access-specifier ":" member-specification-opt 425 member-specification-opt → • %empty ["}"] 426 | • member-specification 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 690 template-declaration → • template-head declaration 691 | • template-head concept-definition 692 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 763 using-declaration → • "using" using-declarator-list ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "template" shift, and go to state 7 "private" shift, and go to state 351 "protected" shift, and go to state 352 "public" shift, and go to state 353 "using" shift, and go to state 10 ";" shift, and go to state 11 "enum" shift, and go to state 354 "explicit" shift, and go to state 23 "static_assert" shift, and go to state 41 IDENTIFIER reduce using rule 83 (attribute-specifier-seq-opt) IDENTIFIER [reduce using rule 268 (explicit-specifier-opt)] ";" [reduce using rule 83 (attribute-specifier-seq-opt)] "}" reduce using rule 425 (member-specification-opt) "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) access-specifier go to state 355 alias-declaration go to state 356 attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 357 deduction-guide go to state 358 empty-declaration go to state 359 enum-key go to state 360 explicit-specialization go to state 361 explicit-specifier go to state 362 explicit-specifier-opt go to state 76 function-definition go to state 363 member-declaration go to state 364 member-specification go to state 365 member-specification-opt go to state 630 opaque-enum-declaration go to state 367 static_assert-declaration go to state 368 template-declaration go to state 369 template-head go to state 101 using-declaration go to state 370 using-enum-declaration go to state 371
426 member-specification-opt → member-specification • $default reduce using rule 426 (member-specification-opt)
142 class-specifier → class-head "{" member-specification-opt • "}" "}" shift, and go to state 631
413 member-declaration → opaque-enum-declaration • $default reduce using rule 413 (member-declaration)
408 member-declaration → static_assert-declaration • $default reduce using rule 408 (member-declaration)
409 member-declaration → template-declaration • $default reduce using rule 409 (member-declaration)
406 member-declaration → using-declaration • $default reduce using rule 406 (member-declaration)
407 member-declaration → using-enum-declaration • $default reduce using rule 407 (member-declaration)
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 99 base-clause → ":" • base-specifier-list 102 base-specifier → • attribute-specifier-seq-opt class-or-decltype 103 | • attribute-specifier-seq-opt "virtual" access-specifier-opt class-or-decltype 104 | • attribute-specifier-seq-opt access-specifier VIRTUAL-opt class-or-decltype 105 base-specifier-list → • base-specifier ELLIPSIS-opt 106 | • base-specifier-list "," base-specifier ELLIPSIS-opt $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 632 base-specifier go to state 633 base-specifier-list go to state 634
101 base-clause-opt → base-clause • $default reduce using rule 101 (base-clause-opt)
132 class-head → class-key attribute-specifier-seq-opt base-clause-opt • $default reduce using rule 132 (class-head)
131 class-head → class-key attribute-specifier-seq-opt class-head-name • class-virt-specifier-opt base-clause-opt 143 class-virt-specifier → • "final" 144 class-virt-specifier-opt → • %empty [":", "{"] 145 | • class-virt-specifier "final" shift, and go to state 635 $default reduce using rule 144 (class-virt-specifier-opt) class-virt-specifier go to state 636 class-virt-specifier-opt go to state 637
133 class-head-name → nested-name-specifier-opt • class-name 137 class-name → • IDENTIFIER 138 | • simple-template-id 229 elaborated-type-specifier → class-key attribute-specifier-seq-opt nested-name-specifier-opt • IDENTIFIER 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER IDENTIFIER shift, and go to state 638 class-name go to state 639 simple-template-id go to state 640 template-name go to state 102
231 elaborated-type-specifier → class-key nested-name-specifier TEMPLATE-opt • simple-template-id 457 nested-name-specifier → nested-name-specifier TEMPLATE-opt • simple-template-id "::" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER IDENTIFIER shift, and go to state 192 simple-template-id go to state 641 template-name go to state 102
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 116 brace-or-equal-initializer → "=" • initializer-clause 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 361 initializer-clause → • assignment-expression 362 | • braced-init-list 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "{" shift, and go to state 380 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 261 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 "co_yield" shift, and go to state 264 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 assignment-expression go to state 642 await-expression go to state 269 braced-init-list go to state 643 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 272 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 initializer-clause go to state 644 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 285 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 throw-expression go to state 302 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306 yield-expression go to state 307
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 279 expression-list → • initializer-list 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 360 initializer → "(" • expression-list ")" 361 initializer-clause → • assignment-expression 362 | • braced-init-list 363 initializer-list → • initializer-clause ELLIPSIS-opt 364 | • initializer-list "," initializer-clause ELLIPSIS-opt 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "{" shift, and go to state 380 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 261 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 "co_yield" shift, and go to state 264 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 assignment-expression go to state 642 await-expression go to state 269 braced-init-list go to state 643 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 272 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 expression-list go to state 645 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 initializer-clause go to state 646 initializer-list go to state 647 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 285 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 throw-expression go to state 302 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306 yield-expression go to state 307
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 120 | "{" • initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 121 | "{" • designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 122 | "{" • "}" 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 224 designated-initializer-clause → • designator brace-or-equal-initializer 225 designated-initializer-list → • designated-initializer-clause 226 | • designated-initializer-list "," designated-initializer-clause 227 designator → • "." IDENTIFIER 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 361 initializer-clause → • assignment-expression 362 | • braced-init-list 363 initializer-list → • initializer-clause ELLIPSIS-opt 364 | • initializer-list "," initializer-clause ELLIPSIS-opt 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "{" shift, and go to state 380 "}" shift, and go to state 648 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "." shift, and go to state 649 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 261 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 "co_yield" shift, and go to state 264 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 assignment-expression go to state 642 await-expression go to state 269 braced-init-list go to state 643 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 272 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 designated-initializer-clause go to state 650 designated-initializer-list go to state 651 designator go to state 652 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 initializer-clause go to state 646 initializer-list go to state 653 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 285 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 throw-expression go to state 302 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306 yield-expression go to state 307
137 class-name → • IDENTIFIER 138 | • simple-template-id 162 constraint-logical-and-expression → • primary-expression 163 | • constraint-logical-and-expression "&&" primary-expression 164 constraint-logical-or-expression → • constraint-logical-and-expression 165 | • constraint-logical-or-expression "||" constraint-logical-and-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 621 requires-clause → "requires" • constraint-logical-or-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "::" shift, and go to state 6 "this" shift, and go to state 242 "(" shift, and go to state 654 "[" shift, and go to state 247 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "requires" shift, and go to state 251 "~" shift, and go to state 336 "literal" shift, and go to state 260 STRING_LITERAL shift, and go to state 118 class-name go to state 55 constraint-logical-and-expression go to state 655 constraint-logical-or-expression go to state 656 conversion-function-id go to state 273 decltype-specifier go to state 121 enum-name go to state 71 fold-expression go to state 278 id-expression go to state 279 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 338 operator-function-id go to state 290 primary-expression go to state 657 qualified-id go to state 294 requires-expression go to state 296 simple-template-id go to state 298 string-literal go to state 300 template-id go to state 301 template-name go to state 102 type-name go to state 106 typedef-name go to state 108 unqualified-id go to state 306
359 initializer → brace-or-equal-initializer • $default reduce using rule 359 (initializer)
117 brace-or-equal-initializer → braced-init-list • $default reduce using rule 117 (brace-or-equal-initializer)
366 initializer-opt → initializer • $default reduce using rule 366 (initializer-opt)
348 init-declarator → declarator initializer-opt • $default reduce using rule 348 (init-declarator)
349 init-declarator → declarator requires-clause • $default reduce using rule 349 (init-declarator)
5 ELLIPSIS-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 6 | • "..." 137 class-name → • IDENTIFIER 138 | • simple-template-id 211 declarator → • ptr-declarator 212 | • noptr-declarator parameters-and-qualifiers trailing-return-type 213 declarator-id → • ELLIPSIS-opt id-expression 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 348 init-declarator → • declarator initializer-opt 349 | • declarator requires-clause 351 init-declarator-list → init-declarator-list "," • init-declarator 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 490 noptr-declarator → • declarator-id attribute-specifier-seq-opt 491 | • noptr-declarator parameters-and-qualifiers 492 | • noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 493 | • "(" ptr-declarator ")" 591 ptr-declarator → • noptr-declarator 592 | • ptr-operator ptr-declarator 593 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 594 | • "&" attribute-specifier-seq-opt 595 | • "&&" attribute-specifier-seq-opt 596 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id "..." shift, and go to state 156 IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 159 "&" shift, and go to state 160 "&&" shift, and go to state 163 "decltype" shift, and go to state 21 "*" shift, and go to state 164 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "::" [reduce using rule 5 (ELLIPSIS-opt)] "decltype" [reduce using rule 5 (ELLIPSIS-opt)] $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 165 class-name go to state 55 declarator go to state 183 declarator-id go to state 171 decltype-specifier go to state 121 enum-name go to state 71 init-declarator go to state 658 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 187 noptr-declarator go to state 173 ptr-declarator go to state 174 ptr-operator go to state 175 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
640 simple-declaration → decl-specifier-seq init-declarator-list-opt ";" • $default reduce using rule 640 (simple-declaration)
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 249 enumerator → IDENTIFIER • attribute-specifier-seq-opt $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 659
250 enumerator-definition → enumerator • [",", "}"] 251 | enumerator • "=" constant-expression "=" shift, and go to state 660 $default reduce using rule 250 (enumerator-definition)
252 enumerator-list → enumerator-definition • $default reduce using rule 252 (enumerator-list)
248 enum-specifier → enum-head "{" enumerator-list • "," "}" 253 enumerator-list → enumerator-list • "," enumerator-definition 255 enumerator-list-opt → enumerator-list • ["}"] "," shift, and go to state 661 $default reduce using rule 255 (enumerator-list-opt)
247 enum-specifier → enum-head "{" enumerator-list-opt • "}" "}" shift, and go to state 662
236 enum-base → • ":" type-specifier-seq 237 enum-base-opt → • %empty [";"] 238 | • enum-base 242 enum-head-name-opt → enum-head-name • [":", "{"] 496 opaque-enum-declaration → enum-key attribute-specifier-seq-opt enum-head-name • enum-base-opt ";" ":" shift, and go to state 663 ":" [reduce using rule 242 (enum-head-name-opt)] "{" reduce using rule 242 (enum-head-name-opt) $default reduce using rule 237 (enum-base-opt) enum-base go to state 664 enum-base-opt go to state 665
236 enum-base → • ":" type-specifier-seq 237 enum-base-opt → • %empty ["{"] 238 | • enum-base 239 enum-head → enum-key attribute-specifier-seq-opt enum-head-name-opt • enum-base-opt ":" shift, and go to state 663 $default reduce using rule 237 (enum-base-opt) enum-base go to state 664 enum-base-opt go to state 666
240 enum-head-name → nested-name-specifier-opt • IDENTIFIER IDENTIFIER shift, and go to state 667
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "this", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 215 deduction-guide → explicit-specifier-opt template-name "(" • parameter-declaration-clause ")" "->" simple-template-id ";" 543 parameter-declaration → • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator 544 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator "=" initializer-clause 545 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt 546 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt "=" initializer-clause 547 parameter-declaration-clause → • parameter-declaration-list-opt ELLIPSIS-opt 548 | • parameter-declaration-list "," "..." 549 parameter-declaration-list → • parameter-declaration 550 | • parameter-declaration-list "," parameter-declaration 551 parameter-declaration-list-opt → • %empty ["...", ")"] 552 | • parameter-declaration-list "..." reduce using rule 551 (parameter-declaration-list-opt) ")" reduce using rule 551 (parameter-declaration-list-opt) $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 220 parameter-declaration go to state 619 parameter-declaration-clause go to state 668 parameter-declaration-list go to state 621 parameter-declaration-list-opt go to state 622
427 module-declaration → EXPORT-opt "module" • module-name module-partition-opt attribute-specifier-seq-opt ";" 431 module-name → • module-name-qualifier-opt IDENTIFIER 432 module-name-qualifier → • IDENTIFIER "." 433 | • module-name-qualifier IDENTIFIER "." 434 module-name-qualifier-opt → • %empty [IDENTIFIER] 435 | • module-name-qualifier IDENTIFIER shift, and go to state 137 IDENTIFIER [reduce using rule 434 (module-name-qualifier-opt)] module-name go to state 669 module-name-qualifier go to state 142 module-name-qualifier-opt go to state 143
584 private-module-fragment → • "module" ":" "private" ";" declaration-seq-opt 585 private-module-fragment-opt → • %empty [$end] 586 | • private-module-fragment 706 translation-unit → global-module-fragment-opt module-declaration declaration-seq-opt • private-module-fragment-opt "module" shift, and go to state 670 $default reduce using rule 585 (private-module-fragment-opt) private-module-fragment go to state 671 private-module-fragment-opt go to state 672
456 nested-name-specifier → nested-name-specifier IDENTIFIER "::" • $default reduce using rule 456 (nested-name-specifier)
646 simple-type-specifier → nested-name-specifier "template" simple-template-id • $default reduce using rule 646 (simple-type-specifier)
457 nested-name-specifier → nested-name-specifier TEMPLATE-opt simple-template-id • "::" "::" shift, and go to state 673
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 158 constant-expression → • conditional-expression 169 conversion-function-id → • "operator" conversion-type-id 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 683 template-argument → • constant-expression 684 | • type-id 685 | • id-expression 686 template-argument-list → • template-argument ELLIPSIS-opt 687 | • template-argument-list "," template-argument ELLIPSIS-opt 688 template-argument-list-opt → • %empty [">"] 689 | • template-argument-list 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 709 | nested-name-specifier-opt concept-name "<" • template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 712 type-id → • type-specifier-seq abstract-declarator-opt 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 729 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 730 | • type-specifier type-specifier-seq 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "operator" shift, and go to state 249 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 125 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] ">" reduce using rule 688 (template-argument-list-opt) "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 await-expression go to state 269 cast-expression go to state 270 class-key go to state 406 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 309 constant-expression go to state 407 conversion-function-id go to state 273 cv-qualifier go to state 57 decltype-specifier go to state 63 delete-expression go to state 274 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 fold-expression go to state 278 id-expression go to state 408 inclusive-or-expression go to state 280 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 311 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 409 string-literal go to state 300 template-argument go to state 410 template-argument-list go to state 411 template-argument-list-opt go to state 674 template-id go to state 301 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 413 type-name go to state 106 type-specifier go to state 414 type-specifier-seq go to state 415 typedef-name go to state 108 typename-specifier go to state 416 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306
151 concept-name → IDENTIFIER • $default reduce using rule 151 (concept-name)
150 concept-definition → "concept" concept-name • "=" constraint-expression ";" "=" shift, and go to state 675
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty [IDENTIFIER, "::", "alignas", "[", "decltype"] 84 | • attribute-specifier-seq 137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 229 elaborated-type-specifier → class-key • attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | class-key • simple-template-id 231 | class-key • nested-name-specifier TEMPLATE-opt simple-template-id 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 676 class-name go to state 55 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 179 simple-template-id go to state 180 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
683 template-argument → constant-expression • $default reduce using rule 683 (template-argument)
580 primary-expression → id-expression • [",", "...", "+", "-", "(", "&", "[", "<=>", "?", "&&", "||", "->", ".", "==", "!=", "^", "<", ">", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "++", "--"] 685 template-argument → id-expression • [",", "...", ">"] "," reduce using rule 580 (primary-expression) "," [reduce using rule 685 (template-argument)] "..." reduce using rule 580 (primary-expression) "..." [reduce using rule 685 (template-argument)] ">" reduce using rule 580 (primary-expression) ">" [reduce using rule 685 (template-argument)] $default reduce using rule 580 (primary-expression)
120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 562 postfix-expression → simple-type-specifier • "(" expression-list-opt ")" 564 | simple-type-specifier • braced-init-list 725 type-specifier → simple-type-specifier • [",", "constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", ";", "alignas", "(", ")", "&", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", ">", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] "(" shift, and go to state 578 "{" shift, and go to state 380 "(" [reduce using rule 725 (type-specifier)] $default reduce using rule 725 (type-specifier) braced-init-list go to state 579
5 ELLIPSIS-opt → • %empty [",", ">"] 6 | • "..." 686 template-argument-list → template-argument • ELLIPSIS-opt "..." shift, and go to state 156 $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 677
687 template-argument-list → template-argument-list • "," template-argument ELLIPSIS-opt 689 template-argument-list-opt → template-argument-list • [">"] "," shift, and go to state 678 $default reduce using rule 689 (template-argument-list-opt)
644 simple-template-id → template-name "<" template-argument-list-opt • ">" ">" shift, and go to state 679
684 template-argument → type-id • $default reduce using rule 684 (template-argument)
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 84 | • attribute-specifier-seq 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 729 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 729 | type-specifier • attribute-specifier-seq-opt 730 | • type-specifier type-specifier-seq 730 | type-specifier • type-specifier-seq 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "typename" shift, and go to state 8 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 125 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 680 class-key go to state 406 class-name go to state 55 cv-qualifier go to state 57 decltype-specifier go to state 63 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 414 type-specifier-seq go to state 681 typedef-name go to state 108 typename-specifier go to state 109
29 abstract-declarator → • ptr-abstract-declarator 30 | • noptr-abstract-declarator-opt parameters-and-qualifiers trailing-return-type 31 | • abstract-pack-declarator 32 abstract-declarator-opt → • %empty [",", "...", "=", ";", "(", ")", ":", "{", "final", ">", "try", "requires", "override"] 33 | • abstract-declarator 34 abstract-pack-declarator → • noptr-abstract-pack-declarator 35 | • ptr-operator abstract-pack-declarator 137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 482 noptr-abstract-declarator → • noptr-abstract-declarator-opt parameters-and-qualifiers 483 | • noptr-abstract-declarator-opt "[" constant-expression-opt "]" attribute-specifier-seq-opt 484 | • "(" ptr-abstract-declarator ")" 485 noptr-abstract-declarator-opt → • %empty ["(", "["] 486 | • noptr-abstract-declarator 487 noptr-abstract-pack-declarator → • noptr-abstract-pack-declarator parameters-and-qualifiers 488 | • noptr-abstract-pack-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 489 | • "..." 587 ptr-abstract-declarator → • noptr-abstract-declarator 588 | • ptr-operator ptr-abstract-declarator-opt 593 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 594 | • "&" attribute-specifier-seq-opt 595 | • "&&" attribute-specifier-seq-opt 596 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 712 type-id → type-specifier-seq • abstract-declarator-opt 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id "..." shift, and go to state 682 IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 683 "&" shift, and go to state 160 "&&" shift, and go to state 163 "decltype" shift, and go to state 21 "*" shift, and go to state 164 "..." [reduce using rule 32 (abstract-declarator-opt)] "(" [reduce using rule 32 (abstract-declarator-opt)] "(" [reduce using rule 485 (noptr-abstract-declarator-opt)] "[" reduce using rule 485 (noptr-abstract-declarator-opt) $default reduce using rule 32 (abstract-declarator-opt) abstract-declarator go to state 684 abstract-declarator-opt go to state 685 abstract-pack-declarator go to state 686 class-name go to state 55 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 187 noptr-abstract-declarator go to state 687 noptr-abstract-declarator-opt go to state 688 noptr-abstract-pack-declarator go to state 689 ptr-abstract-declarator go to state 690 ptr-operator go to state 691 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 563 postfix-expression → typename-specifier • "(" expression-list-opt ")" 565 | typename-specifier • braced-init-list 727 type-specifier → typename-specifier • [",", "constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", ";", "alignas", "(", ")", "&", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", ">", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] "(" shift, and go to state 580 "{" shift, and go to state 380 "(" [reduce using rule 727 (type-specifier)] $default reduce using rule 727 (type-specifier) braced-init-list go to state 581
555 placeholder-type-specifier → type-constraint-opt "decltype" "(" • "auto" ")" "auto" shift, and go to state 692
271 export-declaration → "export" "{" declaration-seq-opt "}" • $default reduce using rule 271 (export-declaration)
390 linkage-specification → "extern" string-literal "{" declaration-seq-opt • "}" "}" shift, and go to state 693
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "this", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 543 parameter-declaration → • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator 544 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator "=" initializer-clause 545 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt 546 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt "=" initializer-clause 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 692 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 692 | "template" "<" • template-parameter-list ">" requires-clause-opt 696 template-name → • IDENTIFIER 697 template-parameter → • type-parameter 698 | • parameter-declaration 699 template-parameter-list → • template-parameter 700 | • template-parameter-list "," template-parameter 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 716 type-parameter → • type-parameter-key ELLIPSIS-opt IDENTIFIER-opt 717 | • type-parameter-key IDENTIFIER-opt "=" type-id 718 | • type-constraint ELLIPSIS-opt IDENTIFIER-opt 719 | • type-constraint IDENTIFIER-opt "=" type-id 720 | • template-head type-parameter-key ELLIPSIS-opt IDENTIFIER-opt 721 | • template-head type-parameter-key IDENTIFIER-opt "=" id-expression 722 type-parameter-key → • "class" 723 | • "typename" 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "template" shift, and go to state 216 "typename" shift, and go to state 217 "class" shift, and go to state 218 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 220 class-name go to state 55 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 133 nested-name-specifier-opt go to state 221 parameter-declaration go to state 222 simple-template-id go to state 96 template-head go to state 223 template-name go to state 102 template-parameter go to state 224 template-parameter-list go to state 225 type-constraint go to state 226 type-name go to state 106 type-parameter go to state 227 type-parameter-key go to state 228 typedef-name go to state 108
265 explicit-specialization → "template" "<" ">" declaration • $default reduce using rule 265 (explicit-specialization)
24 THIS-opt → "this" • $default reduce using rule 24 (THIS-opt)
131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 329 function-specifier → • "virtual" 330 | • explicit-specifier 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 543 parameter-declaration → attribute-specifier-seq-opt THIS-opt • decl-specifier-seq declarator 544 | attribute-specifier-seq-opt THIS-opt • decl-specifier-seq declarator "=" initializer-clause 545 | attribute-specifier-seq-opt THIS-opt • decl-specifier-seq abstract-declarator-opt 546 | attribute-specifier-seq-opt THIS-opt • decl-specifier-seq abstract-declarator-opt "=" initializer-clause 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 151 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] $default reduce using rule 710 (type-constraint-opt) class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 694 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 154 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 155 function-specifier go to state 79 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109
5 ELLIPSIS-opt → • %empty [",", IDENTIFIER, ">"] 6 | • "..." 11 IDENTIFIER-opt → • %empty ["="] 12 | • IDENTIFIER 720 type-parameter → template-head type-parameter-key • ELLIPSIS-opt IDENTIFIER-opt 721 | template-head type-parameter-key • IDENTIFIER-opt "=" id-expression "..." shift, and go to state 156 IDENTIFIER shift, and go to state 427 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "=" reduce using rule 11 (IDENTIFIER-opt) $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 695 IDENTIFIER-opt go to state 696
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "this", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 543 parameter-declaration → • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator 544 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator "=" initializer-clause 545 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt 546 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt "=" initializer-clause 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 692 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 696 template-name → • IDENTIFIER 697 template-parameter → • type-parameter 698 | • parameter-declaration 700 template-parameter-list → template-parameter-list "," • template-parameter 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 716 type-parameter → • type-parameter-key ELLIPSIS-opt IDENTIFIER-opt 717 | • type-parameter-key IDENTIFIER-opt "=" type-id 718 | • type-constraint ELLIPSIS-opt IDENTIFIER-opt 719 | • type-constraint IDENTIFIER-opt "=" type-id 720 | • template-head type-parameter-key ELLIPSIS-opt IDENTIFIER-opt 721 | • template-head type-parameter-key IDENTIFIER-opt "=" id-expression 722 type-parameter-key → • "class" 723 | • "typename" 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "template" shift, and go to state 216 "typename" shift, and go to state 217 "class" shift, and go to state 218 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 220 class-name go to state 55 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 133 nested-name-specifier-opt go to state 221 parameter-declaration go to state 222 simple-template-id go to state 96 template-head go to state 223 template-name go to state 102 template-parameter go to state 697 type-constraint go to state 226 type-name go to state 106 type-parameter go to state 227 type-parameter-key go to state 228 typedef-name go to state 108
621 requires-clause → • "requires" constraint-logical-or-expression 622 requires-clause-opt → • %empty ["constexpr", "...", "export", "extern", IDENTIFIER, "inline", "::", "template", "typename", "virtual", "using", ";", "alignas", "(", "&", "asm", "[", "class", "struct", "union", "concept", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "import", "namespace", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable"] 623 | • requires-clause 692 template-head → "template" "<" template-parameter-list ">" • requires-clause-opt "requires" shift, and go to state 381 $default reduce using rule 622 (requires-clause-opt) requires-clause go to state 698 requires-clause-opt go to state 699
12 IDENTIFIER-opt → IDENTIFIER • $default reduce using rule 12 (IDENTIFIER-opt)
11 IDENTIFIER-opt → • %empty [",", ">"] 12 | • IDENTIFIER 718 type-parameter → type-constraint ELLIPSIS-opt • IDENTIFIER-opt IDENTIFIER shift, and go to state 427 $default reduce using rule 11 (IDENTIFIER-opt) IDENTIFIER-opt go to state 700
719 type-parameter → type-constraint IDENTIFIER-opt • "=" type-id "=" shift, and go to state 701
11 IDENTIFIER-opt → • %empty [",", ">"] 12 | • IDENTIFIER 716 type-parameter → type-parameter-key ELLIPSIS-opt • IDENTIFIER-opt IDENTIFIER shift, and go to state 427 $default reduce using rule 11 (IDENTIFIER-opt) IDENTIFIER-opt go to state 702
717 type-parameter → type-parameter-key IDENTIFIER-opt • "=" type-id "=" shift, and go to state 703
457 nested-name-specifier → nested-name-specifier TEMPLATE-opt simple-template-id • "::" 734 typename-specifier → "typename" nested-name-specifier TEMPLATE-opt simple-template-id • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] "::" shift, and go to state 673 "::" [reduce using rule 734 (typename-specifier)] $default reduce using rule 734 (typename-specifier)
44 alias-declaration → "using" IDENTIFIER attribute-specifier-seq-opt "=" • defining-type-id ";" 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 216 defining-type-id → • defining-type-specifier-seq abstract-declarator-opt 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 220 defining-type-specifier-seq → • defining-type-specifier attribute-specifier-seq-opt 221 | • defining-type-specifier defining-type-specifier-seq 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "typename" shift, and go to state 8 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] $default reduce using rule 710 (type-constraint-opt) class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decltype-specifier go to state 63 defining-type-id go to state 704 defining-type-specifier go to state 705 defining-type-specifier-seq go to state 706 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 154 enum-name go to state 71 enum-specifier go to state 72 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109
456 nested-name-specifier → nested-name-specifier IDENTIFIER • "::" 696 template-name → IDENTIFIER • ["<"] 755 unqualified-id → IDENTIFIER • [",", "...", ";"] "::" shift, and go to state 400 "<" reduce using rule 696 (template-name) $default reduce using rule 755 (unqualified-id)
693 template-id → simple-template-id • $default reduce using rule 693 (template-id)
764 using-declarator → TYPENAME-opt nested-name-specifier unqualified-id • $default reduce using rule 764 (using-declarator)
5 ELLIPSIS-opt → • %empty [",", ";"] 6 | • "..." 766 using-declarator-list → using-declarator-list "," using-declarator • ELLIPSIS-opt "..." shift, and go to state 156 $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 707
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 277 expression → • assignment-expression 278 | • expression "," assignment-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 477 | "noexcept" "(" • expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 261 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 "co_yield" shift, and go to state 264 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 assignment-expression go to state 268 await-expression go to state 269 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 272 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 expression go to state 708 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 285 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 throw-expression go to state 302 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306 yield-expression go to state 307
286 fold-expression → "(" "..." • fold-operator cast-expression ")" 288 fold-operator → • "+" 289 | • "-" 290 | • "*" 291 | • "/" 292 | • "%" 293 | • "^" 294 | • "&" 295 | • "|" 296 | • "<<" 297 | • ">>" 298 | • "+=" 299 | • "-=" 300 | • "*=" 301 | • "/=" 302 | • "%=" 303 | • "^=" 304 | • "&=" 305 | • "|=" 306 | • "<<=" 307 | • ">>=" 308 | • "=" 309 | • "==" 310 | • "!=" 311 | • "<" 312 | • ">" 313 | • "<=" 314 | • ">=" 315 | • "&&" 316 | • "||" 317 | • "," 318 | • ".*" 319 | • "->*" "," shift, and go to state 709 "+" shift, and go to state 710 "-" shift, and go to state 711 "=" shift, and go to state 712 "&" shift, and go to state 713 "*=" shift, and go to state 714 "/=" shift, and go to state 715 "%=" shift, and go to state 716 "+=" shift, and go to state 717 "-=" shift, and go to state 718 ">>=" shift, and go to state 719 "<<=" shift, and go to state 720 "&=" shift, and go to state 721 "^=" shift, and go to state 722 "|=" shift, and go to state 723 "&&" shift, and go to state 724 "||" shift, and go to state 725 "==" shift, and go to state 726 "!=" shift, and go to state 727 "^" shift, and go to state 728 "<" shift, and go to state 729 ">" shift, and go to state 730 "*" shift, and go to state 731 "/" shift, and go to state 732 "%" shift, and go to state 733 "|" shift, and go to state 734 "<<" shift, and go to state 735 ">>" shift, and go to state 736 "<=" shift, and go to state 737 ">=" shift, and go to state 738 ".*" shift, and go to state 739 "->*" shift, and go to state 740 fold-operator go to state 741
285 fold-expression → "(" cast-expression • fold-operator "..." ")" 287 | "(" cast-expression • fold-operator "..." fold-operator cast-expression ")" 288 fold-operator → • "+" 289 | • "-" 290 | • "*" 291 | • "/" 292 | • "%" 293 | • "^" 294 | • "&" 295 | • "|" 296 | • "<<" 297 | • ">>" 298 | • "+=" 299 | • "-=" 300 | • "*=" 301 | • "/=" 302 | • "%=" 303 | • "^=" 304 | • "&=" 305 | • "|=" 306 | • "<<=" 307 | • ">>=" 308 | • "=" 309 | • "==" 310 | • "!=" 311 | • "<" 312 | • ">" 313 | • "<=" 314 | • ">=" 315 | • "&&" 316 | • "||" 317 | • "," 318 | • ".*" 319 | • "->*" 556 pm-expression → cast-expression • [",", "+", "-", "=", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*"] "," shift, and go to state 709 "+" shift, and go to state 710 "-" shift, and go to state 711 "=" shift, and go to state 712 "&" shift, and go to state 713 "*=" shift, and go to state 714 "/=" shift, and go to state 715 "%=" shift, and go to state 716 "+=" shift, and go to state 717 "-=" shift, and go to state 718 ">>=" shift, and go to state 719 "<<=" shift, and go to state 720 "&=" shift, and go to state 721 "^=" shift, and go to state 722 "|=" shift, and go to state 723 "&&" shift, and go to state 724 "||" shift, and go to state 725 "==" shift, and go to state 726 "!=" shift, and go to state 727 "^" shift, and go to state 728 "<" shift, and go to state 729 ">" shift, and go to state 730 "*" shift, and go to state 731 "/" shift, and go to state 732 "%" shift, and go to state 733 "|" shift, and go to state 734 "<<" shift, and go to state 735 ">>" shift, and go to state 736 "<=" shift, and go to state 737 ">=" shift, and go to state 738 ".*" shift, and go to state 739 "->*" shift, and go to state 740 "," [reduce using rule 556 (pm-expression)] "+" [reduce using rule 556 (pm-expression)] "-" [reduce using rule 556 (pm-expression)] "=" [reduce using rule 556 (pm-expression)] "&" [reduce using rule 556 (pm-expression)] "*=" [reduce using rule 556 (pm-expression)] "/=" [reduce using rule 556 (pm-expression)] "%=" [reduce using rule 556 (pm-expression)] "+=" [reduce using rule 556 (pm-expression)] "-=" [reduce using rule 556 (pm-expression)] ">>=" [reduce using rule 556 (pm-expression)] "<<=" [reduce using rule 556 (pm-expression)] "&=" [reduce using rule 556 (pm-expression)] "^=" [reduce using rule 556 (pm-expression)] "|=" [reduce using rule 556 (pm-expression)] "&&" [reduce using rule 556 (pm-expression)] "||" [reduce using rule 556 (pm-expression)] "==" [reduce using rule 556 (pm-expression)] "!=" [reduce using rule 556 (pm-expression)] "^" [reduce using rule 556 (pm-expression)] "<" [reduce using rule 556 (pm-expression)] ">" [reduce using rule 556 (pm-expression)] "*" [reduce using rule 556 (pm-expression)] "/" [reduce using rule 556 (pm-expression)] "%" [reduce using rule 556 (pm-expression)] "|" [reduce using rule 556 (pm-expression)] "<<" [reduce using rule 556 (pm-expression)] ">>" [reduce using rule 556 (pm-expression)] "<=" [reduce using rule 556 (pm-expression)] ">=" [reduce using rule 556 (pm-expression)] ".*" [reduce using rule 556 (pm-expression)] "->*" [reduce using rule 556 (pm-expression)] $default reduce using rule 556 (pm-expression) fold-operator go to state 742
278 expression → expression • "," assignment-expression 579 primary-expression → "(" expression • ")" "," shift, and go to state 534 ")" shift, and go to state 743
130 cast-expression → "(" type-id • ")" cast-expression ")" shift, and go to state 744
5 ELLIPSIS-opt → • %empty [",", "]"] 6 | • "..." 636 simple-capture → IDENTIFIER • ELLIPSIS-opt "..." shift, and go to state 156 $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 745
638 simple-capture → "this" • $default reduce using rule 638 (simple-capture)
126 capture-default → "=" • $default reduce using rule 126 (capture-default)
5 ELLIPSIS-opt → • %empty [IDENTIFIER] 6 | • "..." 125 capture-default → "&" • [",", "]"] 347 init-capture → "&" • ELLIPSIS-opt IDENTIFIER initializer 637 simple-capture → "&" • IDENTIFIER ELLIPSIS-opt "..." shift, and go to state 156 IDENTIFIER shift, and go to state 746 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] $default reduce using rule 125 (capture-default) ELLIPSIS-opt go to state 747
639 simple-capture → "*" • "this" "this" shift, and go to state 748
346 init-capture → ELLIPSIS-opt • IDENTIFIER initializer IDENTIFIER shift, and go to state 749
127 capture-list → capture • $default reduce using rule 127 (capture-list)
379 lambda-capture → capture-default • ["]"] 381 | capture-default • "," capture-list "," shift, and go to state 750 $default reduce using rule 379 (lambda-capture)
128 capture-list → capture-list • "," capture 380 lambda-capture → capture-list • ["]"] "," shift, and go to state 751 $default reduce using rule 380 (lambda-capture)
124 capture → init-capture • $default reduce using rule 124 (capture)
383 lambda-capture-opt → lambda-capture • $default reduce using rule 383 (lambda-capture-opt)
388 lambda-introducer → "[" lambda-capture-opt • "]" "]" shift, and go to state 752
123 capture → simple-capture • $default reduce using rule 123 (capture)
90 await-expression → "co_await" cast-expression • $default reduce using rule 90 (await-expression)
542 overloadable-operator → "," • $default reduce using rule 542 (overloadable-operator)
509 overloadable-operator → "!" • $default reduce using rule 509 (overloadable-operator)
510 overloadable-operator → "+" • $default reduce using rule 510 (overloadable-operator)
511 overloadable-operator → "-" • $default reduce using rule 511 (overloadable-operator)
518 overloadable-operator → "=" • $default reduce using rule 518 (overloadable-operator)
504 overloadable-operator → "(" • ")" ")" shift, and go to state 753
516 overloadable-operator → "&" • $default reduce using rule 516 (overloadable-operator)
521 overloadable-operator → "*=" • $default reduce using rule 521 (overloadable-operator)
522 overloadable-operator → "/=" • $default reduce using rule 522 (overloadable-operator)
523 overloadable-operator → "%=" • $default reduce using rule 523 (overloadable-operator)
519 overloadable-operator → "+=" • $default reduce using rule 519 (overloadable-operator)
520 overloadable-operator → "-=" • $default reduce using rule 520 (overloadable-operator)
539 overloadable-operator → ">>=" • $default reduce using rule 539 (overloadable-operator)
538 overloadable-operator → "<<=" • $default reduce using rule 538 (overloadable-operator)
525 overloadable-operator → "&=" • $default reduce using rule 525 (overloadable-operator)
524 overloadable-operator → "^=" • $default reduce using rule 524 (overloadable-operator)
526 overloadable-operator → "|=" • $default reduce using rule 526 (overloadable-operator)
505 overloadable-operator → "[" • "]" "]" shift, and go to state 754
503 overloadable-operator → "co_await" • $default reduce using rule 503 (overloadable-operator)
533 overloadable-operator → "<=>" • $default reduce using rule 533 (overloadable-operator)
534 overloadable-operator → "&&" • $default reduce using rule 534 (overloadable-operator)
535 overloadable-operator → "||" • $default reduce using rule 535 (overloadable-operator)
506 overloadable-operator → "->" • $default reduce using rule 506 (overloadable-operator)
500 overloadable-operator → "delete" • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 502 | "delete" • "[" "]" "[" shift, and go to state 755 "[" [reduce using rule 500 (overloadable-operator)] $default reduce using rule 500 (overloadable-operator)
527 overloadable-operator → "==" • $default reduce using rule 527 (overloadable-operator)
528 overloadable-operator → "!=" • $default reduce using rule 528 (overloadable-operator)
515 overloadable-operator → "^" • $default reduce using rule 515 (overloadable-operator)
529 overloadable-operator → "<" • $default reduce using rule 529 (overloadable-operator)
530 overloadable-operator → ">" • $default reduce using rule 530 (overloadable-operator)
512 overloadable-operator → "*" • $default reduce using rule 512 (overloadable-operator)
513 overloadable-operator → "/" • $default reduce using rule 513 (overloadable-operator)
514 overloadable-operator → "%" • $default reduce using rule 514 (overloadable-operator)
517 overloadable-operator → "|" • $default reduce using rule 517 (overloadable-operator)
536 overloadable-operator → "<<" • $default reduce using rule 536 (overloadable-operator)
537 overloadable-operator → ">>" • $default reduce using rule 537 (overloadable-operator)
531 overloadable-operator → "<=" • $default reduce using rule 531 (overloadable-operator)
532 overloadable-operator → ">=" • $default reduce using rule 532 (overloadable-operator)
507 overloadable-operator → "->*" • $default reduce using rule 507 (overloadable-operator)
499 overloadable-operator → "new" • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 501 | "new" • "[" "]" "[" shift, and go to state 756 "[" [reduce using rule 499 (overloadable-operator)] $default reduce using rule 499 (overloadable-operator)
508 overloadable-operator → "~" • $default reduce using rule 508 (overloadable-operator)
540 overloadable-operator → "++" • $default reduce using rule 540 (overloadable-operator)
541 overloadable-operator → "--" • $default reduce using rule 541 (overloadable-operator)
169 conversion-function-id → "operator" conversion-type-id • $default reduce using rule 169 (conversion-function-id)
497 operator-function-id → "operator" overloadable-operator • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 498 | "operator" overloadable-operator • "<" template-argument-list-opt ">" "<" shift, and go to state 757 "<" [reduce using rule 497 (operator-function-id)] $default reduce using rule 497 (operator-function-id)
392 literal-operator-id → "operator" string-literal • IDENTIFIER 735 ud-suffix → • IDENTIFIER 762 user-defined-string-literal → string-literal • ud-suffix IDENTIFIER shift, and go to state 758 ud-suffix go to state 759
137 class-name → • IDENTIFIER 138 | • simple-template-id 166 conversion-declarator → • ptr-operator conversion-declarator-opt 167 conversion-declarator-opt → • %empty [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 168 | • conversion-declarator 170 conversion-type-id → type-specifier-seq • conversion-declarator-opt 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 593 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 594 | • "&" attribute-specifier-seq-opt 595 | • "&&" attribute-specifier-seq-opt 596 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "&" shift, and go to state 160 "&&" shift, and go to state 163 "decltype" shift, and go to state 21 "*" shift, and go to state 164 IDENTIFIER [reduce using rule 167 (conversion-declarator-opt)] "::" [reduce using rule 167 (conversion-declarator-opt)] "&" [reduce using rule 167 (conversion-declarator-opt)] "&&" [reduce using rule 167 (conversion-declarator-opt)] "decltype" [reduce using rule 167 (conversion-declarator-opt)] "*" [reduce using rule 167 (conversion-declarator-opt)] $default reduce using rule 167 (conversion-declarator-opt) class-name go to state 55 conversion-declarator go to state 760 conversion-declarator-opt go to state 761 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 187 ptr-operator go to state 762 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
393 literal-operator-id → "operator" user-defined-string-literal • $default reduce using rule 393 (literal-operator-id)
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "this", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 543 parameter-declaration → • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator 544 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator "=" initializer-clause 545 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt 546 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt "=" initializer-clause 547 parameter-declaration-clause → • parameter-declaration-list-opt ELLIPSIS-opt 548 | • parameter-declaration-list "," "..." 549 parameter-declaration-list → • parameter-declaration 550 | • parameter-declaration-list "," parameter-declaration 551 parameter-declaration-list-opt → • %empty ["...", ")"] 552 | • parameter-declaration-list 616 requirement-parameter-list → "(" • parameter-declaration-clause ")" "..." reduce using rule 551 (parameter-declaration-list-opt) ")" reduce using rule 551 (parameter-declaration-list-opt) $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 220 parameter-declaration go to state 619 parameter-declaration-clause go to state 763 parameter-declaration-list go to state 621 parameter-declaration-list-opt go to state 622
618 requirement-parameter-list-opt → requirement-parameter-list • $default reduce using rule 618 (requirement-parameter-list-opt)
615 requirement-body → • "{" requirement-seq "}" 624 requires-expression → "requires" requirement-parameter-list-opt • requirement-body "{" shift, and go to state 764 requirement-body go to state 765
137 class-name → IDENTIFIER • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 246 enum-name → IDENTIFIER • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 696 template-name → IDENTIFIER • ["<"] 731 typedef-name → IDENTIFIER • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] "," reduce using rule 137 (class-name) "," [reduce using rule 246 (enum-name)] "," [reduce using rule 731 (typedef-name)] "constexpr" reduce using rule 137 (class-name) "constexpr" [reduce using rule 246 (enum-name)] "constexpr" [reduce using rule 731 (typedef-name)] "..." reduce using rule 137 (class-name) "..." [reduce using rule 246 (enum-name)] "..." [reduce using rule 731 (typedef-name)] "export" reduce using rule 137 (class-name) "export" [reduce using rule 246 (enum-name)] "export" [reduce using rule 731 (typedef-name)] "extern" reduce using rule 137 (class-name) "extern" [reduce using rule 246 (enum-name)] "extern" [reduce using rule 731 (typedef-name)] IDENTIFIER reduce using rule 137 (class-name) IDENTIFIER [reduce using rule 246 (enum-name)] IDENTIFIER [reduce using rule 731 (typedef-name)] "inline" reduce using rule 137 (class-name) "inline" [reduce using rule 246 (enum-name)] "inline" [reduce using rule 731 (typedef-name)] "noexcept" reduce using rule 137 (class-name) "noexcept" [reduce using rule 246 (enum-name)] "noexcept" [reduce using rule 731 (typedef-name)] "::" reduce using rule 137 (class-name) "::" [reduce using rule 246 (enum-name)] "::" [reduce using rule 731 (typedef-name)] "template" reduce using rule 137 (class-name) "template" [reduce using rule 246 (enum-name)] "template" [reduce using rule 731 (typedef-name)] "typename" reduce using rule 137 (class-name) "typename" [reduce using rule 246 (enum-name)] "typename" [reduce using rule 731 (typedef-name)] "virtual" reduce using rule 137 (class-name) "virtual" [reduce using rule 246 (enum-name)] "virtual" [reduce using rule 731 (typedef-name)] "+" reduce using rule 137 (class-name) "+" [reduce using rule 246 (enum-name)] "+" [reduce using rule 731 (typedef-name)] "-" reduce using rule 137 (class-name) "-" [reduce using rule 246 (enum-name)] "-" [reduce using rule 731 (typedef-name)] "using" reduce using rule 137 (class-name) "using" [reduce using rule 246 (enum-name)] "using" [reduce using rule 731 (typedef-name)] "=" reduce using rule 137 (class-name) "=" [reduce using rule 246 (enum-name)] "=" [reduce using rule 731 (typedef-name)] ";" reduce using rule 137 (class-name) ";" [reduce using rule 246 (enum-name)] ";" [reduce using rule 731 (typedef-name)] "alignas" reduce using rule 137 (class-name) "alignas" [reduce using rule 246 (enum-name)] "alignas" [reduce using rule 731 (typedef-name)] "(" reduce using rule 137 (class-name) "(" [reduce using rule 246 (enum-name)] "(" [reduce using rule 731 (typedef-name)] ")" reduce using rule 137 (class-name) ")" [reduce using rule 246 (enum-name)] ")" [reduce using rule 731 (typedef-name)] "&" reduce using rule 137 (class-name) "&" [reduce using rule 246 (enum-name)] "&" [reduce using rule 731 (typedef-name)] "asm" reduce using rule 137 (class-name) "asm" [reduce using rule 246 (enum-name)] "asm" [reduce using rule 731 (typedef-name)] "*=" reduce using rule 137 (class-name) "*=" [reduce using rule 246 (enum-name)] "*=" [reduce using rule 731 (typedef-name)] "/=" reduce using rule 137 (class-name) "/=" [reduce using rule 246 (enum-name)] "/=" [reduce using rule 731 (typedef-name)] "%=" reduce using rule 137 (class-name) "%=" [reduce using rule 246 (enum-name)] "%=" [reduce using rule 731 (typedef-name)] "+=" reduce using rule 137 (class-name) "+=" [reduce using rule 246 (enum-name)] "+=" [reduce using rule 731 (typedef-name)] "-=" reduce using rule 137 (class-name) "-=" [reduce using rule 246 (enum-name)] "-=" [reduce using rule 731 (typedef-name)] ">>=" reduce using rule 137 (class-name) ">>=" [reduce using rule 246 (enum-name)] ">>=" [reduce using rule 731 (typedef-name)] "<<=" reduce using rule 137 (class-name) "<<=" [reduce using rule 246 (enum-name)] "<<=" [reduce using rule 731 (typedef-name)] "&=" reduce using rule 137 (class-name) "&=" [reduce using rule 246 (enum-name)] "&=" [reduce using rule 731 (typedef-name)] "^=" reduce using rule 137 (class-name) "^=" [reduce using rule 246 (enum-name)] "^=" [reduce using rule 731 (typedef-name)] "|=" reduce using rule 137 (class-name) "|=" [reduce using rule 246 (enum-name)] "|=" [reduce using rule 731 (typedef-name)] "[" reduce using rule 137 (class-name) "[" [reduce using rule 246 (enum-name)] "[" [reduce using rule 731 (typedef-name)] "]" reduce using rule 137 (class-name) "]" [reduce using rule 246 (enum-name)] "]" [reduce using rule 731 (typedef-name)] ":" reduce using rule 137 (class-name) ":" [reduce using rule 246 (enum-name)] ":" [reduce using rule 731 (typedef-name)] "{" reduce using rule 137 (class-name) "{" [reduce using rule 246 (enum-name)] "{" [reduce using rule 731 (typedef-name)] "}" reduce using rule 137 (class-name) "}" [reduce using rule 246 (enum-name)] "}" [reduce using rule 731 (typedef-name)] "class" reduce using rule 137 (class-name) "class" [reduce using rule 246 (enum-name)] "class" [reduce using rule 731 (typedef-name)] "struct" reduce using rule 137 (class-name) "struct" [reduce using rule 246 (enum-name)] "struct" [reduce using rule 731 (typedef-name)] "union" reduce using rule 137 (class-name) "union" [reduce using rule 246 (enum-name)] "union" [reduce using rule 731 (typedef-name)] "final" reduce using rule 137 (class-name) "final" [reduce using rule 246 (enum-name)] "final" [reduce using rule 731 (typedef-name)] "<=>" reduce using rule 137 (class-name) "<=>" [reduce using rule 246 (enum-name)] "<=>" [reduce using rule 731 (typedef-name)] "concept" reduce using rule 137 (class-name) "concept" [reduce using rule 246 (enum-name)] "concept" [reduce using rule 731 (typedef-name)] "?" reduce using rule 137 (class-name) "?" [reduce using rule 246 (enum-name)] "?" [reduce using rule 731 (typedef-name)] "&&" reduce using rule 137 (class-name) "&&" [reduce using rule 246 (enum-name)] "&&" [reduce using rule 731 (typedef-name)] "||" reduce using rule 137 (class-name) "||" [reduce using rule 246 (enum-name)] "||" [reduce using rule 731 (typedef-name)] "operator" reduce using rule 137 (class-name) "operator" [reduce using rule 246 (enum-name)] "operator" [reduce using rule 731 (typedef-name)] "const" reduce using rule 137 (class-name) "const" [reduce using rule 246 (enum-name)] "const" [reduce using rule 731 (typedef-name)] "volatile" reduce using rule 137 (class-name) "volatile" [reduce using rule 246 (enum-name)] "volatile" [reduce using rule 731 (typedef-name)] "friend" reduce using rule 137 (class-name) "friend" [reduce using rule 246 (enum-name)] "friend" [reduce using rule 731 (typedef-name)] "typedef" reduce using rule 137 (class-name) "typedef" [reduce using rule 246 (enum-name)] "typedef" [reduce using rule 731 (typedef-name)] "consteval" reduce using rule 137 (class-name) "consteval" [reduce using rule 246 (enum-name)] "consteval" [reduce using rule 731 (typedef-name)] "constinit" reduce using rule 137 (class-name) "constinit" [reduce using rule 246 (enum-name)] "constinit" [reduce using rule 731 (typedef-name)] "decltype" reduce using rule 137 (class-name) "decltype" [reduce using rule 246 (enum-name)] "decltype" [reduce using rule 731 (typedef-name)] "->" reduce using rule 137 (class-name) "->" [reduce using rule 246 (enum-name)] "->" [reduce using rule 731 (typedef-name)] "." reduce using rule 137 (class-name) "." [reduce using rule 246 (enum-name)] "." [reduce using rule 731 (typedef-name)] "enum" reduce using rule 137 (class-name) "enum" [reduce using rule 246 (enum-name)] "enum" [reduce using rule 731 (typedef-name)] "==" reduce using rule 137 (class-name) "==" [reduce using rule 246 (enum-name)] "==" [reduce using rule 731 (typedef-name)] "!=" reduce using rule 137 (class-name) "!=" [reduce using rule 246 (enum-name)] "!=" [reduce using rule 731 (typedef-name)] "^" reduce using rule 137 (class-name) "^" [reduce using rule 246 (enum-name)] "^" [reduce using rule 731 (typedef-name)] "<" reduce using rule 137 (class-name) "<" [reduce using rule 246 (enum-name)] "<" [reduce using rule 696 (template-name)] "<" [reduce using rule 731 (typedef-name)] ">" reduce using rule 137 (class-name) ">" [reduce using rule 246 (enum-name)] ">" [reduce using rule 731 (typedef-name)] "explicit" reduce using rule 137 (class-name) "explicit" [reduce using rule 246 (enum-name)] "explicit" [reduce using rule 731 (typedef-name)] "*" reduce using rule 137 (class-name) "*" [reduce using rule 246 (enum-name)] "*" [reduce using rule 731 (typedef-name)] "/" reduce using rule 137 (class-name) "/" [reduce using rule 246 (enum-name)] "/" [reduce using rule 731 (typedef-name)] "%" reduce using rule 137 (class-name) "%" [reduce using rule 246 (enum-name)] "%" [reduce using rule 731 (typedef-name)] "|" reduce using rule 137 (class-name) "|" [reduce using rule 246 (enum-name)] "|" [reduce using rule 731 (typedef-name)] "<<" reduce using rule 137 (class-name) "<<" [reduce using rule 246 (enum-name)] "<<" [reduce using rule 731 (typedef-name)] ">>" reduce using rule 137 (class-name) ">>" [reduce using rule 246 (enum-name)] ">>" [reduce using rule 731 (typedef-name)] "<=" reduce using rule 137 (class-name) "<=" [reduce using rule 246 (enum-name)] "<=" [reduce using rule 731 (typedef-name)] ">=" reduce using rule 137 (class-name) ">=" [reduce using rule 246 (enum-name)] ">=" [reduce using rule 731 (typedef-name)] ".*" reduce using rule 137 (class-name) ".*" [reduce using rule 246 (enum-name)] ".*" [reduce using rule 731 (typedef-name)] "->*" reduce using rule 137 (class-name) "->*" [reduce using rule 246 (enum-name)] "->*" [reduce using rule 731 (typedef-name)] "try" reduce using rule 137 (class-name) "try" [reduce using rule 246 (enum-name)] "try" [reduce using rule 731 (typedef-name)] "import" reduce using rule 137 (class-name) "import" [reduce using rule 246 (enum-name)] "import" [reduce using rule 731 (typedef-name)] "namespace" reduce using rule 137 (class-name) "namespace" [reduce using rule 246 (enum-name)] "namespace" [reduce using rule 731 (typedef-name)] "requires" reduce using rule 137 (class-name) "requires" [reduce using rule 246 (enum-name)] "requires" [reduce using rule 731 (typedef-name)] "~" reduce using rule 137 (class-name) "~" [reduce using rule 246 (enum-name)] "~" [reduce using rule 731 (typedef-name)] "++" reduce using rule 137 (class-name) "++" [reduce using rule 246 (enum-name)] "++" [reduce using rule 731 (typedef-name)] "--" reduce using rule 137 (class-name) "--" [reduce using rule 246 (enum-name)] "--" [reduce using rule 731 (typedef-name)] "auto" reduce using rule 137 (class-name) "auto" [reduce using rule 246 (enum-name)] "auto" [reduce using rule 731 (typedef-name)] "char" reduce using rule 137 (class-name) "char" [reduce using rule 246 (enum-name)] "char" [reduce using rule 731 (typedef-name)] "char8_t" reduce using rule 137 (class-name) "char8_t" [reduce using rule 246 (enum-name)] "char8_t" [reduce using rule 731 (typedef-name)] "char16_t" reduce using rule 137 (class-name) "char16_t" [reduce using rule 246 (enum-name)] "char16_t" [reduce using rule 731 (typedef-name)] "char32_t" reduce using rule 137 (class-name) "char32_t" [reduce using rule 246 (enum-name)] "char32_t" [reduce using rule 731 (typedef-name)] "wchar_t" reduce using rule 137 (class-name) "wchar_t" [reduce using rule 246 (enum-name)] "wchar_t" [reduce using rule 731 (typedef-name)] "bool" reduce using rule 137 (class-name) "bool" [reduce using rule 246 (enum-name)] "bool" [reduce using rule 731 (typedef-name)] "short" reduce using rule 137 (class-name) "short" [reduce using rule 246 (enum-name)] "short" [reduce using rule 731 (typedef-name)] "int" reduce using rule 137 (class-name) "int" [reduce using rule 246 (enum-name)] "int" [reduce using rule 731 (typedef-name)] "long" reduce using rule 137 (class-name) "long" [reduce using rule 246 (enum-name)] "long" [reduce using rule 731 (typedef-name)] "signed" reduce using rule 137 (class-name) "signed" [reduce using rule 246 (enum-name)] "signed" [reduce using rule 731 (typedef-name)] "unsigned" reduce using rule 137 (class-name) "unsigned" [reduce using rule 246 (enum-name)] "unsigned" [reduce using rule 731 (typedef-name)] "float" reduce using rule 137 (class-name) "float" [reduce using rule 246 (enum-name)] "float" [reduce using rule 731 (typedef-name)] "double" reduce using rule 137 (class-name) "double" [reduce using rule 246 (enum-name)] "double" [reduce using rule 731 (typedef-name)] "void" reduce using rule 137 (class-name) "void" [reduce using rule 246 (enum-name)] "void" [reduce using rule 731 (typedef-name)] "static_assert" reduce using rule 137 (class-name) "static_assert" [reduce using rule 246 (enum-name)] "static_assert" [reduce using rule 731 (typedef-name)] "static" reduce using rule 137 (class-name) "static" [reduce using rule 246 (enum-name)] "static" [reduce using rule 731 (typedef-name)] "thread_local" reduce using rule 137 (class-name) "thread_local" [reduce using rule 246 (enum-name)] "thread_local" [reduce using rule 731 (typedef-name)] "mutable" reduce using rule 137 (class-name) "mutable" [reduce using rule 246 (enum-name)] "mutable" [reduce using rule 731 (typedef-name)] "override" reduce using rule 137 (class-name) "override" [reduce using rule 246 (enum-name)] "override" [reduce using rule 731 (typedef-name)] $default reduce using rule 137 (class-name)
760 unqualified-id → "~" decltype-specifier • $default reduce using rule 760 (unqualified-id)
759 unqualified-id → "~" type-name • $default reduce using rule 759 (unqualified-id)
738 unary-expression → "++" cast-expression • $default reduce using rule 738 (unary-expression)
739 unary-expression → "--" cast-expression • $default reduce using rule 739 (unary-expression)
134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 570 postfix-expression → "dynamic_cast" "<" • type-id ">" "(" expression ")" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 712 type-id → • type-specifier-seq abstract-declarator-opt 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 729 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 730 | • type-specifier type-specifier-seq 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "typename" shift, and go to state 8 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 125 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] $default reduce using rule 710 (type-constraint-opt) class-key go to state 406 class-name go to state 55 cv-qualifier go to state 57 decltype-specifier go to state 63 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 766 type-name go to state 106 type-specifier go to state 414 type-specifier-seq go to state 415 typedef-name go to state 108 typename-specifier go to state 109
134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 571 postfix-expression → "static_cast" "<" • type-id ">" "(" expression ")" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 712 type-id → • type-specifier-seq abstract-declarator-opt 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 729 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 730 | • type-specifier type-specifier-seq 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "typename" shift, and go to state 8 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 125 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] $default reduce using rule 710 (type-constraint-opt) class-key go to state 406 class-name go to state 55 cv-qualifier go to state 57 decltype-specifier go to state 63 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 767 type-name go to state 106 type-specifier go to state 414 type-specifier-seq go to state 415 typedef-name go to state 108 typename-specifier go to state 109
134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 572 postfix-expression → "reinterpret_cast" "<" • type-id ">" "(" expression ")" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 712 type-id → • type-specifier-seq abstract-declarator-opt 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 729 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 730 | • type-specifier type-specifier-seq 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "typename" shift, and go to state 8 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 125 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] $default reduce using rule 710 (type-constraint-opt) class-key go to state 406 class-name go to state 55 cv-qualifier go to state 57 decltype-specifier go to state 63 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 768 type-name go to state 106 type-specifier go to state 414 type-specifier-seq go to state 415 typedef-name go to state 108 typename-specifier go to state 109
134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 573 postfix-expression → "const_cast" "<" • type-id ">" "(" expression ")" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 712 type-id → • type-specifier-seq abstract-declarator-opt 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 729 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 730 | • type-specifier type-specifier-seq 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "typename" shift, and go to state 8 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 125 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] $default reduce using rule 710 (type-constraint-opt) class-key go to state 406 class-name go to state 55 cv-qualifier go to state 57 decltype-specifier go to state 63 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 769 type-name go to state 106 type-specifier go to state 414 type-specifier-seq go to state 415 typedef-name go to state 108 typename-specifier go to state 109
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 277 expression → • assignment-expression 278 | • expression "," assignment-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 574 | "typeid" "(" • expression ")" 575 | • "typeid" "(" type-id ")" 575 | "typeid" "(" • type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 712 type-id → • type-specifier-seq abstract-declarator-opt 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 729 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 730 | • type-specifier type-specifier-seq 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "operator" shift, and go to state 249 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 125 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 261 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 "co_yield" shift, and go to state 264 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 assignment-expression go to state 268 await-expression go to state 269 cast-expression go to state 270 class-key go to state 406 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 272 conversion-function-id go to state 273 cv-qualifier go to state 57 decltype-specifier go to state 63 delete-expression go to state 274 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 expression go to state 770 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 285 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 409 string-literal go to state 300 template-id go to state 301 template-name go to state 102 throw-expression go to state 302 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 771 type-name go to state 106 type-specifier go to state 414 type-specifier-seq go to state 415 typedef-name go to state 108 typename-specifier go to state 416 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306 yield-expression go to state 307
55 assignment-expression-opt → assignment-expression • $default reduce using rule 55 (assignment-expression-opt)
701 throw-expression → "throw" assignment-expression-opt • $default reduce using rule 701 (throw-expression)
743 unary-expression → "sizeof" "..." • "(" IDENTIFIER ")" "(" shift, and go to state 772
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 277 expression → • assignment-expression 278 | • expression "," assignment-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 285 | "(" • cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 286 | "(" • "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 287 | "(" • cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 579 | "(" • expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 712 type-id → • type-specifier-seq abstract-declarator-opt 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 729 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 730 | • type-specifier type-specifier-seq 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 742 | "sizeof" "(" • type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list "..." shift, and go to state 439 IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "operator" shift, and go to state 249 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 125 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 261 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 "co_yield" shift, and go to state 264 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 assignment-expression go to state 268 await-expression go to state 269 cast-expression go to state 440 class-key go to state 406 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 272 conversion-function-id go to state 273 cv-qualifier go to state 57 decltype-specifier go to state 63 delete-expression go to state 274 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 expression go to state 441 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 285 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 409 string-literal go to state 300 template-id go to state 301 template-name go to state 102 throw-expression go to state 302 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 773 type-name go to state 106 type-specifier go to state 414 type-specifier-seq go to state 415 typedef-name go to state 108 typename-specifier go to state 416 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306 yield-expression go to state 307
741 unary-expression → "sizeof" unary-expression • $default reduce using rule 741 (unary-expression)
134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 712 type-id → • type-specifier-seq abstract-declarator-opt 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 729 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 730 | • type-specifier type-specifier-seq 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 744 unary-expression → "alignof" "(" • type-id ")" IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "typename" shift, and go to state 8 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 125 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] $default reduce using rule 710 (type-constraint-opt) class-key go to state 406 class-name go to state 55 cv-qualifier go to state 57 decltype-specifier go to state 63 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 774 type-name go to state 106 type-specifier go to state 414 type-specifier-seq go to state 415 typedef-name go to state 108 typename-specifier go to state 109
775 yield-expression → "co_yield" assignment-expression • $default reduce using rule 775 (yield-expression)
776 yield-expression → "co_yield" braced-init-list • $default reduce using rule 776 (yield-expression)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 222 | SCOPE-opt "delete" • cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 223 | SCOPE-opt "delete" • "[" "]" cast-expression 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 775 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 await-expression go to state 269 cast-expression go to state 776 class-name go to state 55 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 fold-expression go to state 278 id-expression go to state 279 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 requires-expression go to state 296 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306
466 new-expression → SCOPE-opt "new" • new-placement-opt new-type-id new-initializer-opt 467 | SCOPE-opt "new" • new-placement-opt "(" type-id ")" new-initializer-opt 472 new-placement → • "(" expression-list ")" 473 new-placement-opt → • %empty [IDENTIFIER, "::", "typename", "(", "class", "struct", "union", "const", "volatile", "decltype", "enum", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void"] 474 | • new-placement "(" shift, and go to state 777 "(" [reduce using rule 473 (new-placement-opt)] $default reduce using rule 473 (new-placement-opt) new-placement go to state 778 new-placement-opt go to state 779
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 42 additive-expression → additive-expression "+" • multiplicative-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 await-expression go to state 269 cast-expression go to state 270 class-name go to state 55 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 fold-expression go to state 278 id-expression go to state 279 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 multiplicative-expression go to state 780 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 requires-expression go to state 296 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 43 additive-expression → additive-expression "-" • multiplicative-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 await-expression go to state 269 cast-expression go to state 270 class-name go to state 55 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 fold-expression go to state 278 id-expression go to state 279 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 multiplicative-expression go to state 781 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 requires-expression go to state 296 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 48 and-expression → and-expression "&" • equality-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 await-expression go to state 269 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 782 fold-expression go to state 278 id-expression go to state 279 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 147 compare-expression → compare-expression "<=>" • shift-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 await-expression go to state 269 cast-expression go to state 270 class-name go to state 55 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 fold-expression go to state 278 id-expression go to state 279 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 requires-expression go to state 296 shift-expression go to state 783 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 257 equality-expression → equality-expression "==" • relational-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 await-expression go to state 269 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 fold-expression go to state 278 id-expression go to state 279 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 784 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 258 equality-expression → equality-expression "!=" • relational-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 await-expression go to state 269 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 fold-expression go to state 278 id-expression go to state 279 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 785 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 263 exclusive-or-expression → exclusive-or-expression "^" • and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 786 await-expression go to state 269 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 fold-expression go to state 278 id-expression go to state 279 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 278 expression → expression "," • assignment-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 261 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 "co_yield" shift, and go to state 264 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 assignment-expression go to state 787 await-expression go to state 269 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 272 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 285 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 throw-expression go to state 302 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306 yield-expression go to state 307
214 decltype-specifier → "decltype" "(" expression ")" • $default reduce using rule 214 (decltype-specifier)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 345 inclusive-or-expression → inclusive-or-expression "|" • exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 await-expression go to state 269 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 788 fold-expression go to state 278 id-expression go to state 279 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "this", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 385 lambda-declarator → "(" • parameter-declaration-clause ")" lambda-specifiers requires-clause-opt 543 parameter-declaration → • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator 544 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator "=" initializer-clause 545 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt 546 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt "=" initializer-clause 547 parameter-declaration-clause → • parameter-declaration-list-opt ELLIPSIS-opt 548 | • parameter-declaration-list "," "..." 549 parameter-declaration-list → • parameter-declaration 550 | • parameter-declaration-list "," parameter-declaration 551 parameter-declaration-list-opt → • %empty ["...", ")"] 552 | • parameter-declaration-list "..." reduce using rule 551 (parameter-declaration-list-opt) ")" reduce using rule 551 (parameter-declaration-list-opt) $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 220 parameter-declaration go to state 619 parameter-declaration-clause go to state 789 parameter-declaration-list go to state 621 parameter-declaration-list-opt go to state 622
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "this", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 387 lambda-expression → lambda-introducer "<" • template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 543 parameter-declaration → • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator 544 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator "=" initializer-clause 545 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt 546 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt "=" initializer-clause 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 692 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 696 template-name → • IDENTIFIER 697 template-parameter → • type-parameter 698 | • parameter-declaration 699 template-parameter-list → • template-parameter 700 | • template-parameter-list "," template-parameter 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 716 type-parameter → • type-parameter-key ELLIPSIS-opt IDENTIFIER-opt 717 | • type-parameter-key IDENTIFIER-opt "=" type-id 718 | • type-constraint ELLIPSIS-opt IDENTIFIER-opt 719 | • type-constraint IDENTIFIER-opt "=" type-id 720 | • template-head type-parameter-key ELLIPSIS-opt IDENTIFIER-opt 721 | • template-head type-parameter-key IDENTIFIER-opt "=" id-expression 722 type-parameter-key → • "class" 723 | • "typename" 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "template" shift, and go to state 216 "typename" shift, and go to state 217 "class" shift, and go to state 218 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 220 class-name go to state 55 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 133 nested-name-specifier-opt go to state 221 parameter-declaration go to state 222 simple-template-id go to state 96 template-head go to state 223 template-name go to state 102 template-parameter go to state 224 template-parameter-list go to state 790 type-constraint go to state 226 type-name go to state 106 type-parameter go to state 227 type-parameter-key go to state 228 typedef-name go to state 108
192 decl-specifier-seq-opt → decl-specifier-seq • $default reduce using rule 192 (decl-specifier-seq-opt)
389 lambda-specifiers → decl-specifier-seq-opt • noexcept-specifier-opt attribute-specifier-seq-opt trailing-return-type-opt 478 noexcept-specifier → • "noexcept" "(" constant-expression ")" 479 | • "noexcept" 480 noexcept-specifier-opt → • %empty ["alignas", "[", "{", "->", "requires"] 481 | • noexcept-specifier "noexcept" shift, and go to state 791 $default reduce using rule 480 (noexcept-specifier-opt) noexcept-specifier go to state 792 noexcept-specifier-opt go to state 793
149 compound-statement → • "{" statement-seq-opt "}" 386 lambda-expression → lambda-introducer lambda-declarator • compound-statement "{" shift, and go to state 794 compound-statement go to state 795
384 lambda-declarator → lambda-specifiers • $default reduce using rule 384 (lambda-declarator)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 158 constant-expression → • conditional-expression 169 conversion-function-id → • "operator" conversion-type-id 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 683 template-argument → • constant-expression 684 | • type-id 685 | • id-expression 686 template-argument-list → • template-argument ELLIPSIS-opt 687 | • template-argument-list "," template-argument ELLIPSIS-opt 688 template-argument-list-opt → • %empty [">"] 689 | • template-argument-list 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 695 | literal-operator-id "<" • template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 712 type-id → • type-specifier-seq abstract-declarator-opt 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 729 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 730 | • type-specifier type-specifier-seq 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "operator" shift, and go to state 249 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 125 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] ">" reduce using rule 688 (template-argument-list-opt) "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 await-expression go to state 269 cast-expression go to state 270 class-key go to state 406 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 309 constant-expression go to state 407 conversion-function-id go to state 273 cv-qualifier go to state 57 decltype-specifier go to state 63 delete-expression go to state 274 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 fold-expression go to state 278 id-expression go to state 408 inclusive-or-expression go to state 280 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 311 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 409 string-literal go to state 300 template-argument go to state 410 template-argument-list go to state 411 template-argument-list-opt go to state 796 template-id go to state 301 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 413 type-name go to state 106 type-specifier go to state 414 type-specifier-seq go to state 415 typedef-name go to state 108 typename-specifier go to state 416 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 395 logical-and-expression → logical-and-expression "&&" • inclusive-or-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 await-expression go to state 269 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 797 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306
56 assignment-operator → "=" • $default reduce using rule 56 (assignment-operator)
57 assignment-operator → "*=" • $default reduce using rule 57 (assignment-operator)
58 assignment-operator → "/=" • $default reduce using rule 58 (assignment-operator)
59 assignment-operator → "%=" • $default reduce using rule 59 (assignment-operator)
60 assignment-operator → "+=" • $default reduce using rule 60 (assignment-operator)
61 assignment-operator → "-=" • $default reduce using rule 61 (assignment-operator)
62 assignment-operator → ">>=" • $default reduce using rule 62 (assignment-operator)
63 assignment-operator → "<<=" • $default reduce using rule 63 (assignment-operator)
64 assignment-operator → "&=" • $default reduce using rule 64 (assignment-operator)
65 assignment-operator → "^=" • $default reduce using rule 65 (assignment-operator)
66 assignment-operator → "|=" • $default reduce using rule 66 (assignment-operator)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 157 | logical-or-expression "?" • expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 277 expression → • assignment-expression 278 | • expression "," assignment-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 261 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 "co_yield" shift, and go to state 264 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 assignment-expression go to state 268 await-expression go to state 269 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 272 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 expression go to state 798 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 285 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 throw-expression go to state 302 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306 yield-expression go to state 307
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 397 logical-or-expression → logical-or-expression "||" • logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 await-expression go to state 269 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 799 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 53 | logical-or-expression assignment-operator • initializer-clause 90 await-expression → • "co_await" cast-expression 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 361 initializer-clause → • assignment-expression 362 | • braced-init-list 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "{" shift, and go to state 380 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 261 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 "co_yield" shift, and go to state 264 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 assignment-expression go to state 642 await-expression go to state 269 braced-init-list go to state 643 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 272 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 initializer-clause go to state 800 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 285 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 throw-expression go to state 302 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306 yield-expression go to state 307
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 440 multiplicative-expression → multiplicative-expression "*" • pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 await-expression go to state 269 cast-expression go to state 270 class-name go to state 55 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 fold-expression go to state 278 id-expression go to state 279 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 801 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 requires-expression go to state 296 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 441 multiplicative-expression → multiplicative-expression "/" • pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 await-expression go to state 269 cast-expression go to state 270 class-name go to state 55 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 fold-expression go to state 278 id-expression go to state 279 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 802 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 requires-expression go to state 296 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 442 multiplicative-expression → multiplicative-expression "%" • pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 await-expression go to state 269 cast-expression go to state 270 class-name go to state 55 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 fold-expression go to state 278 id-expression go to state 279 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 803 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 requires-expression go to state 296 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306
169 conversion-function-id → • "operator" conversion-type-id 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 457 nested-name-specifier → nested-name-specifier TEMPLATE-opt • simple-template-id "::" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 600 qualified-id → nested-name-specifier TEMPLATE-opt • unqualified-id 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 804 "operator" shift, and go to state 249 "~" shift, and go to state 336 conversion-function-id go to state 273 literal-operator-id go to state 283 operator-function-id go to state 290 simple-template-id go to state 805 template-id go to state 301 template-name go to state 102 unqualified-id go to state 806
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 158 constant-expression → • conditional-expression 169 conversion-function-id → • "operator" conversion-type-id 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 683 template-argument → • constant-expression 684 | • type-id 685 | • id-expression 686 template-argument-list → • template-argument ELLIPSIS-opt 687 | • template-argument-list "," template-argument ELLIPSIS-opt 688 template-argument-list-opt → • %empty [">"] 689 | • template-argument-list 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 694 | operator-function-id "<" • template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 712 type-id → • type-specifier-seq abstract-declarator-opt 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 729 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 730 | • type-specifier type-specifier-seq 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "operator" shift, and go to state 249 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 125 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] ">" reduce using rule 688 (template-argument-list-opt) "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 await-expression go to state 269 cast-expression go to state 270 class-key go to state 406 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 309 constant-expression go to state 407 conversion-function-id go to state 273 cv-qualifier go to state 57 decltype-specifier go to state 63 delete-expression go to state 274 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 fold-expression go to state 278 id-expression go to state 408 inclusive-or-expression go to state 280 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 311 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 409 string-literal go to state 300 template-argument go to state 410 template-argument-list go to state 411 template-argument-list-opt go to state 807 template-id go to state 301 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 413 type-name go to state 106 type-specifier go to state 414 type-specifier-seq go to state 415 typedef-name go to state 108 typename-specifier go to state 416 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 557 pm-expression → pm-expression ".*" • cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 await-expression go to state 269 cast-expression go to state 808 class-name go to state 55 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 fold-expression go to state 278 id-expression go to state 279 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 requires-expression go to state 296 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 558 pm-expression → pm-expression "->*" • cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 await-expression go to state 269 cast-expression go to state 809 class-name go to state 55 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 fold-expression go to state 278 id-expression go to state 279 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 requires-expression go to state 296 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 279 expression-list → • initializer-list 280 expression-list-opt → • %empty [")"] 281 | • expression-list 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 361 initializer-clause → • assignment-expression 362 | • braced-init-list 363 initializer-list → • initializer-clause ELLIPSIS-opt 364 | • initializer-list "," initializer-clause ELLIPSIS-opt 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 561 | postfix-expression "(" • expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "{" shift, and go to state 380 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 261 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 "co_yield" shift, and go to state 264 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] ")" reduce using rule 280 (expression-list-opt) "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 assignment-expression go to state 642 await-expression go to state 269 braced-init-list go to state 643 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 272 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 expression-list go to state 810 expression-list-opt go to state 811 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 initializer-clause go to state 646 initializer-list go to state 647 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 285 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 throw-expression go to state 302 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306 yield-expression go to state 307
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 279 expression-list → • initializer-list 280 expression-list-opt → • %empty ["]"] 281 | • expression-list 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 361 initializer-clause → • assignment-expression 362 | • braced-init-list 363 initializer-list → • initializer-clause ELLIPSIS-opt 364 | • initializer-list "," initializer-clause ELLIPSIS-opt 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 560 | postfix-expression "[" • expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "{" shift, and go to state 380 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 261 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 "co_yield" shift, and go to state 264 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "]" reduce using rule 280 (expression-list-opt) "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 assignment-expression go to state 642 await-expression go to state 269 braced-init-list go to state 643 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 272 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 expression-list go to state 810 expression-list-opt go to state 812 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 initializer-clause go to state 646 initializer-list go to state 647 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 285 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 throw-expression go to state 302 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306 yield-expression go to state 307
21 TEMPLATE-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 22 | • "template" 567 postfix-expression → postfix-expression "->" • TEMPLATE-opt id-expression "template" shift, and go to state 230 $default reduce using rule 21 (TEMPLATE-opt) TEMPLATE-opt go to state 813
21 TEMPLATE-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 22 | • "template" 566 postfix-expression → postfix-expression "." • TEMPLATE-opt id-expression "template" shift, and go to state 230 $default reduce using rule 21 (TEMPLATE-opt) TEMPLATE-opt go to state 814
568 postfix-expression → postfix-expression "++" • $default reduce using rule 568 (postfix-expression)
569 postfix-expression → postfix-expression "--" • $default reduce using rule 569 (postfix-expression)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 607 relational-expression → relational-expression "<" • compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 await-expression go to state 269 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 815 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 fold-expression go to state 278 id-expression go to state 279 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 608 relational-expression → relational-expression ">" • compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 await-expression go to state 269 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 816 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 fold-expression go to state 278 id-expression go to state 279 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 609 relational-expression → relational-expression "<=" • compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 await-expression go to state 269 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 817 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 fold-expression go to state 278 id-expression go to state 279 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 610 relational-expression → relational-expression ">=" • compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 await-expression go to state 269 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 818 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 fold-expression go to state 278 id-expression go to state 279 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 634 shift-expression → shift-expression "<<" • additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 819 await-expression go to state 269 cast-expression go to state 270 class-name go to state 55 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 fold-expression go to state 278 id-expression go to state 279 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 requires-expression go to state 296 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 635 shift-expression → shift-expression ">>" • additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 820 await-expression go to state 269 cast-expression go to state 270 class-name go to state 55 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 fold-expression go to state 278 id-expression go to state 279 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 requires-expression go to state 296 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 279 expression-list → • initializer-list 280 expression-list-opt → • %empty [")"] 281 | • expression-list 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 361 initializer-clause → • assignment-expression 362 | • braced-init-list 363 initializer-list → • initializer-clause ELLIPSIS-opt 364 | • initializer-list "," initializer-clause ELLIPSIS-opt 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 562 | simple-type-specifier "(" • expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "{" shift, and go to state 380 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 261 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 "co_yield" shift, and go to state 264 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] ")" reduce using rule 280 (expression-list-opt) "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 assignment-expression go to state 642 await-expression go to state 269 braced-init-list go to state 643 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 272 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 expression-list go to state 810 expression-list-opt go to state 821 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 initializer-clause go to state 646 initializer-list go to state 647 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 285 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 throw-expression go to state 302 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306 yield-expression go to state 307
564 postfix-expression → simple-type-specifier braced-init-list • $default reduce using rule 564 (postfix-expression)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 279 expression-list → • initializer-list 280 expression-list-opt → • %empty [")"] 281 | • expression-list 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 361 initializer-clause → • assignment-expression 362 | • braced-init-list 363 initializer-list → • initializer-clause ELLIPSIS-opt 364 | • initializer-list "," initializer-clause ELLIPSIS-opt 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 563 | typename-specifier "(" • expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "{" shift, and go to state 380 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 261 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 "co_yield" shift, and go to state 264 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] ")" reduce using rule 280 (expression-list-opt) "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 assignment-expression go to state 642 await-expression go to state 269 braced-init-list go to state 643 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 272 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 expression-list go to state 810 expression-list-opt go to state 822 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 initializer-clause go to state 646 initializer-list go to state 647 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 285 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 throw-expression go to state 302 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306 yield-expression go to state 307
565 postfix-expression → typename-specifier braced-init-list • $default reduce using rule 565 (postfix-expression)
737 unary-expression → unary-operator cast-expression • $default reduce using rule 737 (unary-expression)
266 explicit-specifier → "explicit" "(" constant-expression ")" • $default reduce using rule 266 (explicit-specifier)
436 module-partition → ":" module-name-qualifier-opt IDENTIFIER • $default reduce using rule 436 (module-partition)
430 module-import-declaration → "import" header-name attribute-specifier-seq-opt ";" • $default reduce using rule 430 (module-import-declaration)
428 module-import-declaration → "import" module-name attribute-specifier-seq-opt ";" • $default reduce using rule 428 (module-import-declaration)
433 module-name-qualifier → module-name-qualifier IDENTIFIER "." • $default reduce using rule 433 (module-name-qualifier)
429 module-import-declaration → "import" module-partition attribute-specifier-seq-opt ";" • $default reduce using rule 429 (module-import-declaration)
444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 601 qualified-namespace-specifier → nested-name-specifier-opt • namespace-name IDENTIFIER shift, and go to state 823 namespace-alias go to state 85 namespace-name go to state 824
445 namespace-alias-definition → "namespace" IDENTIFIER "=" qualified-namespace-specifier • ";" ";" shift, and go to state 825
14 INLINE-opt → "inline" • $default reduce using rule 14 (INLINE-opt)
235 enclosing-namespace-specifier → enclosing-namespace-specifier "::" INLINE-opt • IDENTIFIER 460 nested-namespace-definition → "namespace" enclosing-namespace-specifier "::" INLINE-opt • IDENTIFIER "{" namespace-body "}" IDENTIFIER shift, and go to state 826
677 static_assert-declaration → "static_assert" "(" constant-expression "," • string-literal ")" ";" 682 string-literal → • STRING_LITERAL STRING_LITERAL shift, and go to state 118 string-literal go to state 827
676 static_assert-declaration → "static_assert" "(" constant-expression ")" • ";" ";" shift, and go to state 828
443 named-namespace-definition → INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER • "{" namespace-body "}" "{" shift, and go to state 829
9 EXTERN-opt → • %empty ["template"] 10 | • "extern" 13 INLINE-opt → • %empty ["namespace"] 14 | • "inline" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 71 attribute-declaration → • attribute-specifier-seq ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "using", "alignas", "(", "&", "asm", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 193 declaration → • block-declaration 194 | • nodeclspec-function-declaration 195 | • function-definition 196 | • template-declaration 197 | • deduction-guide 198 | • explicit-instantiation 199 | • explicit-specialization 200 | • export-declaration 201 | • linkage-specification 202 | • namespace-definition 203 | • empty-declaration 204 | • attribute-declaration 205 | • module-import-declaration 206 declaration-seq → • declaration 207 | • declaration-seq declaration 208 declaration-seq-opt → • %empty ["}"] 209 | • declaration-seq 214 decltype-specifier → • "decltype" "(" expression ")" 215 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 233 empty-declaration → • ";" 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 264 explicit-instantiation → • EXTERN-opt "template" declaration 265 explicit-specialization → • "template" "<" ">" declaration 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 268 explicit-specifier-opt → • %empty [IDENTIFIER] 269 | • explicit-specifier 270 export-declaration → • "export" declaration 271 | • "export" "{" declaration-seq-opt "}" 272 | • "export" module-import-declaration 327 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 328 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 329 function-specifier → • "virtual" 330 | • explicit-specifier 390 linkage-specification → • "extern" string-literal "{" declaration-seq-opt "}" 391 | • "extern" string-literal declaration 428 module-import-declaration → • "import" module-name attribute-specifier-seq-opt ";" 429 | • "import" module-partition attribute-specifier-seq-opt ";" 430 | • "import" header-name attribute-specifier-seq-opt ";" 443 named-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 446 namespace-body → • declaration-seq-opt 447 namespace-definition → • named-namespace-definition 448 | • unnamed-namespace-definition 449 | • nested-namespace-definition 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 460 nested-namespace-definition → • "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" 476 nodeclspec-function-declaration → • attribute-specifier-seq-opt declarator ";" 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 690 template-declaration → • template-head declaration 691 | • template-head concept-definition 692 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 754 unnamed-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body "}" 754 | INLINE-opt "namespace" attribute-specifier-seq-opt "{" • namespace-body "}" 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "export" shift, and go to state 2 "extern" shift, and go to state 3 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 5 "::" shift, and go to state 6 "template" shift, and go to state 7 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 ";" shift, and go to state 11 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "import" shift, and go to state 25 "namespace" shift, and go to state 26 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 268 (explicit-specifier-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "template" [reduce using rule 9 (EXTERN-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "}" reduce using rule 208 (declaration-seq-opt) "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "namespace" [reduce using rule 13 (INLINE-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) EXTERN-opt go to state 45 INLINE-opt go to state 46 alias-declaration go to state 47 asm-declaration go to state 48 attribute-declaration go to state 49 attribute-specifier-seq go to state 50 attribute-specifier-seq-opt go to state 51 block-declaration go to state 52 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration go to state 60 declaration-seq go to state 61 declaration-seq-opt go to state 830 decltype-specifier go to state 63 deduction-guide go to state 64 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 empty-declaration go to state 68 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-instantiation go to state 73 explicit-specialization go to state 74 explicit-specifier go to state 75 explicit-specifier-opt go to state 76 export-declaration go to state 77 function-definition go to state 78 function-specifier go to state 79 linkage-specification go to state 82 module-import-declaration go to state 83 named-namespace-definition go to state 84 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-body go to state 831 namespace-definition go to state 87 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 nested-namespace-definition go to state 91 nodeclspec-function-declaration go to state 92 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-declaration go to state 100 template-head go to state 101 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 unnamed-namespace-definition go to state 110 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
641 simple-declaration → attribute-specifier-seq decl-specifier-seq init-declarator-list ";" • $default reduce using rule 641 (simple-declaration)
242 enum-head-name-opt → enum-head-name • $default reduce using rule 242 (enum-head-name-opt)
444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 767 using-directive → attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt • namespace-name ";" IDENTIFIER shift, and go to state 823 namespace-alias go to state 85 namespace-name go to state 832
5 ELLIPSIS-opt → • %empty [")"] 6 | • "..." 46 alignment-specifier → "alignas" "(" constant-expression • ELLIPSIS-opt ")" "..." shift, and go to state 156 $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 833
5 ELLIPSIS-opt → • %empty [")"] 6 | • "..." 45 alignment-specifier → "alignas" "(" type-id • ELLIPSIS-opt ")" "..." shift, and go to state 156 $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 834
491 noptr-declarator → noptr-declarator parameters-and-qualifiers • $default reduce using rule 491 (noptr-declarator)
493 noptr-declarator → "(" ptr-declarator ")" • $default reduce using rule 493 (noptr-declarator)
49 asm-declaration → attribute-specifier-seq-opt "asm" "(" string-literal • ")" ";" ")" shift, and go to state 835
76 attribute-namespace → • IDENTIFIER 87 attribute-using-prefix → "using" • attribute-namespace ":" IDENTIFIER shift, and go to state 836 attribute-namespace go to state 837
89 attribute-using-prefix-opt → attribute-using-prefix • $default reduce using rule 89 (attribute-using-prefix-opt)
67 attribute → • attribute-token attribute-argument-clause-opt 72 attribute-list → • attribute-opt 73 | • attribute-list "," attribute-opt 74 | • attribute "..." 75 | • attribute-list "," attribute "..." 76 attribute-namespace → • IDENTIFIER 77 attribute-opt → • %empty [",", "]"] 78 | • attribute 79 attribute-scoped-token → • attribute-namespace "::" IDENTIFIER 80 attribute-specifier → "[" "[" attribute-using-prefix-opt • attribute-list "]" "]" 85 attribute-token → • IDENTIFIER 86 | • attribute-scoped-token IDENTIFIER shift, and go to state 838 $default reduce using rule 77 (attribute-opt) attribute go to state 839 attribute-list go to state 840 attribute-namespace go to state 841 attribute-opt go to state 842 attribute-scoped-token go to state 843 attribute-token go to state 844
175 cv-qualifier → • "const" 176 | • "volatile" 177 cv-qualifier-seq → • cv-qualifier cv-qualifier-seq-opt 177 | cv-qualifier • cv-qualifier-seq-opt 178 cv-qualifier-seq-opt → • %empty [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 179 | • cv-qualifier-seq "const" shift, and go to state 15 "volatile" shift, and go to state 16 "const" [reduce using rule 178 (cv-qualifier-seq-opt)] "volatile" [reduce using rule 178 (cv-qualifier-seq-opt)] $default reduce using rule 178 (cv-qualifier-seq-opt) cv-qualifier go to state 608 cv-qualifier-seq go to state 609 cv-qualifier-seq-opt go to state 845
179 cv-qualifier-seq-opt → cv-qualifier-seq • $default reduce using rule 179 (cv-qualifier-seq-opt)
593 ptr-operator → "*" attribute-specifier-seq-opt cv-qualifier-seq-opt • $default reduce using rule 593 (ptr-operator)
342 identifier-list → • IDENTIFIER 343 | • identifier-list "," IDENTIFIER 642 simple-declaration → attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" • identifier-list "]" initializer ";" IDENTIFIER shift, and go to state 846 identifier-list go to state 847
770 virt-specifier → "final" • $default reduce using rule 770 (virt-specifier)
769 virt-specifier → "override" • $default reduce using rule 769 (virt-specifier)
172 ctor-initializer → • ":" mem-initializer-list 173 ctor-initializer-opt → • %empty ["{"] 174 | • ctor-initializer 323 function-body → • ctor-initializer-opt compound-statement 324 | • function-try-block 325 | • "=" "default" ";" 326 | • "=" "delete" ";" 328 function-definition → attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause • function-body 331 function-try-block → • "try" ctor-initializer-opt compound-statement handler-seq "=" shift, and go to state 848 ":" shift, and go to state 849 "try" shift, and go to state 850 $default reduce using rule 173 (ctor-initializer-opt) ctor-initializer go to state 851 ctor-initializer-opt go to state 852 function-body go to state 853 function-try-block go to state 854
771 virt-specifier-seq → virt-specifier • $default reduce using rule 771 (virt-specifier-seq)
769 virt-specifier → • "override" 770 | • "final" 772 virt-specifier-seq → virt-specifier-seq • virt-specifier 774 virt-specifier-seq-opt → virt-specifier-seq • [",", "=", ";", ":", "{", "try"] "final" shift, and go to state 612 "override" shift, and go to state 613 $default reduce using rule 774 (virt-specifier-seq-opt) virt-specifier go to state 855
172 ctor-initializer → • ":" mem-initializer-list 173 ctor-initializer-opt → • %empty ["{"] 174 | • ctor-initializer 323 function-body → • ctor-initializer-opt compound-statement 324 | • function-try-block 325 | • "=" "default" ";" 326 | • "=" "delete" ";" 327 function-definition → attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt • function-body 331 function-try-block → • "try" ctor-initializer-opt compound-statement handler-seq "=" shift, and go to state 848 ":" shift, and go to state 849 "try" shift, and go to state 850 $default reduce using rule 173 (ctor-initializer-opt) ctor-initializer go to state 851 ctor-initializer-opt go to state 852 function-body go to state 856 function-try-block go to state 854
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 175 cv-qualifier → • "const" 176 | • "volatile" 177 cv-qualifier-seq → • cv-qualifier cv-qualifier-seq-opt 178 cv-qualifier-seq-opt → • %empty [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 179 | • cv-qualifier-seq 596 ptr-operator → nested-name-specifier "*" attribute-specifier-seq-opt • cv-qualifier-seq-opt "alignas" shift, and go to state 158 "[" shift, and go to state 162 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "alignas" [reduce using rule 178 (cv-qualifier-seq-opt)] "[" [reduce using rule 178 (cv-qualifier-seq-opt)] "const" [reduce using rule 178 (cv-qualifier-seq-opt)] "volatile" [reduce using rule 178 (cv-qualifier-seq-opt)] $default reduce using rule 178 (cv-qualifier-seq-opt) alignment-specifier go to state 166 attribute-specifier go to state 167 cv-qualifier go to state 608 cv-qualifier-seq go to state 609 cv-qualifier-seq-opt go to state 857
549 parameter-declaration-list → parameter-declaration • $default reduce using rule 549 (parameter-declaration-list)
553 parameters-and-qualifiers → "(" parameter-declaration-clause • ")" cv-qualifier-seq-opt ref-qualifier-opt noexcept-specifier-opt attribute-specifier-seq-opt ")" shift, and go to state 858
548 parameter-declaration-clause → parameter-declaration-list • "," "..." 550 parameter-declaration-list → parameter-declaration-list • "," parameter-declaration 552 parameter-declaration-list-opt → parameter-declaration-list • ["...", ")"] "," shift, and go to state 859 $default reduce using rule 552 (parameter-declaration-list-opt)
5 ELLIPSIS-opt → • %empty [")"] 6 | • "..." 547 parameter-declaration-clause → parameter-declaration-list-opt • ELLIPSIS-opt "..." shift, and go to state 156 $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 860
160 constant-expression-opt → constant-expression • $default reduce using rule 160 (constant-expression-opt)
492 noptr-declarator → noptr-declarator "[" constant-expression-opt • "]" attribute-specifier-seq-opt "]" shift, and go to state 861
134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 696 template-name → • IDENTIFIER 702 trailing-return-type → "->" • type-id 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 712 type-id → • type-specifier-seq abstract-declarator-opt 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 729 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 730 | • type-specifier type-specifier-seq 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "typename" shift, and go to state 8 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 125 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] $default reduce using rule 710 (type-constraint-opt) class-key go to state 406 class-name go to state 55 cv-qualifier go to state 57 decltype-specifier go to state 63 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 862 type-name go to state 106 type-specifier go to state 414 type-specifier-seq go to state 415 typedef-name go to state 108 typename-specifier go to state 109
212 declarator → noptr-declarator parameters-and-qualifiers trailing-return-type • $default reduce using rule 212 (declarator)
36 access-specifier → • "private" 37 | • "protected" 38 | • "public" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", ";", "alignas", "(", "&", "[", ":", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 215 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 233 empty-declaration → • ";" 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 265 explicit-specialization → • "template" "<" ">" declaration 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 268 explicit-specifier-opt → • %empty [IDENTIFIER] 269 | • explicit-specifier 327 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 328 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 404 member-declaration → • attribute-specifier-seq-opt decl-specifier-seq-opt member-declarator-list-opt ";" 405 | • function-definition 406 | • using-declaration 407 | • using-enum-declaration 408 | • static_assert-declaration 409 | • template-declaration 410 | • explicit-specialization 411 | • deduction-guide 412 | • alias-declaration 413 | • opaque-enum-declaration 414 | • empty-declaration 423 member-specification → • member-declaration member-specification-opt 424 | • access-specifier ":" member-specification-opt 424 | access-specifier ":" • member-specification-opt 425 member-specification-opt → • %empty ["}"] 426 | • member-specification 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 690 template-declaration → • template-head declaration 691 | • template-head concept-definition 692 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 763 using-declaration → • "using" using-declarator-list ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "template" shift, and go to state 7 "private" shift, and go to state 351 "protected" shift, and go to state 352 "public" shift, and go to state 353 "using" shift, and go to state 10 ";" shift, and go to state 11 "enum" shift, and go to state 354 "explicit" shift, and go to state 23 "static_assert" shift, and go to state 41 IDENTIFIER reduce using rule 83 (attribute-specifier-seq-opt) IDENTIFIER [reduce using rule 268 (explicit-specifier-opt)] ";" [reduce using rule 83 (attribute-specifier-seq-opt)] "}" reduce using rule 425 (member-specification-opt) "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) access-specifier go to state 355 alias-declaration go to state 356 attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 357 deduction-guide go to state 358 empty-declaration go to state 359 enum-key go to state 360 explicit-specialization go to state 361 explicit-specifier go to state 362 explicit-specifier-opt go to state 76 function-definition go to state 363 member-declaration go to state 364 member-specification go to state 365 member-specification-opt go to state 863 opaque-enum-declaration go to state 367 static_assert-declaration go to state 368 template-declaration go to state 369 template-head go to state 101 using-declaration go to state 370 using-enum-declaration go to state 371
5 ELLIPSIS-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 6 | • "..." 11 IDENTIFIER-opt → • %empty ["alignas", "[", ":"] 12 | • IDENTIFIER 137 class-name → • IDENTIFIER 138 | • simple-template-id 211 declarator → • ptr-declarator 212 | • noptr-declarator parameters-and-qualifiers trailing-return-type 213 declarator-id → • ELLIPSIS-opt id-expression 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 327 function-definition → attribute-specifier-seq-opt decl-specifier-seq-opt • declarator virt-specifier-seq-opt function-body 328 | attribute-specifier-seq-opt decl-specifier-seq-opt • declarator requires-clause function-body 404 member-declaration → attribute-specifier-seq-opt decl-specifier-seq-opt • member-declarator-list-opt ";" 415 member-declarator → • declarator virt-specifier-seq-opt pure-specifier-opt 416 | • declarator requires-clause 417 | • declarator brace-or-equal-initializer-opt 418 | • IDENTIFIER-opt attribute-specifier-seq-opt ":" constant-expression brace-or-equal-initializer-opt 419 member-declarator-list → • member-declarator 420 | • member-declarator-list "," member-declarator 421 member-declarator-list-opt → • %empty [";"] 422 | • member-declarator-list 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 490 noptr-declarator → • declarator-id attribute-specifier-seq-opt 491 | • noptr-declarator parameters-and-qualifiers 492 | • noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 493 | • "(" ptr-declarator ")" 591 ptr-declarator → • noptr-declarator 592 | • ptr-operator ptr-declarator 593 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 594 | • "&" attribute-specifier-seq-opt 595 | • "&&" attribute-specifier-seq-opt 596 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id "..." shift, and go to state 156 IDENTIFIER shift, and go to state 864 "::" shift, and go to state 6 "(" shift, and go to state 159 "&" shift, and go to state 160 "&&" shift, and go to state 163 "decltype" shift, and go to state 21 "*" shift, and go to state 164 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "::" [reduce using rule 5 (ELLIPSIS-opt)] ";" reduce using rule 421 (member-declarator-list-opt) "operator" reduce using rule 5 (ELLIPSIS-opt) "decltype" [reduce using rule 5 (ELLIPSIS-opt)] "~" reduce using rule 5 (ELLIPSIS-opt) $default reduce using rule 11 (IDENTIFIER-opt) ELLIPSIS-opt go to state 165 IDENTIFIER-opt go to state 865 class-name go to state 55 declarator go to state 866 declarator-id go to state 171 decltype-specifier go to state 121 enum-name go to state 71 member-declarator go to state 867 member-declarator-list go to state 868 member-declarator-list-opt go to state 869 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 187 noptr-declarator go to state 173 ptr-declarator go to state 174 ptr-operator go to state 175 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 240 enum-head-name → • nested-name-specifier-opt IDENTIFIER 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 496 opaque-enum-declaration → enum-key attribute-specifier-seq-opt • enum-head-name enum-base-opt ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "alignas" shift, and go to state 158 "[" shift, and go to state 162 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] alignment-specifier go to state 166 attribute-specifier go to state 167 class-name go to state 55 decltype-specifier go to state 121 enum-head-name go to state 870 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 133 nested-name-specifier-opt go to state 396 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
423 member-specification → member-declaration member-specification-opt • $default reduce using rule 423 (member-specification)
142 class-specifier → class-head "{" member-specification-opt "}" • $default reduce using rule 142 (class-specifier)
36 access-specifier → • "private" 37 | • "protected" 38 | • "public" 45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 102 base-specifier → attribute-specifier-seq-opt • class-or-decltype 103 | attribute-specifier-seq-opt • "virtual" access-specifier-opt class-or-decltype 104 | attribute-specifier-seq-opt • access-specifier VIRTUAL-opt class-or-decltype 137 class-name → • IDENTIFIER 138 | • simple-template-id 139 class-or-decltype → • nested-name-specifier-opt type-name 140 | • nested-name-specifier "template" simple-template-id 141 | • decltype-specifier 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "virtual" shift, and go to state 871 "private" shift, and go to state 351 "protected" shift, and go to state 352 "public" shift, and go to state 353 "alignas" shift, and go to state 158 "[" shift, and go to state 162 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] access-specifier go to state 872 alignment-specifier go to state 166 attribute-specifier go to state 167 class-name go to state 55 class-or-decltype go to state 873 decltype-specifier go to state 874 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 875 nested-name-specifier-opt go to state 876 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
5 ELLIPSIS-opt → • %empty [",", "{"] 6 | • "..." 105 base-specifier-list → base-specifier • ELLIPSIS-opt "..." shift, and go to state 156 $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 877
99 base-clause → ":" base-specifier-list • ["{"] 106 base-specifier-list → base-specifier-list • "," base-specifier ELLIPSIS-opt "," shift, and go to state 878 $default reduce using rule 99 (base-clause)
143 class-virt-specifier → "final" • $default reduce using rule 143 (class-virt-specifier)
145 class-virt-specifier-opt → class-virt-specifier • $default reduce using rule 145 (class-virt-specifier-opt)
99 base-clause → • ":" base-specifier-list 100 base-clause-opt → • %empty ["{"] 101 | • base-clause 131 class-head → class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt • base-clause-opt ":" shift, and go to state 372 $default reduce using rule 100 (base-clause-opt) base-clause go to state 373 base-clause-opt go to state 879
137 class-name → IDENTIFIER • [":", "{", "final"] 229 elaborated-type-specifier → class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER • [",", "constexpr", "...", "extern", IDENTIFIER, "inline", "noexcept", "::", "typename", "virtual", "=", ";", "alignas", "(", ")", "&", "[", ":", "{", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", "enum", ">", "explicit", "*", "requires", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 696 template-name → IDENTIFIER • ["<"] ":" reduce using rule 137 (class-name) ":" [reduce using rule 229 (elaborated-type-specifier)] "{" reduce using rule 137 (class-name) "{" [reduce using rule 229 (elaborated-type-specifier)] "final" reduce using rule 137 (class-name) "<" reduce using rule 696 (template-name) $default reduce using rule 229 (elaborated-type-specifier)
133 class-head-name → nested-name-specifier-opt class-name • $default reduce using rule 133 (class-head-name)
138 class-name → simple-template-id • $default reduce using rule 138 (class-name)
231 elaborated-type-specifier → class-key nested-name-specifier TEMPLATE-opt simple-template-id • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 457 nested-name-specifier → nested-name-specifier TEMPLATE-opt simple-template-id • "::" "::" shift, and go to state 673 "::" [reduce using rule 231 (elaborated-type-specifier)] $default reduce using rule 231 (elaborated-type-specifier)
361 initializer-clause → assignment-expression • $default reduce using rule 361 (initializer-clause)
362 initializer-clause → braced-init-list • $default reduce using rule 362 (initializer-clause)
116 brace-or-equal-initializer → "=" initializer-clause • $default reduce using rule 116 (brace-or-equal-initializer)
360 initializer → "(" expression-list • ")" ")" shift, and go to state 880
5 ELLIPSIS-opt → • %empty [",", ")", "]", "}"] 6 | • "..." 363 initializer-list → initializer-clause • ELLIPSIS-opt "..." shift, and go to state 156 $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 881
279 expression-list → initializer-list • [")", "]"] 364 initializer-list → initializer-list • "," initializer-clause ELLIPSIS-opt "," shift, and go to state 882 $default reduce using rule 279 (expression-list)
122 braced-init-list → "{" "}" • $default reduce using rule 122 (braced-init-list)
227 designator → "." • IDENTIFIER IDENTIFIER shift, and go to state 883
225 designated-initializer-list → designated-initializer-clause • $default reduce using rule 225 (designated-initializer-list)
1 COMMA-opt → • %empty ["}"] 2 | • "," 121 braced-init-list → "{" designated-initializer-list • COMMA-opt "}" 226 designated-initializer-list → designated-initializer-list • "," designated-initializer-clause "," shift, and go to state 884 $default reduce using rule 1 (COMMA-opt) COMMA-opt go to state 885
116 brace-or-equal-initializer → • "=" initializer-clause 117 | • braced-init-list 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 224 designated-initializer-clause → designator • brace-or-equal-initializer "=" shift, and go to state 378 "{" shift, and go to state 380 brace-or-equal-initializer go to state 886 braced-init-list go to state 383
1 COMMA-opt → • %empty ["}"] 2 | • "," 120 braced-init-list → "{" initializer-list • COMMA-opt "}" 364 initializer-list → initializer-list • "," initializer-clause ELLIPSIS-opt "," shift, and go to state 887 $default reduce using rule 1 (COMMA-opt) COMMA-opt go to state 888
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 277 expression → • assignment-expression 278 | • expression "," assignment-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 285 | "(" • cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 286 | "(" • "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 287 | "(" • cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 579 | "(" • expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list "..." shift, and go to state 439 IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 261 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 "co_yield" shift, and go to state 264 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 assignment-expression go to state 268 await-expression go to state 269 cast-expression go to state 440 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 272 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 expression go to state 441 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 285 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 throw-expression go to state 302 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306 yield-expression go to state 307
163 constraint-logical-and-expression → constraint-logical-and-expression • "&&" primary-expression 164 constraint-logical-or-expression → constraint-logical-and-expression • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "using", "=", ";", "alignas", "(", "&", "asm", "[", ":", "{", "class", "struct", "union", "concept", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", "enum", "explicit", "*", "try", "import", "namespace", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable"] "&&" shift, and go to state 889 "&&" [reduce using rule 164 (constraint-logical-or-expression)] $default reduce using rule 164 (constraint-logical-or-expression)
165 constraint-logical-or-expression → constraint-logical-or-expression • "||" constraint-logical-and-expression 621 requires-clause → "requires" constraint-logical-or-expression • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "using", "=", ";", "alignas", "(", "&", "asm", "[", ":", "{", "class", "struct", "union", "concept", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", "enum", "explicit", "*", "try", "import", "namespace", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable"] "||" shift, and go to state 890 $default reduce using rule 621 (requires-clause)
162 constraint-logical-and-expression → primary-expression • $default reduce using rule 162 (constraint-logical-and-expression)
351 init-declarator-list → init-declarator-list "," init-declarator • $default reduce using rule 351 (init-declarator-list)
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 249 enumerator → IDENTIFIER attribute-specifier-seq-opt • [",", "=", "}"] "alignas" shift, and go to state 158 "[" shift, and go to state 162 $default reduce using rule 249 (enumerator) alignment-specifier go to state 166 attribute-specifier go to state 167
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 158 constant-expression → • conditional-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 251 enumerator-definition → enumerator "=" • constant-expression 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 await-expression go to state 269 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 309 constant-expression go to state 891 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 311 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306
248 enum-specifier → enum-head "{" enumerator-list "," • "}" 249 enumerator → • IDENTIFIER attribute-specifier-seq-opt 250 enumerator-definition → • enumerator 251 | • enumerator "=" constant-expression 253 enumerator-list → enumerator-list "," • enumerator-definition IDENTIFIER shift, and go to state 389 "}" shift, and go to state 892 enumerator go to state 390 enumerator-definition go to state 893
247 enum-specifier → enum-head "{" enumerator-list-opt "}" • $default reduce using rule 247 (enum-specifier)
134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 236 enum-base → ":" • type-specifier-seq 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 729 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 730 | • type-specifier type-specifier-seq 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "typename" shift, and go to state 8 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 125 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] $default reduce using rule 710 (type-constraint-opt) class-key go to state 406 class-name go to state 55 cv-qualifier go to state 57 decltype-specifier go to state 63 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 414 type-specifier-seq go to state 894 typedef-name go to state 108 typename-specifier go to state 109
238 enum-base-opt → enum-base • $default reduce using rule 238 (enum-base-opt)
496 opaque-enum-declaration → enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt • ";" ";" shift, and go to state 895
239 enum-head → enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt • $default reduce using rule 239 (enum-head)
240 enum-head-name → nested-name-specifier-opt IDENTIFIER • $default reduce using rule 240 (enum-head-name)
215 deduction-guide → explicit-specifier-opt template-name "(" parameter-declaration-clause • ")" "->" simple-template-id ";" ")" shift, and go to state 896
427 module-declaration → EXPORT-opt "module" module-name • module-partition-opt attribute-specifier-seq-opt ";" 436 module-partition → • ":" module-name-qualifier-opt IDENTIFIER 437 module-partition-opt → • %empty [";", "alignas", "["] 438 | • module-partition ":" shift, and go to state 138 $default reduce using rule 437 (module-partition-opt) module-partition go to state 897 module-partition-opt go to state 898
584 private-module-fragment → "module" • ":" "private" ";" declaration-seq-opt ":" shift, and go to state 899
586 private-module-fragment-opt → private-module-fragment • $default reduce using rule 586 (private-module-fragment-opt)
706 translation-unit → global-module-fragment-opt module-declaration declaration-seq-opt private-module-fragment-opt • $default reduce using rule 706 (translation-unit)
457 nested-name-specifier → nested-name-specifier TEMPLATE-opt simple-template-id "::" • $default reduce using rule 457 (nested-name-specifier)
709 type-constraint → nested-name-specifier-opt concept-name "<" template-argument-list-opt • ">" ">" shift, and go to state 900
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 150 concept-definition → "concept" concept-name "=" • constraint-expression ";" 161 constraint-expression → • logical-or-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 await-expression go to state 269 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 constraint-expression go to state 901 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 902 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 229 elaborated-type-specifier → class-key attribute-specifier-seq-opt • nested-name-specifier-opt IDENTIFIER 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "alignas" shift, and go to state 158 "[" shift, and go to state 162 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] alignment-specifier go to state 166 attribute-specifier go to state 167 class-name go to state 55 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 133 nested-name-specifier-opt go to state 903 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
686 template-argument-list → template-argument ELLIPSIS-opt • $default reduce using rule 686 (template-argument-list)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 158 constant-expression → • conditional-expression 169 conversion-function-id → • "operator" conversion-type-id 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 683 template-argument → • constant-expression 684 | • type-id 685 | • id-expression 687 template-argument-list → template-argument-list "," • template-argument ELLIPSIS-opt 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 712 type-id → • type-specifier-seq abstract-declarator-opt 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 729 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 730 | • type-specifier type-specifier-seq 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "operator" shift, and go to state 249 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 125 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 await-expression go to state 269 cast-expression go to state 270 class-key go to state 406 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 309 constant-expression go to state 407 conversion-function-id go to state 273 cv-qualifier go to state 57 decltype-specifier go to state 63 delete-expression go to state 274 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 fold-expression go to state 278 id-expression go to state 408 inclusive-or-expression go to state 280 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 311 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 409 string-literal go to state 300 template-argument go to state 904 template-id go to state 301 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 413 type-name go to state 106 type-specifier go to state 414 type-specifier-seq go to state 415 typedef-name go to state 108 typename-specifier go to state 416 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306
644 simple-template-id → template-name "<" template-argument-list-opt ">" • $default reduce using rule 644 (simple-template-id)
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 729 type-specifier-seq → type-specifier attribute-specifier-seq-opt • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] "alignas" shift, and go to state 158 "[" shift, and go to state 162 "alignas" [reduce using rule 729 (type-specifier-seq)] "[" [reduce using rule 729 (type-specifier-seq)] $default reduce using rule 729 (type-specifier-seq) alignment-specifier go to state 166 attribute-specifier go to state 167
730 type-specifier-seq → type-specifier type-specifier-seq • $default reduce using rule 730 (type-specifier-seq)
489 noptr-abstract-pack-declarator → "..." • $default reduce using rule 489 (noptr-abstract-pack-declarator)
137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 482 noptr-abstract-declarator → • noptr-abstract-declarator-opt parameters-and-qualifiers 483 | • noptr-abstract-declarator-opt "[" constant-expression-opt "]" attribute-specifier-seq-opt 484 | • "(" ptr-abstract-declarator ")" 484 | "(" • ptr-abstract-declarator ")" 485 noptr-abstract-declarator-opt → • %empty ["(", "["] 486 | • noptr-abstract-declarator 587 ptr-abstract-declarator → • noptr-abstract-declarator 588 | • ptr-operator ptr-abstract-declarator-opt 593 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 594 | • "&" attribute-specifier-seq-opt 595 | • "&&" attribute-specifier-seq-opt 596 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 683 "&" shift, and go to state 160 "&&" shift, and go to state 163 "decltype" shift, and go to state 21 "*" shift, and go to state 164 "(" [reduce using rule 485 (noptr-abstract-declarator-opt)] $default reduce using rule 485 (noptr-abstract-declarator-opt) class-name go to state 55 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 187 noptr-abstract-declarator go to state 687 noptr-abstract-declarator-opt go to state 905 ptr-abstract-declarator go to state 906 ptr-operator go to state 907 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
33 abstract-declarator-opt → abstract-declarator • $default reduce using rule 33 (abstract-declarator-opt)
712 type-id → type-specifier-seq abstract-declarator-opt • $default reduce using rule 712 (type-id)
31 abstract-declarator → abstract-pack-declarator • $default reduce using rule 31 (abstract-declarator)
486 noptr-abstract-declarator-opt → noptr-abstract-declarator • ["(", "["] 587 ptr-abstract-declarator → noptr-abstract-declarator • [",", "...", "=", ";", "(", ")", ":", "{", "final", ">", "try", "requires", "override"] "(" reduce using rule 486 (noptr-abstract-declarator-opt) "(" [reduce using rule 587 (ptr-abstract-declarator)] "[" reduce using rule 486 (noptr-abstract-declarator-opt) $default reduce using rule 587 (ptr-abstract-declarator)
30 abstract-declarator → noptr-abstract-declarator-opt • parameters-and-qualifiers trailing-return-type 482 noptr-abstract-declarator → noptr-abstract-declarator-opt • parameters-and-qualifiers 483 | noptr-abstract-declarator-opt • "[" constant-expression-opt "]" attribute-specifier-seq-opt 553 parameters-and-qualifiers → • "(" parameter-declaration-clause ")" cv-qualifier-seq-opt ref-qualifier-opt noexcept-specifier-opt attribute-specifier-seq-opt "(" shift, and go to state 347 "[" shift, and go to state 908 parameters-and-qualifiers go to state 909
34 abstract-pack-declarator → noptr-abstract-pack-declarator • [",", "...", "=", ";", "(", ")", ":", "{", "final", ">", "try", "requires", "override"] 487 noptr-abstract-pack-declarator → noptr-abstract-pack-declarator • parameters-and-qualifiers 488 | noptr-abstract-pack-declarator • "[" constant-expression-opt "]" attribute-specifier-seq-opt 553 parameters-and-qualifiers → • "(" parameter-declaration-clause ")" cv-qualifier-seq-opt ref-qualifier-opt noexcept-specifier-opt attribute-specifier-seq-opt "(" shift, and go to state 347 "[" shift, and go to state 910 "(" [reduce using rule 34 (abstract-pack-declarator)] $default reduce using rule 34 (abstract-pack-declarator) parameters-and-qualifiers go to state 911
29 abstract-declarator → ptr-abstract-declarator • $default reduce using rule 29 (abstract-declarator)
34 abstract-pack-declarator → • noptr-abstract-pack-declarator 35 | • ptr-operator abstract-pack-declarator 35 | ptr-operator • abstract-pack-declarator 137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 482 noptr-abstract-declarator → • noptr-abstract-declarator-opt parameters-and-qualifiers 483 | • noptr-abstract-declarator-opt "[" constant-expression-opt "]" attribute-specifier-seq-opt 484 | • "(" ptr-abstract-declarator ")" 485 noptr-abstract-declarator-opt → • %empty ["(", "["] 486 | • noptr-abstract-declarator 487 noptr-abstract-pack-declarator → • noptr-abstract-pack-declarator parameters-and-qualifiers 488 | • noptr-abstract-pack-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 489 | • "..." 587 ptr-abstract-declarator → • noptr-abstract-declarator 588 | • ptr-operator ptr-abstract-declarator-opt 588 | ptr-operator • ptr-abstract-declarator-opt 589 ptr-abstract-declarator-opt → • %empty [",", "...", "=", ";", "(", ")", ":", "{", "final", ">", "try", "requires", "override"] 590 | • ptr-abstract-declarator 593 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 594 | • "&" attribute-specifier-seq-opt 595 | • "&&" attribute-specifier-seq-opt 596 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id "..." shift, and go to state 682 IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 683 "&" shift, and go to state 160 "&&" shift, and go to state 163 "decltype" shift, and go to state 21 "*" shift, and go to state 164 "..." [reduce using rule 589 (ptr-abstract-declarator-opt)] "(" [reduce using rule 485 (noptr-abstract-declarator-opt)] "(" [reduce using rule 589 (ptr-abstract-declarator-opt)] "[" reduce using rule 485 (noptr-abstract-declarator-opt) $default reduce using rule 589 (ptr-abstract-declarator-opt) abstract-pack-declarator go to state 912 class-name go to state 55 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 187 noptr-abstract-declarator go to state 687 noptr-abstract-declarator-opt go to state 905 noptr-abstract-pack-declarator go to state 689 ptr-abstract-declarator go to state 913 ptr-abstract-declarator-opt go to state 914 ptr-operator go to state 691 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
555 placeholder-type-specifier → type-constraint-opt "decltype" "(" "auto" • ")" ")" shift, and go to state 915
390 linkage-specification → "extern" string-literal "{" declaration-seq-opt "}" • $default reduce using rule 390 (linkage-specification)
5 ELLIPSIS-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 6 | • "..." 29 abstract-declarator → • ptr-abstract-declarator 30 | • noptr-abstract-declarator-opt parameters-and-qualifiers trailing-return-type 31 | • abstract-pack-declarator 32 abstract-declarator-opt → • %empty [",", "...", "=", ")", ">"] 33 | • abstract-declarator 34 abstract-pack-declarator → • noptr-abstract-pack-declarator 35 | • ptr-operator abstract-pack-declarator 137 class-name → • IDENTIFIER 138 | • simple-template-id 211 declarator → • ptr-declarator 212 | • noptr-declarator parameters-and-qualifiers trailing-return-type 213 declarator-id → • ELLIPSIS-opt id-expression 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 482 noptr-abstract-declarator → • noptr-abstract-declarator-opt parameters-and-qualifiers 483 | • noptr-abstract-declarator-opt "[" constant-expression-opt "]" attribute-specifier-seq-opt 484 | • "(" ptr-abstract-declarator ")" 485 noptr-abstract-declarator-opt → • %empty ["(", "["] 486 | • noptr-abstract-declarator 487 noptr-abstract-pack-declarator → • noptr-abstract-pack-declarator parameters-and-qualifiers 488 | • noptr-abstract-pack-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 489 | • "..." 490 noptr-declarator → • declarator-id attribute-specifier-seq-opt 491 | • noptr-declarator parameters-and-qualifiers 492 | • noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 493 | • "(" ptr-declarator ")" 543 parameter-declaration → attribute-specifier-seq-opt THIS-opt decl-specifier-seq • declarator 544 | attribute-specifier-seq-opt THIS-opt decl-specifier-seq • declarator "=" initializer-clause 545 | attribute-specifier-seq-opt THIS-opt decl-specifier-seq • abstract-declarator-opt 546 | attribute-specifier-seq-opt THIS-opt decl-specifier-seq • abstract-declarator-opt "=" initializer-clause 587 ptr-abstract-declarator → • noptr-abstract-declarator 588 | • ptr-operator ptr-abstract-declarator-opt 591 ptr-declarator → • noptr-declarator 592 | • ptr-operator ptr-declarator 593 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 594 | • "&" attribute-specifier-seq-opt 595 | • "&&" attribute-specifier-seq-opt 596 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id "..." shift, and go to state 916 IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 917 "&" shift, and go to state 160 "&&" shift, and go to state 163 "decltype" shift, and go to state 21 "*" shift, and go to state 164 "..." [reduce using rule 32 (abstract-declarator-opt)] IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "::" [reduce using rule 5 (ELLIPSIS-opt)] "(" [reduce using rule 485 (noptr-abstract-declarator-opt)] "[" reduce using rule 485 (noptr-abstract-declarator-opt) "operator" reduce using rule 5 (ELLIPSIS-opt) "decltype" [reduce using rule 5 (ELLIPSIS-opt)] "~" reduce using rule 5 (ELLIPSIS-opt) $default reduce using rule 32 (abstract-declarator-opt) ELLIPSIS-opt go to state 165 abstract-declarator go to state 684 abstract-declarator-opt go to state 918 abstract-pack-declarator go to state 686 class-name go to state 55 declarator go to state 919 declarator-id go to state 171 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 187 noptr-abstract-declarator go to state 687 noptr-abstract-declarator-opt go to state 688 noptr-abstract-pack-declarator go to state 689 noptr-declarator go to state 173 ptr-abstract-declarator go to state 690 ptr-declarator go to state 174 ptr-operator go to state 920 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
11 IDENTIFIER-opt → • %empty [",", ">"] 12 | • IDENTIFIER 720 type-parameter → template-head type-parameter-key ELLIPSIS-opt • IDENTIFIER-opt IDENTIFIER shift, and go to state 427 $default reduce using rule 11 (IDENTIFIER-opt) IDENTIFIER-opt go to state 921
721 type-parameter → template-head type-parameter-key IDENTIFIER-opt • "=" id-expression "=" shift, and go to state 922
700 template-parameter-list → template-parameter-list "," template-parameter • $default reduce using rule 700 (template-parameter-list)
623 requires-clause-opt → requires-clause • $default reduce using rule 623 (requires-clause-opt)
692 template-head → "template" "<" template-parameter-list ">" requires-clause-opt • $default reduce using rule 692 (template-head)
718 type-parameter → type-constraint ELLIPSIS-opt IDENTIFIER-opt • $default reduce using rule 718 (type-parameter)
134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 712 type-id → • type-specifier-seq abstract-declarator-opt 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 719 type-parameter → type-constraint IDENTIFIER-opt "=" • type-id 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 729 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 730 | • type-specifier type-specifier-seq 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "typename" shift, and go to state 8 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 125 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] $default reduce using rule 710 (type-constraint-opt) class-key go to state 406 class-name go to state 55 cv-qualifier go to state 57 decltype-specifier go to state 63 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 923 type-name go to state 106 type-specifier go to state 414 type-specifier-seq go to state 415 typedef-name go to state 108 typename-specifier go to state 109
716 type-parameter → type-parameter-key ELLIPSIS-opt IDENTIFIER-opt • $default reduce using rule 716 (type-parameter)
134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 712 type-id → • type-specifier-seq abstract-declarator-opt 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 717 type-parameter → type-parameter-key IDENTIFIER-opt "=" • type-id 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 729 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 730 | • type-specifier type-specifier-seq 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "typename" shift, and go to state 8 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 125 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] $default reduce using rule 710 (type-constraint-opt) class-key go to state 406 class-name go to state 55 cv-qualifier go to state 57 decltype-specifier go to state 63 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 924 type-name go to state 106 type-specifier go to state 414 type-specifier-seq go to state 415 typedef-name go to state 108 typename-specifier go to state 109
44 alias-declaration → "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id • ";" ";" shift, and go to state 925
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["...", IDENTIFIER, "::", ";", "alignas", "(", "&", "[", "&&", "decltype", "*"] 84 | • attribute-specifier-seq 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 220 defining-type-specifier-seq → • defining-type-specifier attribute-specifier-seq-opt 220 | defining-type-specifier • attribute-specifier-seq-opt 221 | • defining-type-specifier defining-type-specifier-seq 221 | defining-type-specifier • defining-type-specifier-seq 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "typename" shift, and go to state 8 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 926 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decltype-specifier go to state 63 defining-type-specifier go to state 705 defining-type-specifier-seq go to state 927 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 154 enum-name go to state 71 enum-specifier go to state 72 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109
29 abstract-declarator → • ptr-abstract-declarator 30 | • noptr-abstract-declarator-opt parameters-and-qualifiers trailing-return-type 31 | • abstract-pack-declarator 32 abstract-declarator-opt → • %empty [";"] 33 | • abstract-declarator 34 abstract-pack-declarator → • noptr-abstract-pack-declarator 35 | • ptr-operator abstract-pack-declarator 137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 216 defining-type-id → defining-type-specifier-seq • abstract-declarator-opt 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 482 noptr-abstract-declarator → • noptr-abstract-declarator-opt parameters-and-qualifiers 483 | • noptr-abstract-declarator-opt "[" constant-expression-opt "]" attribute-specifier-seq-opt 484 | • "(" ptr-abstract-declarator ")" 485 noptr-abstract-declarator-opt → • %empty ["(", "["] 486 | • noptr-abstract-declarator 487 noptr-abstract-pack-declarator → • noptr-abstract-pack-declarator parameters-and-qualifiers 488 | • noptr-abstract-pack-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 489 | • "..." 587 ptr-abstract-declarator → • noptr-abstract-declarator 588 | • ptr-operator ptr-abstract-declarator-opt 593 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 594 | • "&" attribute-specifier-seq-opt 595 | • "&&" attribute-specifier-seq-opt 596 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id "..." shift, and go to state 682 IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 683 "&" shift, and go to state 160 "&&" shift, and go to state 163 "decltype" shift, and go to state 21 "*" shift, and go to state 164 "(" [reduce using rule 485 (noptr-abstract-declarator-opt)] "[" reduce using rule 485 (noptr-abstract-declarator-opt) $default reduce using rule 32 (abstract-declarator-opt) abstract-declarator go to state 684 abstract-declarator-opt go to state 928 abstract-pack-declarator go to state 686 class-name go to state 55 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 187 noptr-abstract-declarator go to state 687 noptr-abstract-declarator-opt go to state 688 noptr-abstract-pack-declarator go to state 689 ptr-abstract-declarator go to state 690 ptr-operator go to state 691 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
766 using-declarator-list → using-declarator-list "," using-declarator ELLIPSIS-opt • $default reduce using rule 766 (using-declarator-list)
278 expression → expression • "," assignment-expression 477 noexcept-expression → "noexcept" "(" expression • ")" "," shift, and go to state 534 ")" shift, and go to state 929
317 fold-operator → "," • $default reduce using rule 317 (fold-operator)
288 fold-operator → "+" • $default reduce using rule 288 (fold-operator)
289 fold-operator → "-" • $default reduce using rule 289 (fold-operator)
308 fold-operator → "=" • $default reduce using rule 308 (fold-operator)
294 fold-operator → "&" • $default reduce using rule 294 (fold-operator)
300 fold-operator → "*=" • $default reduce using rule 300 (fold-operator)
301 fold-operator → "/=" • $default reduce using rule 301 (fold-operator)
302 fold-operator → "%=" • $default reduce using rule 302 (fold-operator)
298 fold-operator → "+=" • $default reduce using rule 298 (fold-operator)
299 fold-operator → "-=" • $default reduce using rule 299 (fold-operator)
307 fold-operator → ">>=" • $default reduce using rule 307 (fold-operator)
306 fold-operator → "<<=" • $default reduce using rule 306 (fold-operator)
304 fold-operator → "&=" • $default reduce using rule 304 (fold-operator)
303 fold-operator → "^=" • $default reduce using rule 303 (fold-operator)
305 fold-operator → "|=" • $default reduce using rule 305 (fold-operator)
315 fold-operator → "&&" • $default reduce using rule 315 (fold-operator)
316 fold-operator → "||" • $default reduce using rule 316 (fold-operator)
309 fold-operator → "==" • $default reduce using rule 309 (fold-operator)
310 fold-operator → "!=" • $default reduce using rule 310 (fold-operator)
293 fold-operator → "^" • $default reduce using rule 293 (fold-operator)
311 fold-operator → "<" • $default reduce using rule 311 (fold-operator)
312 fold-operator → ">" • $default reduce using rule 312 (fold-operator)
290 fold-operator → "*" • $default reduce using rule 290 (fold-operator)
291 fold-operator → "/" • $default reduce using rule 291 (fold-operator)
292 fold-operator → "%" • $default reduce using rule 292 (fold-operator)
295 fold-operator → "|" • $default reduce using rule 295 (fold-operator)
296 fold-operator → "<<" • $default reduce using rule 296 (fold-operator)
297 fold-operator → ">>" • $default reduce using rule 297 (fold-operator)
313 fold-operator → "<=" • $default reduce using rule 313 (fold-operator)
314 fold-operator → ">=" • $default reduce using rule 314 (fold-operator)
318 fold-operator → ".*" • $default reduce using rule 318 (fold-operator)
319 fold-operator → "->*" • $default reduce using rule 319 (fold-operator)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 286 | "(" "..." fold-operator • cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 await-expression go to state 269 cast-expression go to state 930 class-name go to state 55 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 fold-expression go to state 278 id-expression go to state 279 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 requires-expression go to state 296 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306
285 fold-expression → "(" cast-expression fold-operator • "..." ")" 287 | "(" cast-expression fold-operator • "..." fold-operator cast-expression ")" "..." shift, and go to state 931
579 primary-expression → "(" expression ")" • $default reduce using rule 579 (primary-expression)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 130 | "(" type-id ")" • cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 await-expression go to state 269 cast-expression go to state 932 class-name go to state 55 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 fold-expression go to state 278 id-expression go to state 279 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 requires-expression go to state 296 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306
636 simple-capture → IDENTIFIER ELLIPSIS-opt • $default reduce using rule 636 (simple-capture)
5 ELLIPSIS-opt → • %empty [",", "]"] 6 | • "..." 637 simple-capture → "&" IDENTIFIER • ELLIPSIS-opt "..." shift, and go to state 156 $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 933
347 init-capture → "&" ELLIPSIS-opt • IDENTIFIER initializer IDENTIFIER shift, and go to state 934
639 simple-capture → "*" "this" • $default reduce using rule 639 (simple-capture)
116 brace-or-equal-initializer → • "=" initializer-clause 117 | • braced-init-list 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 346 init-capture → ELLIPSIS-opt IDENTIFIER • initializer 359 initializer → • brace-or-equal-initializer 360 | • "(" expression-list ")" "=" shift, and go to state 378 "(" shift, and go to state 379 "{" shift, and go to state 380 brace-or-equal-initializer go to state 382 braced-init-list go to state 383 initializer go to state 935
5 ELLIPSIS-opt → • %empty [IDENTIFIER] 6 | • "..." 123 capture → • simple-capture 124 | • init-capture 127 capture-list → • capture 128 | • capture-list "," capture 346 init-capture → • ELLIPSIS-opt IDENTIFIER initializer 347 | • "&" ELLIPSIS-opt IDENTIFIER initializer 381 lambda-capture → capture-default "," • capture-list 636 simple-capture → • IDENTIFIER ELLIPSIS-opt 637 | • "&" IDENTIFIER ELLIPSIS-opt 638 | • "this" 639 | • "*" "this" "..." shift, and go to state 156 IDENTIFIER shift, and go to state 443 "this" shift, and go to state 444 "&" shift, and go to state 936 "*" shift, and go to state 447 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] ELLIPSIS-opt go to state 448 capture go to state 449 capture-list go to state 937 init-capture go to state 452 simple-capture go to state 455
5 ELLIPSIS-opt → • %empty [IDENTIFIER] 6 | • "..." 123 capture → • simple-capture 124 | • init-capture 128 capture-list → capture-list "," • capture 346 init-capture → • ELLIPSIS-opt IDENTIFIER initializer 347 | • "&" ELLIPSIS-opt IDENTIFIER initializer 636 simple-capture → • IDENTIFIER ELLIPSIS-opt 637 | • "&" IDENTIFIER ELLIPSIS-opt 638 | • "this" 639 | • "*" "this" "..." shift, and go to state 156 IDENTIFIER shift, and go to state 443 "this" shift, and go to state 444 "&" shift, and go to state 936 "*" shift, and go to state 447 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] ELLIPSIS-opt go to state 448 capture go to state 938 init-capture go to state 452 simple-capture go to state 455
388 lambda-introducer → "[" lambda-capture-opt "]" • $default reduce using rule 388 (lambda-introducer)
504 overloadable-operator → "(" ")" • $default reduce using rule 504 (overloadable-operator)
505 overloadable-operator → "[" "]" • $default reduce using rule 505 (overloadable-operator)
502 overloadable-operator → "delete" "[" • "]" "]" shift, and go to state 939
501 overloadable-operator → "new" "[" • "]" "]" shift, and go to state 940
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 158 constant-expression → • conditional-expression 169 conversion-function-id → • "operator" conversion-type-id 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 498 | "operator" overloadable-operator "<" • template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 683 template-argument → • constant-expression 684 | • type-id 685 | • id-expression 686 template-argument-list → • template-argument ELLIPSIS-opt 687 | • template-argument-list "," template-argument ELLIPSIS-opt 688 template-argument-list-opt → • %empty [">"] 689 | • template-argument-list 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 712 type-id → • type-specifier-seq abstract-declarator-opt 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 729 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 730 | • type-specifier type-specifier-seq 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "operator" shift, and go to state 249 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 125 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] ">" reduce using rule 688 (template-argument-list-opt) "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 await-expression go to state 269 cast-expression go to state 270 class-key go to state 406 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 309 constant-expression go to state 407 conversion-function-id go to state 273 cv-qualifier go to state 57 decltype-specifier go to state 63 delete-expression go to state 274 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 fold-expression go to state 278 id-expression go to state 408 inclusive-or-expression go to state 280 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 311 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 409 string-literal go to state 300 template-argument go to state 410 template-argument-list go to state 411 template-argument-list-opt go to state 941 template-id go to state 301 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 413 type-name go to state 106 type-specifier go to state 414 type-specifier-seq go to state 415 typedef-name go to state 108 typename-specifier go to state 416 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306
392 literal-operator-id → "operator" string-literal IDENTIFIER • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 735 ud-suffix → IDENTIFIER • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] "," reduce using rule 392 (literal-operator-id) "," [reduce using rule 735 (ud-suffix)] "constexpr" reduce using rule 392 (literal-operator-id) "constexpr" [reduce using rule 735 (ud-suffix)] "..." reduce using rule 392 (literal-operator-id) "..." [reduce using rule 735 (ud-suffix)] "export" reduce using rule 392 (literal-operator-id) "export" [reduce using rule 735 (ud-suffix)] "extern" reduce using rule 392 (literal-operator-id) "extern" [reduce using rule 735 (ud-suffix)] IDENTIFIER reduce using rule 392 (literal-operator-id) IDENTIFIER [reduce using rule 735 (ud-suffix)] "inline" reduce using rule 392 (literal-operator-id) "inline" [reduce using rule 735 (ud-suffix)] "noexcept" reduce using rule 392 (literal-operator-id) "noexcept" [reduce using rule 735 (ud-suffix)] "::" reduce using rule 392 (literal-operator-id) "::" [reduce using rule 735 (ud-suffix)] "template" reduce using rule 392 (literal-operator-id) "template" [reduce using rule 735 (ud-suffix)] "typename" reduce using rule 392 (literal-operator-id) "typename" [reduce using rule 735 (ud-suffix)] "virtual" reduce using rule 392 (literal-operator-id) "virtual" [reduce using rule 735 (ud-suffix)] "+" reduce using rule 392 (literal-operator-id) "+" [reduce using rule 735 (ud-suffix)] "-" reduce using rule 392 (literal-operator-id) "-" [reduce using rule 735 (ud-suffix)] "using" reduce using rule 392 (literal-operator-id) "using" [reduce using rule 735 (ud-suffix)] "=" reduce using rule 392 (literal-operator-id) "=" [reduce using rule 735 (ud-suffix)] ";" reduce using rule 392 (literal-operator-id) ";" [reduce using rule 735 (ud-suffix)] "alignas" reduce using rule 392 (literal-operator-id) "alignas" [reduce using rule 735 (ud-suffix)] "(" reduce using rule 392 (literal-operator-id) "(" [reduce using rule 735 (ud-suffix)] ")" reduce using rule 392 (literal-operator-id) ")" [reduce using rule 735 (ud-suffix)] "&" reduce using rule 392 (literal-operator-id) "&" [reduce using rule 735 (ud-suffix)] "asm" reduce using rule 392 (literal-operator-id) "asm" [reduce using rule 735 (ud-suffix)] "*=" reduce using rule 392 (literal-operator-id) "*=" [reduce using rule 735 (ud-suffix)] "/=" reduce using rule 392 (literal-operator-id) "/=" [reduce using rule 735 (ud-suffix)] "%=" reduce using rule 392 (literal-operator-id) "%=" [reduce using rule 735 (ud-suffix)] "+=" reduce using rule 392 (literal-operator-id) "+=" [reduce using rule 735 (ud-suffix)] "-=" reduce using rule 392 (literal-operator-id) "-=" [reduce using rule 735 (ud-suffix)] ">>=" reduce using rule 392 (literal-operator-id) ">>=" [reduce using rule 735 (ud-suffix)] "<<=" reduce using rule 392 (literal-operator-id) "<<=" [reduce using rule 735 (ud-suffix)] "&=" reduce using rule 392 (literal-operator-id) "&=" [reduce using rule 735 (ud-suffix)] "^=" reduce using rule 392 (literal-operator-id) "^=" [reduce using rule 735 (ud-suffix)] "|=" reduce using rule 392 (literal-operator-id) "|=" [reduce using rule 735 (ud-suffix)] "[" reduce using rule 392 (literal-operator-id) "[" [reduce using rule 735 (ud-suffix)] "]" reduce using rule 392 (literal-operator-id) "]" [reduce using rule 735 (ud-suffix)] ":" reduce using rule 392 (literal-operator-id) ":" [reduce using rule 735 (ud-suffix)] "{" reduce using rule 392 (literal-operator-id) "{" [reduce using rule 735 (ud-suffix)] "}" reduce using rule 392 (literal-operator-id) "}" [reduce using rule 735 (ud-suffix)] "class" reduce using rule 392 (literal-operator-id) "class" [reduce using rule 735 (ud-suffix)] "struct" reduce using rule 392 (literal-operator-id) "struct" [reduce using rule 735 (ud-suffix)] "union" reduce using rule 392 (literal-operator-id) "union" [reduce using rule 735 (ud-suffix)] "final" reduce using rule 392 (literal-operator-id) "final" [reduce using rule 735 (ud-suffix)] "<=>" reduce using rule 392 (literal-operator-id) "<=>" [reduce using rule 735 (ud-suffix)] "concept" reduce using rule 392 (literal-operator-id) "concept" [reduce using rule 735 (ud-suffix)] "?" reduce using rule 392 (literal-operator-id) "?" [reduce using rule 735 (ud-suffix)] "&&" reduce using rule 392 (literal-operator-id) "&&" [reduce using rule 735 (ud-suffix)] "||" reduce using rule 392 (literal-operator-id) "||" [reduce using rule 735 (ud-suffix)] "operator" reduce using rule 392 (literal-operator-id) "operator" [reduce using rule 735 (ud-suffix)] "const" reduce using rule 392 (literal-operator-id) "const" [reduce using rule 735 (ud-suffix)] "volatile" reduce using rule 392 (literal-operator-id) "volatile" [reduce using rule 735 (ud-suffix)] "friend" reduce using rule 392 (literal-operator-id) "friend" [reduce using rule 735 (ud-suffix)] "typedef" reduce using rule 392 (literal-operator-id) "typedef" [reduce using rule 735 (ud-suffix)] "consteval" reduce using rule 392 (literal-operator-id) "consteval" [reduce using rule 735 (ud-suffix)] "constinit" reduce using rule 392 (literal-operator-id) "constinit" [reduce using rule 735 (ud-suffix)] "decltype" reduce using rule 392 (literal-operator-id) "decltype" [reduce using rule 735 (ud-suffix)] "->" reduce using rule 392 (literal-operator-id) "->" [reduce using rule 735 (ud-suffix)] "." reduce using rule 392 (literal-operator-id) "." [reduce using rule 735 (ud-suffix)] "enum" reduce using rule 392 (literal-operator-id) "enum" [reduce using rule 735 (ud-suffix)] "==" reduce using rule 392 (literal-operator-id) "==" [reduce using rule 735 (ud-suffix)] "!=" reduce using rule 392 (literal-operator-id) "!=" [reduce using rule 735 (ud-suffix)] "^" reduce using rule 392 (literal-operator-id) "^" [reduce using rule 735 (ud-suffix)] "<" reduce using rule 392 (literal-operator-id) "<" [reduce using rule 735 (ud-suffix)] ">" reduce using rule 392 (literal-operator-id) ">" [reduce using rule 735 (ud-suffix)] "explicit" reduce using rule 392 (literal-operator-id) "explicit" [reduce using rule 735 (ud-suffix)] "*" reduce using rule 392 (literal-operator-id) "*" [reduce using rule 735 (ud-suffix)] "/" reduce using rule 392 (literal-operator-id) "/" [reduce using rule 735 (ud-suffix)] "%" reduce using rule 392 (literal-operator-id) "%" [reduce using rule 735 (ud-suffix)] "|" reduce using rule 392 (literal-operator-id) "|" [reduce using rule 735 (ud-suffix)] "<<" reduce using rule 392 (literal-operator-id) "<<" [reduce using rule 735 (ud-suffix)] ">>" reduce using rule 392 (literal-operator-id) ">>" [reduce using rule 735 (ud-suffix)] "<=" reduce using rule 392 (literal-operator-id) "<=" [reduce using rule 735 (ud-suffix)] ">=" reduce using rule 392 (literal-operator-id) ">=" [reduce using rule 735 (ud-suffix)] ".*" reduce using rule 392 (literal-operator-id) ".*" [reduce using rule 735 (ud-suffix)] "->*" reduce using rule 392 (literal-operator-id) "->*" [reduce using rule 735 (ud-suffix)] "try" reduce using rule 392 (literal-operator-id) "try" [reduce using rule 735 (ud-suffix)] "import" reduce using rule 392 (literal-operator-id) "import" [reduce using rule 735 (ud-suffix)] "namespace" reduce using rule 392 (literal-operator-id) "namespace" [reduce using rule 735 (ud-suffix)] "requires" reduce using rule 392 (literal-operator-id) "requires" [reduce using rule 735 (ud-suffix)] "~" reduce using rule 392 (literal-operator-id) "~" [reduce using rule 735 (ud-suffix)] "++" reduce using rule 392 (literal-operator-id) "++" [reduce using rule 735 (ud-suffix)] "--" reduce using rule 392 (literal-operator-id) "--" [reduce using rule 735 (ud-suffix)] "auto" reduce using rule 392 (literal-operator-id) "auto" [reduce using rule 735 (ud-suffix)] "char" reduce using rule 392 (literal-operator-id) "char" [reduce using rule 735 (ud-suffix)] "char8_t" reduce using rule 392 (literal-operator-id) "char8_t" [reduce using rule 735 (ud-suffix)] "char16_t" reduce using rule 392 (literal-operator-id) "char16_t" [reduce using rule 735 (ud-suffix)] "char32_t" reduce using rule 392 (literal-operator-id) "char32_t" [reduce using rule 735 (ud-suffix)] "wchar_t" reduce using rule 392 (literal-operator-id) "wchar_t" [reduce using rule 735 (ud-suffix)] "bool" reduce using rule 392 (literal-operator-id) "bool" [reduce using rule 735 (ud-suffix)] "short" reduce using rule 392 (literal-operator-id) "short" [reduce using rule 735 (ud-suffix)] "int" reduce using rule 392 (literal-operator-id) "int" [reduce using rule 735 (ud-suffix)] "long" reduce using rule 392 (literal-operator-id) "long" [reduce using rule 735 (ud-suffix)] "signed" reduce using rule 392 (literal-operator-id) "signed" [reduce using rule 735 (ud-suffix)] "unsigned" reduce using rule 392 (literal-operator-id) "unsigned" [reduce using rule 735 (ud-suffix)] "float" reduce using rule 392 (literal-operator-id) "float" [reduce using rule 735 (ud-suffix)] "double" reduce using rule 392 (literal-operator-id) "double" [reduce using rule 735 (ud-suffix)] "void" reduce using rule 392 (literal-operator-id) "void" [reduce using rule 735 (ud-suffix)] "static_assert" reduce using rule 392 (literal-operator-id) "static_assert" [reduce using rule 735 (ud-suffix)] "static" reduce using rule 392 (literal-operator-id) "static" [reduce using rule 735 (ud-suffix)] "thread_local" reduce using rule 392 (literal-operator-id) "thread_local" [reduce using rule 735 (ud-suffix)] "mutable" reduce using rule 392 (literal-operator-id) "mutable" [reduce using rule 735 (ud-suffix)] "override" reduce using rule 392 (literal-operator-id) "override" [reduce using rule 735 (ud-suffix)] $default reduce using rule 392 (literal-operator-id)
762 user-defined-string-literal → string-literal ud-suffix • $default reduce using rule 762 (user-defined-string-literal)
168 conversion-declarator-opt → conversion-declarator • $default reduce using rule 168 (conversion-declarator-opt)
170 conversion-type-id → type-specifier-seq conversion-declarator-opt • $default reduce using rule 170 (conversion-type-id)
137 class-name → • IDENTIFIER 138 | • simple-template-id 166 conversion-declarator → • ptr-operator conversion-declarator-opt 166 | ptr-operator • conversion-declarator-opt 167 conversion-declarator-opt → • %empty [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 168 | • conversion-declarator 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 593 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 594 | • "&" attribute-specifier-seq-opt 595 | • "&&" attribute-specifier-seq-opt 596 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "&" shift, and go to state 160 "&&" shift, and go to state 163 "decltype" shift, and go to state 21 "*" shift, and go to state 164 IDENTIFIER [reduce using rule 167 (conversion-declarator-opt)] "::" [reduce using rule 167 (conversion-declarator-opt)] "&" [reduce using rule 167 (conversion-declarator-opt)] "&&" [reduce using rule 167 (conversion-declarator-opt)] "decltype" [reduce using rule 167 (conversion-declarator-opt)] "*" [reduce using rule 167 (conversion-declarator-opt)] $default reduce using rule 167 (conversion-declarator-opt) class-name go to state 55 conversion-declarator go to state 760 conversion-declarator-opt go to state 942 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 187 ptr-operator go to state 762 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
616 requirement-parameter-list → "(" parameter-declaration-clause • ")" ")" shift, and go to state 943
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 148 compound-requirement → • "{" expression "}" NOEXCEPT-opt return-type-requirement-opt ";" 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 277 expression → • assignment-expression 278 | • expression "," assignment-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 461 nested-requirement → • "requires" constraint-expression ";" 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 611 requirement → • simple-requirement 612 | • type-requirement 613 | • compound-requirement 614 | • nested-requirement 615 requirement-body → "{" • requirement-seq "}" 619 requirement-seq → • requirement 620 | • requirement-seq requirement 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 643 simple-requirement → • expression ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 724 type-requirement → • "typename" nested-name-specifier-opt type-name ";" 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 944 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "{" shift, and go to state 945 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 946 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 261 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 "co_yield" shift, and go to state 264 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 assignment-expression go to state 268 await-expression go to state 269 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 compound-requirement go to state 947 conditional-expression go to state 272 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 expression go to state 948 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 285 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 nested-requirement go to state 949 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requirement go to state 950 requirement-seq go to state 951 requires-expression go to state 296 shift-expression go to state 297 simple-requirement go to state 952 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 throw-expression go to state 302 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-requirement go to state 953 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306 yield-expression go to state 307
624 requires-expression → "requires" requirement-parameter-list-opt requirement-body • $default reduce using rule 624 (requires-expression)
570 postfix-expression → "dynamic_cast" "<" type-id • ">" "(" expression ")" ">" shift, and go to state 954
571 postfix-expression → "static_cast" "<" type-id • ">" "(" expression ")" ">" shift, and go to state 955
572 postfix-expression → "reinterpret_cast" "<" type-id • ">" "(" expression ")" ">" shift, and go to state 956
573 postfix-expression → "const_cast" "<" type-id • ">" "(" expression ")" ">" shift, and go to state 957
278 expression → expression • "," assignment-expression 574 postfix-expression → "typeid" "(" expression • ")" "," shift, and go to state 534 ")" shift, and go to state 958
575 postfix-expression → "typeid" "(" type-id • ")" ")" shift, and go to state 959
743 unary-expression → "sizeof" "..." "(" • IDENTIFIER ")" IDENTIFIER shift, and go to state 960
742 unary-expression → "sizeof" "(" type-id • ")" ")" shift, and go to state 961
744 unary-expression → "alignof" "(" type-id • ")" ")" shift, and go to state 962
5 ELLIPSIS-opt → • %empty [IDENTIFIER] 6 | • "..." 123 capture → • simple-capture 124 | • init-capture 125 capture-default → • "&" 126 | • "=" 127 capture-list → • capture 128 | • capture-list "," capture 223 delete-expression → SCOPE-opt "delete" "[" • "]" cast-expression 346 init-capture → • ELLIPSIS-opt IDENTIFIER initializer 347 | • "&" ELLIPSIS-opt IDENTIFIER initializer 379 lambda-capture → • capture-default 380 | • capture-list 381 | • capture-default "," capture-list 382 lambda-capture-opt → • %empty ["]"] 383 | • lambda-capture 388 lambda-introducer → "[" • lambda-capture-opt "]" 636 simple-capture → • IDENTIFIER ELLIPSIS-opt 637 | • "&" IDENTIFIER ELLIPSIS-opt 638 | • "this" 639 | • "*" "this" "..." shift, and go to state 156 IDENTIFIER shift, and go to state 443 "this" shift, and go to state 444 "=" shift, and go to state 445 "&" shift, and go to state 446 "]" shift, and go to state 963 "*" shift, and go to state 447 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "]" [reduce using rule 382 (lambda-capture-opt)] ELLIPSIS-opt go to state 448 capture go to state 449 capture-default go to state 450 capture-list go to state 451 init-capture go to state 452 lambda-capture go to state 453 lambda-capture-opt go to state 454 simple-capture go to state 455
222 delete-expression → SCOPE-opt "delete" cast-expression • $default reduce using rule 222 (delete-expression)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 279 expression-list → • initializer-list 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 361 initializer-clause → • assignment-expression 362 | • braced-init-list 363 initializer-list → • initializer-clause ELLIPSIS-opt 364 | • initializer-list "," initializer-clause ELLIPSIS-opt 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 472 new-placement → "(" • expression-list ")" 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "{" shift, and go to state 380 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 261 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 "co_yield" shift, and go to state 264 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 assignment-expression go to state 642 await-expression go to state 269 braced-init-list go to state 643 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 272 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 expression-list go to state 964 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 initializer-clause go to state 646 initializer-list go to state 647 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 285 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 throw-expression go to state 302 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306 yield-expression go to state 307
474 new-placement-opt → new-placement • $default reduce using rule 474 (new-placement-opt)
134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → SCOPE-opt "new" new-placement-opt • new-type-id new-initializer-opt 467 | SCOPE-opt "new" new-placement-opt • "(" type-id ")" new-initializer-opt 475 new-type-id → • type-specifier-seq new-declarator-opt 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 729 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 730 | • type-specifier type-specifier-seq 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "typename" shift, and go to state 8 "(" shift, and go to state 965 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 125 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] $default reduce using rule 710 (type-constraint-opt) class-key go to state 406 class-name go to state 55 cv-qualifier go to state 57 decltype-specifier go to state 63 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 new-type-id go to state 966 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 414 type-specifier-seq go to state 967 typedef-name go to state 108 typename-specifier go to state 109
42 additive-expression → additive-expression "+" multiplicative-expression • [",", "...", "+", "-", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "|", "<<", ">>", "<=", ">="] 440 multiplicative-expression → multiplicative-expression • "*" pm-expression 441 | multiplicative-expression • "/" pm-expression 442 | multiplicative-expression • "%" pm-expression "*" shift, and go to state 559 "/" shift, and go to state 560 "%" shift, and go to state 561 $default reduce using rule 42 (additive-expression)
43 additive-expression → additive-expression "-" multiplicative-expression • [",", "...", "+", "-", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "|", "<<", ">>", "<=", ">="] 440 multiplicative-expression → multiplicative-expression • "*" pm-expression 441 | multiplicative-expression • "/" pm-expression 442 | multiplicative-expression • "%" pm-expression "*" shift, and go to state 559 "/" shift, and go to state 560 "%" shift, and go to state 561 $default reduce using rule 43 (additive-expression)
48 and-expression → and-expression "&" equality-expression • [",", "...", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "&&", "||", "^", ">", "|"] 257 equality-expression → equality-expression • "==" relational-expression 258 | equality-expression • "!=" relational-expression "==" shift, and go to state 531 "!=" shift, and go to state 532 $default reduce using rule 48 (and-expression)
147 compare-expression → compare-expression "<=>" shift-expression • [",", "...", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "|", "<=", ">="] 634 shift-expression → shift-expression • "<<" additive-expression 635 | shift-expression • ">>" additive-expression "<<" shift, and go to state 576 ">>" shift, and go to state 577 $default reduce using rule 147 (compare-expression)
257 equality-expression → equality-expression "==" relational-expression • [",", "...", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "&&", "||", "==", "!=", "^", "|"] 607 relational-expression → relational-expression • "<" compare-expression 608 | relational-expression • ">" compare-expression 609 | relational-expression • "<=" compare-expression 610 | relational-expression • ">=" compare-expression "<" shift, and go to state 572 ">" shift, and go to state 573 "<=" shift, and go to state 574 ">=" shift, and go to state 575 $default reduce using rule 257 (equality-expression) Conflict between rule 257 and token ">" resolved as shift ("==" < ">").
258 equality-expression → equality-expression "!=" relational-expression • [",", "...", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "&&", "||", "==", "!=", "^", "|"] 607 relational-expression → relational-expression • "<" compare-expression 608 | relational-expression • ">" compare-expression 609 | relational-expression • "<=" compare-expression 610 | relational-expression • ">=" compare-expression "<" shift, and go to state 572 ">" shift, and go to state 573 "<=" shift, and go to state 574 ">=" shift, and go to state 575 $default reduce using rule 258 (equality-expression) Conflict between rule 258 and token ">" resolved as shift ("!=" < ">").
48 and-expression → and-expression • "&" equality-expression 263 exclusive-or-expression → exclusive-or-expression "^" and-expression • [",", "...", "=", ";", ")", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "&&", "||", "^", ">", "|"] "&" shift, and go to state 529 $default reduce using rule 263 (exclusive-or-expression)
278 expression → expression "," assignment-expression • $default reduce using rule 278 (expression)
263 exclusive-or-expression → exclusive-or-expression • "^" and-expression 345 inclusive-or-expression → inclusive-or-expression "|" exclusive-or-expression • [",", "...", "=", ";", ")", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "&&", "||", ">", "|"] "^" shift, and go to state 533 $default reduce using rule 345 (inclusive-or-expression)
385 lambda-declarator → "(" parameter-declaration-clause • ")" lambda-specifiers requires-clause-opt ")" shift, and go to state 968
387 lambda-expression → lambda-introducer "<" template-parameter-list • ">" requires-clause-opt lambda-declarator compound-statement 700 template-parameter-list → template-parameter-list • "," template-parameter "," shift, and go to state 425 ">" shift, and go to state 969
478 noexcept-specifier → "noexcept" • "(" constant-expression ")" 479 | "noexcept" • [",", "...", "=", ";", "alignas", "(", ")", "[", ":", "{", "final", "->", ">", "try", "requires", "override"] "(" shift, and go to state 970 "(" [reduce using rule 479 (noexcept-specifier)] $default reduce using rule 479 (noexcept-specifier)
481 noexcept-specifier-opt → noexcept-specifier • $default reduce using rule 481 (noexcept-specifier-opt)
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 389 lambda-specifiers → decl-specifier-seq-opt noexcept-specifier-opt • attribute-specifier-seq-opt trailing-return-type-opt $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 971
44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "using", ";", "alignas", "(", "&", "asm", "[", "co_await", "{", "class", "struct", "union", "operator", "co_return", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", "*", "default", "try", "while", "do", "for", "break", "continue", "return", "goto", "case", "requires", "new", "~", "++", "--", "auto", "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "literal", "if", "switch", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", "co_yield"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 149 compound-statement → "{" • statement-seq-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 210 declaration-statement → • block-declaration 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 329 function-specifier → • "virtual" 330 | • explicit-specifier 376 labeled-statement → • attribute-specifier-seq-opt IDENTIFIER ":" statement 377 | • attribute-specifier-seq-opt "case" constant-expression ":" statement 378 | • attribute-specifier-seq-opt "default" ":" statement 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 664 statement → • labeled-statement 665 | • attribute-specifier-seq-opt expression-statement 666 | • attribute-specifier-seq-opt compound-statement 667 | • attribute-specifier-seq-opt selection-statement 668 | • attribute-specifier-seq-opt iteration-statement 669 | • attribute-specifier-seq-opt jump-statement 670 | • declaration-statement 671 | • attribute-specifier-seq-opt try-block 672 statement-seq → • statement 673 | • statement-seq statement 674 statement-seq-opt → • %empty ["}"] 675 | • statement-seq 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 151 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "namespace" shift, and go to state 972 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "}" reduce using rule 674 (statement-seq-opt) "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) alias-declaration go to state 47 asm-declaration go to state 48 attribute-specifier-seq go to state 973 attribute-specifier-seq-opt go to state 974 block-declaration go to state 975 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration-statement go to state 976 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 155 function-specifier go to state 79 labeled-statement go to state 977 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 statement go to state 978 statement-seq go to state 979 statement-seq-opt go to state 980 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
386 lambda-expression → lambda-introducer lambda-declarator compound-statement • $default reduce using rule 386 (lambda-expression)
695 template-id → literal-operator-id "<" template-argument-list-opt • ">" ">" shift, and go to state 981
345 inclusive-or-expression → inclusive-or-expression • "|" exclusive-or-expression 395 logical-and-expression → logical-and-expression "&&" inclusive-or-expression • [",", "...", "=", ";", ")", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "&&", "||", ">"] "|" shift, and go to state 536 $default reduce using rule 395 (logical-and-expression)
157 conditional-expression → logical-or-expression "?" expression • ":" assignment-expression 278 expression → expression • "," assignment-expression "," shift, and go to state 534 ":" shift, and go to state 982
395 logical-and-expression → logical-and-expression • "&&" inclusive-or-expression 397 logical-or-expression → logical-or-expression "||" logical-and-expression • [",", "...", "=", ";", ")", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "||", ">"] "&&" shift, and go to state 544 $default reduce using rule 397 (logical-or-expression)
53 assignment-expression → logical-or-expression assignment-operator initializer-clause • $default reduce using rule 53 (assignment-expression)
440 multiplicative-expression → multiplicative-expression "*" pm-expression • [",", "...", "+", "-", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "*", "/", "%", "|", "<<", ">>", "<=", ">="] 557 pm-expression → pm-expression • ".*" cast-expression 558 | pm-expression • "->*" cast-expression ".*" shift, and go to state 564 "->*" shift, and go to state 565 $default reduce using rule 440 (multiplicative-expression)
441 multiplicative-expression → multiplicative-expression "/" pm-expression • [",", "...", "+", "-", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "*", "/", "%", "|", "<<", ">>", "<=", ">="] 557 pm-expression → pm-expression • ".*" cast-expression 558 | pm-expression • "->*" cast-expression ".*" shift, and go to state 564 "->*" shift, and go to state 565 $default reduce using rule 441 (multiplicative-expression)
442 multiplicative-expression → multiplicative-expression "%" pm-expression • [",", "...", "+", "-", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "*", "/", "%", "|", "<<", ">>", "<=", ">="] 557 pm-expression → pm-expression • ".*" cast-expression 558 | pm-expression • "->*" cast-expression ".*" shift, and go to state 564 "->*" shift, and go to state 565 $default reduce using rule 442 (multiplicative-expression)
696 template-name → IDENTIFIER • ["<"] 755 unqualified-id → IDENTIFIER • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] "<" reduce using rule 696 (template-name) "<" [reduce using rule 755 (unqualified-id)] $default reduce using rule 755 (unqualified-id)
457 nested-name-specifier → nested-name-specifier TEMPLATE-opt simple-template-id • "::" 693 template-id → simple-template-id • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] "::" shift, and go to state 673 "::" [reduce using rule 693 (template-id)] $default reduce using rule 693 (template-id)
600 qualified-id → nested-name-specifier TEMPLATE-opt unqualified-id • $default reduce using rule 600 (qualified-id)
694 template-id → operator-function-id "<" template-argument-list-opt • ">" ">" shift, and go to state 983
557 pm-expression → pm-expression ".*" cast-expression • $default reduce using rule 557 (pm-expression)
558 pm-expression → pm-expression "->*" cast-expression • $default reduce using rule 558 (pm-expression)
281 expression-list-opt → expression-list • $default reduce using rule 281 (expression-list-opt)
561 postfix-expression → postfix-expression "(" expression-list-opt • ")" ")" shift, and go to state 984
560 postfix-expression → postfix-expression "[" expression-list-opt • "]" "]" shift, and go to state 985
137 class-name → • IDENTIFIER 138 | • simple-template-id 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 340 id-expression → • unqualified-id 341 | • qualified-id 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 567 postfix-expression → postfix-expression "->" TEMPLATE-opt • id-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "::" shift, and go to state 6 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "~" shift, and go to state 336 class-name go to state 55 conversion-function-id go to state 273 decltype-specifier go to state 121 enum-name go to state 71 id-expression go to state 986 literal-operator-id go to state 283 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 338 operator-function-id go to state 290 qualified-id go to state 294 simple-template-id go to state 298 template-id go to state 301 template-name go to state 102 type-name go to state 106 typedef-name go to state 108 unqualified-id go to state 306
137 class-name → • IDENTIFIER 138 | • simple-template-id 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 340 id-expression → • unqualified-id 341 | • qualified-id 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 566 postfix-expression → postfix-expression "." TEMPLATE-opt • id-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "::" shift, and go to state 6 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "~" shift, and go to state 336 class-name go to state 55 conversion-function-id go to state 273 decltype-specifier go to state 121 enum-name go to state 71 id-expression go to state 987 literal-operator-id go to state 283 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 338 operator-function-id go to state 290 qualified-id go to state 294 simple-template-id go to state 298 template-id go to state 301 template-name go to state 102 type-name go to state 106 typedef-name go to state 108 unqualified-id go to state 306
147 compare-expression → compare-expression • "<=>" shift-expression 607 relational-expression → relational-expression "<" compare-expression • [",", "...", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "&&", "||", "==", "!=", "^", "<", ">", "|", "<=", ">="] "<=>" shift, and go to state 530 $default reduce using rule 607 (relational-expression)
147 compare-expression → compare-expression • "<=>" shift-expression 608 relational-expression → relational-expression ">" compare-expression • [",", "...", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "&&", "||", "==", "!=", "^", "<", ">", "|", "<=", ">="] "<=>" shift, and go to state 530 $default reduce using rule 608 (relational-expression)
147 compare-expression → compare-expression • "<=>" shift-expression 609 relational-expression → relational-expression "<=" compare-expression • [",", "...", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "&&", "||", "==", "!=", "^", "<", ">", "|", "<=", ">="] "<=>" shift, and go to state 530 $default reduce using rule 609 (relational-expression)
147 compare-expression → compare-expression • "<=>" shift-expression 610 relational-expression → relational-expression ">=" compare-expression • [",", "...", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "&&", "||", "==", "!=", "^", "<", ">", "|", "<=", ">="] "<=>" shift, and go to state 530 $default reduce using rule 610 (relational-expression)
42 additive-expression → additive-expression • "+" multiplicative-expression 43 | additive-expression • "-" multiplicative-expression 634 shift-expression → shift-expression "<<" additive-expression • [",", "...", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "|", "<<", ">>", "<=", ">="] "+" shift, and go to state 527 "-" shift, and go to state 528 $default reduce using rule 634 (shift-expression)
42 additive-expression → additive-expression • "+" multiplicative-expression 43 | additive-expression • "-" multiplicative-expression 635 shift-expression → shift-expression ">>" additive-expression • [",", "...", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "|", "<<", ">>", "<=", ">="] "+" shift, and go to state 527 "-" shift, and go to state 528 $default reduce using rule 635 (shift-expression)
562 postfix-expression → simple-type-specifier "(" expression-list-opt • ")" ")" shift, and go to state 988
563 postfix-expression → typename-specifier "(" expression-list-opt • ")" ")" shift, and go to state 989
444 namespace-alias → IDENTIFIER • [";"] 450 namespace-name → IDENTIFIER • [";"] ";" reduce using rule 444 (namespace-alias) ";" [reduce using rule 450 (namespace-name)] $default reduce using rule 444 (namespace-alias)
601 qualified-namespace-specifier → nested-name-specifier-opt namespace-name • $default reduce using rule 601 (qualified-namespace-specifier)
445 namespace-alias-definition → "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" • $default reduce using rule 445 (namespace-alias-definition)
235 enclosing-namespace-specifier → enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER • ["::"] 460 nested-namespace-definition → "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER • "{" namespace-body "}" "{" shift, and go to state 990 $default reduce using rule 235 (enclosing-namespace-specifier)
677 static_assert-declaration → "static_assert" "(" constant-expression "," string-literal • ")" ";" ")" shift, and go to state 991
676 static_assert-declaration → "static_assert" "(" constant-expression ")" ";" • $default reduce using rule 676 (static_assert-declaration)
9 EXTERN-opt → • %empty ["template"] 10 | • "extern" 13 INLINE-opt → • %empty ["namespace"] 14 | • "inline" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 71 attribute-declaration → • attribute-specifier-seq ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "using", "alignas", "(", "&", "asm", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 193 declaration → • block-declaration 194 | • nodeclspec-function-declaration 195 | • function-definition 196 | • template-declaration 197 | • deduction-guide 198 | • explicit-instantiation 199 | • explicit-specialization 200 | • export-declaration 201 | • linkage-specification 202 | • namespace-definition 203 | • empty-declaration 204 | • attribute-declaration 205 | • module-import-declaration 206 declaration-seq → • declaration 207 | • declaration-seq declaration 208 declaration-seq-opt → • %empty ["}"] 209 | • declaration-seq 214 decltype-specifier → • "decltype" "(" expression ")" 215 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 233 empty-declaration → • ";" 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 264 explicit-instantiation → • EXTERN-opt "template" declaration 265 explicit-specialization → • "template" "<" ">" declaration 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 268 explicit-specifier-opt → • %empty [IDENTIFIER] 269 | • explicit-specifier 270 export-declaration → • "export" declaration 271 | • "export" "{" declaration-seq-opt "}" 272 | • "export" module-import-declaration 327 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 328 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 329 function-specifier → • "virtual" 330 | • explicit-specifier 390 linkage-specification → • "extern" string-literal "{" declaration-seq-opt "}" 391 | • "extern" string-literal declaration 428 module-import-declaration → • "import" module-name attribute-specifier-seq-opt ";" 429 | • "import" module-partition attribute-specifier-seq-opt ";" 430 | • "import" header-name attribute-specifier-seq-opt ";" 443 named-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 443 | INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" • namespace-body "}" 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 446 namespace-body → • declaration-seq-opt 447 namespace-definition → • named-namespace-definition 448 | • unnamed-namespace-definition 449 | • nested-namespace-definition 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 460 nested-namespace-definition → • "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" 476 nodeclspec-function-declaration → • attribute-specifier-seq-opt declarator ";" 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 690 template-declaration → • template-head declaration 691 | • template-head concept-definition 692 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 754 unnamed-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body "}" 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "export" shift, and go to state 2 "extern" shift, and go to state 3 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 5 "::" shift, and go to state 6 "template" shift, and go to state 7 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 ";" shift, and go to state 11 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "import" shift, and go to state 25 "namespace" shift, and go to state 26 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 268 (explicit-specifier-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "template" [reduce using rule 9 (EXTERN-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "}" reduce using rule 208 (declaration-seq-opt) "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "namespace" [reduce using rule 13 (INLINE-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) EXTERN-opt go to state 45 INLINE-opt go to state 46 alias-declaration go to state 47 asm-declaration go to state 48 attribute-declaration go to state 49 attribute-specifier-seq go to state 50 attribute-specifier-seq-opt go to state 51 block-declaration go to state 52 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration go to state 60 declaration-seq go to state 61 declaration-seq-opt go to state 830 decltype-specifier go to state 63 deduction-guide go to state 64 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 empty-declaration go to state 68 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-instantiation go to state 73 explicit-specialization go to state 74 explicit-specifier go to state 75 explicit-specifier-opt go to state 76 export-declaration go to state 77 function-definition go to state 78 function-specifier go to state 79 linkage-specification go to state 82 module-import-declaration go to state 83 named-namespace-definition go to state 84 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-body go to state 992 namespace-definition go to state 87 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 nested-namespace-definition go to state 91 nodeclspec-function-declaration go to state 92 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-declaration go to state 100 template-head go to state 101 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 unnamed-namespace-definition go to state 110 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
446 namespace-body → declaration-seq-opt • $default reduce using rule 446 (namespace-body)
754 unnamed-namespace-definition → INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body • "}" "}" shift, and go to state 993
767 using-directive → attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name • ";" ";" shift, and go to state 994
46 alignment-specifier → "alignas" "(" constant-expression ELLIPSIS-opt • ")" ")" shift, and go to state 995
45 alignment-specifier → "alignas" "(" type-id ELLIPSIS-opt • ")" ")" shift, and go to state 996
49 asm-declaration → attribute-specifier-seq-opt "asm" "(" string-literal ")" • ";" ";" shift, and go to state 997
76 attribute-namespace → IDENTIFIER • $default reduce using rule 76 (attribute-namespace)
87 attribute-using-prefix → "using" attribute-namespace • ":" ":" shift, and go to state 998
76 attribute-namespace → IDENTIFIER • ["::"] 85 attribute-token → IDENTIFIER • [",", "...", "(", "]"] "::" reduce using rule 76 (attribute-namespace) $default reduce using rule 85 (attribute-token)
74 attribute-list → attribute • "..." 78 attribute-opt → attribute • [",", "]"] "..." shift, and go to state 999 $default reduce using rule 78 (attribute-opt)
73 attribute-list → attribute-list • "," attribute-opt 75 | attribute-list • "," attribute "..." 80 attribute-specifier → "[" "[" attribute-using-prefix-opt attribute-list • "]" "]" "," shift, and go to state 1000 "]" shift, and go to state 1001
79 attribute-scoped-token → attribute-namespace • "::" IDENTIFIER "::" shift, and go to state 1002
72 attribute-list → attribute-opt • $default reduce using rule 72 (attribute-list)
86 attribute-token → attribute-scoped-token • $default reduce using rule 86 (attribute-token)
67 attribute → attribute-token • attribute-argument-clause-opt 68 attribute-argument-clause → • "(" balanced-token-seq-opt ")" 69 attribute-argument-clause-opt → • %empty [",", "...", "]"] 70 | • attribute-argument-clause "(" shift, and go to state 1003 $default reduce using rule 69 (attribute-argument-clause-opt) attribute-argument-clause go to state 1004 attribute-argument-clause-opt go to state 1005
177 cv-qualifier-seq → cv-qualifier cv-qualifier-seq-opt • $default reduce using rule 177 (cv-qualifier-seq)
342 identifier-list → IDENTIFIER • $default reduce using rule 342 (identifier-list)
343 identifier-list → identifier-list • "," IDENTIFIER 642 simple-declaration → attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list • "]" initializer ";" "," shift, and go to state 1006 "]" shift, and go to state 1007
325 function-body → "=" • "default" ";" 326 | "=" • "delete" ";" "delete" shift, and go to state 1008 "default" shift, and go to state 1009
137 class-name → • IDENTIFIER 138 | • simple-template-id 139 class-or-decltype → • nested-name-specifier-opt type-name 140 | • nested-name-specifier "template" simple-template-id 141 | • decltype-specifier 172 ctor-initializer → ":" • mem-initializer-list 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 398 mem-initializer → • mem-initializer-id "(" expression-list-opt ")" 399 | • mem-initializer-id braced-init-list 400 mem-initializer-id → • class-or-decltype 401 | • IDENTIFIER 402 mem-initializer-list → • mem-initializer ELLIPSIS-opt 403 | • mem-initializer-list "," mem-initializer ELLIPSIS-opt 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 1010 "::" shift, and go to state 6 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] class-name go to state 55 class-or-decltype go to state 1011 decltype-specifier go to state 874 enum-name go to state 71 mem-initializer go to state 1012 mem-initializer-id go to state 1013 mem-initializer-list go to state 1014 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 875 nested-name-specifier-opt go to state 876 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
172 ctor-initializer → • ":" mem-initializer-list 173 ctor-initializer-opt → • %empty ["{"] 174 | • ctor-initializer 331 function-try-block → "try" • ctor-initializer-opt compound-statement handler-seq ":" shift, and go to state 849 $default reduce using rule 173 (ctor-initializer-opt) ctor-initializer go to state 851 ctor-initializer-opt go to state 1015
174 ctor-initializer-opt → ctor-initializer • $default reduce using rule 174 (ctor-initializer-opt)
149 compound-statement → • "{" statement-seq-opt "}" 323 function-body → ctor-initializer-opt • compound-statement "{" shift, and go to state 794 compound-statement go to state 1016
328 function-definition → attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body • $default reduce using rule 328 (function-definition)
324 function-body → function-try-block • $default reduce using rule 324 (function-body)
772 virt-specifier-seq → virt-specifier-seq virt-specifier • $default reduce using rule 772 (virt-specifier-seq)
327 function-definition → attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body • $default reduce using rule 327 (function-definition)
596 ptr-operator → nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt • $default reduce using rule 596 (ptr-operator)
175 cv-qualifier → • "const" 176 | • "volatile" 177 cv-qualifier-seq → • cv-qualifier cv-qualifier-seq-opt 178 cv-qualifier-seq-opt → • %empty [",", "...", "noexcept", "=", ";", "alignas", "(", ")", "&", "[", ":", "{", "final", "&&", "->", ">", "try", "requires", "override"] 179 | • cv-qualifier-seq 553 parameters-and-qualifiers → "(" parameter-declaration-clause ")" • cv-qualifier-seq-opt ref-qualifier-opt noexcept-specifier-opt attribute-specifier-seq-opt "const" shift, and go to state 15 "volatile" shift, and go to state 16 $default reduce using rule 178 (cv-qualifier-seq-opt) cv-qualifier go to state 608 cv-qualifier-seq go to state 609 cv-qualifier-seq-opt go to state 1017
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "this", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 543 parameter-declaration → • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator 544 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator "=" initializer-clause 545 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt 546 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt "=" initializer-clause 548 parameter-declaration-clause → parameter-declaration-list "," • "..." 550 parameter-declaration-list → parameter-declaration-list "," • parameter-declaration "..." shift, and go to state 1018 $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 220 parameter-declaration go to state 1019
547 parameter-declaration-clause → parameter-declaration-list-opt ELLIPSIS-opt • $default reduce using rule 547 (parameter-declaration-clause)
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 492 noptr-declarator → noptr-declarator "[" constant-expression-opt "]" • attribute-specifier-seq-opt $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 1020
702 trailing-return-type → "->" type-id • $default reduce using rule 702 (trailing-return-type)
424 member-specification → access-specifier ":" member-specification-opt • $default reduce using rule 424 (member-specification)
12 IDENTIFIER-opt → IDENTIFIER • ["alignas", "[", ":"] 137 class-name → IDENTIFIER • ["::"] 246 enum-name → IDENTIFIER • ["::"] 444 namespace-alias → IDENTIFIER • ["::"] 450 namespace-name → IDENTIFIER • ["::"] 696 template-name → IDENTIFIER • ["<"] 731 typedef-name → IDENTIFIER • ["::"] "::" reduce using rule 137 (class-name) "::" [reduce using rule 246 (enum-name)] "::" [reduce using rule 444 (namespace-alias)] "::" [reduce using rule 450 (namespace-name)] "::" [reduce using rule 731 (typedef-name)] "<" reduce using rule 696 (template-name) $default reduce using rule 12 (IDENTIFIER-opt)
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 418 member-declarator → IDENTIFIER-opt • attribute-specifier-seq-opt ":" constant-expression brace-or-equal-initializer-opt $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 1021
116 brace-or-equal-initializer → • "=" initializer-clause 117 | • braced-init-list 118 brace-or-equal-initializer-opt → • %empty [",", ";"] 119 | • brace-or-equal-initializer 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 327 function-definition → attribute-specifier-seq-opt decl-specifier-seq-opt declarator • virt-specifier-seq-opt function-body 328 | attribute-specifier-seq-opt decl-specifier-seq-opt declarator • requires-clause function-body 415 member-declarator → declarator • virt-specifier-seq-opt pure-specifier-opt 416 | declarator • requires-clause 417 | declarator • brace-or-equal-initializer-opt 621 requires-clause → • "requires" constraint-logical-or-expression 769 virt-specifier → • "override" 770 | • "final" 771 virt-specifier-seq → • virt-specifier 772 | • virt-specifier-seq virt-specifier 773 virt-specifier-seq-opt → • %empty [",", "=", ";", ":", "{", "try"] 774 | • virt-specifier-seq "=" shift, and go to state 378 "{" shift, and go to state 380 "final" shift, and go to state 612 "requires" shift, and go to state 381 "override" shift, and go to state 613 "," reduce using rule 118 (brace-or-equal-initializer-opt) "," [reduce using rule 773 (virt-specifier-seq-opt)] "=" [reduce using rule 773 (virt-specifier-seq-opt)] ";" reduce using rule 118 (brace-or-equal-initializer-opt) ";" [reduce using rule 773 (virt-specifier-seq-opt)] ":" reduce using rule 773 (virt-specifier-seq-opt) "{" [reduce using rule 773 (virt-specifier-seq-opt)] "try" reduce using rule 773 (virt-specifier-seq-opt) $default reduce using rule 118 (brace-or-equal-initializer-opt) brace-or-equal-initializer go to state 1022 brace-or-equal-initializer-opt go to state 1023 braced-init-list go to state 383 requires-clause go to state 1024 virt-specifier go to state 615 virt-specifier-seq go to state 616 virt-specifier-seq-opt go to state 1025
419 member-declarator-list → member-declarator • $default reduce using rule 419 (member-declarator-list)
420 member-declarator-list → member-declarator-list • "," member-declarator 422 member-declarator-list-opt → member-declarator-list • [";"] "," shift, and go to state 1026 $default reduce using rule 422 (member-declarator-list-opt)
404 member-declaration → attribute-specifier-seq-opt decl-specifier-seq-opt member-declarator-list-opt • ";" ";" shift, and go to state 1027
236 enum-base → • ":" type-specifier-seq 237 enum-base-opt → • %empty [";"] 238 | • enum-base 496 opaque-enum-declaration → enum-key attribute-specifier-seq-opt enum-head-name • enum-base-opt ";" ":" shift, and go to state 663 $default reduce using rule 237 (enum-base-opt) enum-base go to state 664 enum-base-opt go to state 665
36 access-specifier → • "private" 37 | • "protected" 38 | • "public" 39 access-specifier-opt → • %empty [IDENTIFIER, "::", "decltype"] 40 | • access-specifier 103 base-specifier → attribute-specifier-seq-opt "virtual" • access-specifier-opt class-or-decltype "private" shift, and go to state 351 "protected" shift, and go to state 352 "public" shift, and go to state 353 $default reduce using rule 39 (access-specifier-opt) access-specifier go to state 1028 access-specifier-opt go to state 1029
27 VIRTUAL-opt → • %empty [IDENTIFIER, "::", "decltype"] 28 | • "virtual" 104 base-specifier → attribute-specifier-seq-opt access-specifier • VIRTUAL-opt class-or-decltype "virtual" shift, and go to state 1030 $default reduce using rule 27 (VIRTUAL-opt) VIRTUAL-opt go to state 1031
102 base-specifier → attribute-specifier-seq-opt class-or-decltype • $default reduce using rule 102 (base-specifier)
141 class-or-decltype → decltype-specifier • [",", "...", "(", "{"] 455 nested-name-specifier → decltype-specifier • "::" "::" shift, and go to state 189 $default reduce using rule 141 (class-or-decltype)
21 TEMPLATE-opt → • %empty [IDENTIFIER] 22 | • "template" 140 class-or-decltype → nested-name-specifier • "template" simple-template-id 456 nested-name-specifier → nested-name-specifier • IDENTIFIER "::" 457 | nested-name-specifier • TEMPLATE-opt simple-template-id "::" 459 nested-name-specifier-opt → nested-name-specifier • [IDENTIFIER] IDENTIFIER shift, and go to state 198 "template" shift, and go to state 1032 IDENTIFIER [reduce using rule 21 (TEMPLATE-opt)] IDENTIFIER [reduce using rule 459 (nested-name-specifier-opt)] TEMPLATE-opt go to state 200
137 class-name → • IDENTIFIER 138 | • simple-template-id 139 class-or-decltype → nested-name-specifier-opt • type-name 246 enum-name → • IDENTIFIER 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 507 class-name go to state 55 enum-name go to state 71 simple-template-id go to state 96 template-name go to state 102 type-name go to state 1033 typedef-name go to state 108
105 base-specifier-list → base-specifier ELLIPSIS-opt • $default reduce using rule 105 (base-specifier-list)
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 102 base-specifier → • attribute-specifier-seq-opt class-or-decltype 103 | • attribute-specifier-seq-opt "virtual" access-specifier-opt class-or-decltype 104 | • attribute-specifier-seq-opt access-specifier VIRTUAL-opt class-or-decltype 106 base-specifier-list → base-specifier-list "," • base-specifier ELLIPSIS-opt $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 632 base-specifier go to state 1034
131 class-head → class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt • $default reduce using rule 131 (class-head)
360 initializer → "(" expression-list ")" • $default reduce using rule 360 (initializer)
363 initializer-list → initializer-clause ELLIPSIS-opt • $default reduce using rule 363 (initializer-list)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 361 initializer-clause → • assignment-expression 362 | • braced-init-list 364 initializer-list → initializer-list "," • initializer-clause ELLIPSIS-opt 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "{" shift, and go to state 380 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 261 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 "co_yield" shift, and go to state 264 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 assignment-expression go to state 642 await-expression go to state 269 braced-init-list go to state 643 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 272 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 initializer-clause go to state 1035 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 285 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 throw-expression go to state 302 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306 yield-expression go to state 307
227 designator → "." IDENTIFIER • $default reduce using rule 227 (designator)
2 COMMA-opt → "," • ["}"] 224 designated-initializer-clause → • designator brace-or-equal-initializer 226 designated-initializer-list → designated-initializer-list "," • designated-initializer-clause 227 designator → • "." IDENTIFIER "." shift, and go to state 649 $default reduce using rule 2 (COMMA-opt) designated-initializer-clause go to state 1036 designator go to state 652
121 braced-init-list → "{" designated-initializer-list COMMA-opt • "}" "}" shift, and go to state 1037
224 designated-initializer-clause → designator brace-or-equal-initializer • $default reduce using rule 224 (designated-initializer-clause)
2 COMMA-opt → "," • ["}"] 19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 361 initializer-clause → • assignment-expression 362 | • braced-init-list 364 initializer-list → initializer-list "," • initializer-clause ELLIPSIS-opt 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "{" shift, and go to state 380 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 261 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 "co_yield" shift, and go to state 264 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "}" reduce using rule 2 (COMMA-opt) "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 assignment-expression go to state 642 await-expression go to state 269 braced-init-list go to state 643 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 272 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 initializer-clause go to state 1035 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 285 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 throw-expression go to state 302 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306 yield-expression go to state 307
120 braced-init-list → "{" initializer-list COMMA-opt • "}" "}" shift, and go to state 1038
137 class-name → • IDENTIFIER 138 | • simple-template-id 163 constraint-logical-and-expression → constraint-logical-and-expression "&&" • primary-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "::" shift, and go to state 6 "this" shift, and go to state 242 "(" shift, and go to state 654 "[" shift, and go to state 247 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "requires" shift, and go to state 251 "~" shift, and go to state 336 "literal" shift, and go to state 260 STRING_LITERAL shift, and go to state 118 class-name go to state 55 conversion-function-id go to state 273 decltype-specifier go to state 121 enum-name go to state 71 fold-expression go to state 278 id-expression go to state 279 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 338 operator-function-id go to state 290 primary-expression go to state 1039 qualified-id go to state 294 requires-expression go to state 296 simple-template-id go to state 298 string-literal go to state 300 template-id go to state 301 template-name go to state 102 type-name go to state 106 typedef-name go to state 108 unqualified-id go to state 306
137 class-name → • IDENTIFIER 138 | • simple-template-id 162 constraint-logical-and-expression → • primary-expression 163 | • constraint-logical-and-expression "&&" primary-expression 165 constraint-logical-or-expression → constraint-logical-or-expression "||" • constraint-logical-and-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "::" shift, and go to state 6 "this" shift, and go to state 242 "(" shift, and go to state 654 "[" shift, and go to state 247 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "requires" shift, and go to state 251 "~" shift, and go to state 336 "literal" shift, and go to state 260 STRING_LITERAL shift, and go to state 118 class-name go to state 55 constraint-logical-and-expression go to state 1040 conversion-function-id go to state 273 decltype-specifier go to state 121 enum-name go to state 71 fold-expression go to state 278 id-expression go to state 279 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 338 operator-function-id go to state 290 primary-expression go to state 657 qualified-id go to state 294 requires-expression go to state 296 simple-template-id go to state 298 string-literal go to state 300 template-id go to state 301 template-name go to state 102 type-name go to state 106 typedef-name go to state 108 unqualified-id go to state 306
251 enumerator-definition → enumerator "=" constant-expression • $default reduce using rule 251 (enumerator-definition)
248 enum-specifier → enum-head "{" enumerator-list "," "}" • $default reduce using rule 248 (enum-specifier)
253 enumerator-list → enumerator-list "," enumerator-definition • $default reduce using rule 253 (enumerator-list)
236 enum-base → ":" type-specifier-seq • $default reduce using rule 236 (enum-base)
496 opaque-enum-declaration → enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" • $default reduce using rule 496 (opaque-enum-declaration)
215 deduction-guide → explicit-specifier-opt template-name "(" parameter-declaration-clause ")" • "->" simple-template-id ";" "->" shift, and go to state 1041
438 module-partition-opt → module-partition • $default reduce using rule 438 (module-partition-opt)
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 427 module-declaration → EXPORT-opt "module" module-name module-partition-opt • attribute-specifier-seq-opt ";" $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 1042
584 private-module-fragment → "module" ":" • "private" ";" declaration-seq-opt "private" shift, and go to state 1043
709 type-constraint → nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" • $default reduce using rule 709 (type-constraint)
150 concept-definition → "concept" concept-name "=" constraint-expression • ";" ";" shift, and go to state 1044
161 constraint-expression → logical-or-expression • [";"] 397 logical-or-expression → logical-or-expression • "||" logical-and-expression "||" shift, and go to state 557 $default reduce using rule 161 (constraint-expression)
229 elaborated-type-specifier → class-key attribute-specifier-seq-opt nested-name-specifier-opt • IDENTIFIER IDENTIFIER shift, and go to state 1045
5 ELLIPSIS-opt → • %empty [",", ">"] 6 | • "..." 687 template-argument-list → template-argument-list "," template-argument • ELLIPSIS-opt "..." shift, and go to state 156 $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 1046
482 noptr-abstract-declarator → noptr-abstract-declarator-opt • parameters-and-qualifiers 483 | noptr-abstract-declarator-opt • "[" constant-expression-opt "]" attribute-specifier-seq-opt 553 parameters-and-qualifiers → • "(" parameter-declaration-clause ")" cv-qualifier-seq-opt ref-qualifier-opt noexcept-specifier-opt attribute-specifier-seq-opt "(" shift, and go to state 347 "[" shift, and go to state 908 parameters-and-qualifiers go to state 1047
484 noptr-abstract-declarator → "(" ptr-abstract-declarator • ")" ")" shift, and go to state 1048
137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 482 noptr-abstract-declarator → • noptr-abstract-declarator-opt parameters-and-qualifiers 483 | • noptr-abstract-declarator-opt "[" constant-expression-opt "]" attribute-specifier-seq-opt 484 | • "(" ptr-abstract-declarator ")" 485 noptr-abstract-declarator-opt → • %empty ["(", "["] 486 | • noptr-abstract-declarator 587 ptr-abstract-declarator → • noptr-abstract-declarator 588 | • ptr-operator ptr-abstract-declarator-opt 588 | ptr-operator • ptr-abstract-declarator-opt 589 ptr-abstract-declarator-opt → • %empty [")"] 590 | • ptr-abstract-declarator 593 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 594 | • "&" attribute-specifier-seq-opt 595 | • "&&" attribute-specifier-seq-opt 596 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 683 "&" shift, and go to state 160 "&&" shift, and go to state 163 "decltype" shift, and go to state 21 "*" shift, and go to state 164 "(" [reduce using rule 485 (noptr-abstract-declarator-opt)] ")" reduce using rule 589 (ptr-abstract-declarator-opt) $default reduce using rule 485 (noptr-abstract-declarator-opt) class-name go to state 55 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 187 noptr-abstract-declarator go to state 687 noptr-abstract-declarator-opt go to state 905 ptr-abstract-declarator go to state 913 ptr-abstract-declarator-opt go to state 914 ptr-operator go to state 907 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 158 constant-expression → • conditional-expression 159 constant-expression-opt → • %empty ["]"] 160 | • constant-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 483 noptr-abstract-declarator → noptr-abstract-declarator-opt "[" • constant-expression-opt "]" attribute-specifier-seq-opt 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "]" reduce using rule 159 (constant-expression-opt) "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 await-expression go to state 269 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 309 constant-expression go to state 623 constant-expression-opt go to state 1049 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 311 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306
30 abstract-declarator → noptr-abstract-declarator-opt parameters-and-qualifiers • trailing-return-type 482 noptr-abstract-declarator → noptr-abstract-declarator-opt parameters-and-qualifiers • [",", "...", "=", ";", "(", ")", "[", ":", "{", "final", ">", "try", "requires", "override"] 702 trailing-return-type → • "->" type-id "->" shift, and go to state 625 $default reduce using rule 482 (noptr-abstract-declarator) trailing-return-type go to state 1050
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 158 constant-expression → • conditional-expression 159 constant-expression-opt → • %empty ["]"] 160 | • constant-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 488 noptr-abstract-pack-declarator → noptr-abstract-pack-declarator "[" • constant-expression-opt "]" attribute-specifier-seq-opt 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "]" reduce using rule 159 (constant-expression-opt) "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 await-expression go to state 269 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 309 constant-expression go to state 623 constant-expression-opt go to state 1051 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 311 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306
487 noptr-abstract-pack-declarator → noptr-abstract-pack-declarator parameters-and-qualifiers • $default reduce using rule 487 (noptr-abstract-pack-declarator)
35 abstract-pack-declarator → ptr-operator abstract-pack-declarator • $default reduce using rule 35 (abstract-pack-declarator)
590 ptr-abstract-declarator-opt → ptr-abstract-declarator • $default reduce using rule 590 (ptr-abstract-declarator-opt)
588 ptr-abstract-declarator → ptr-operator ptr-abstract-declarator-opt • $default reduce using rule 588 (ptr-abstract-declarator)
555 placeholder-type-specifier → type-constraint-opt "decltype" "(" "auto" ")" • $default reduce using rule 555 (placeholder-type-specifier)
6 ELLIPSIS-opt → "..." • [IDENTIFIER, "::", "operator", "decltype", "~"] 489 noptr-abstract-pack-declarator → "..." • [",", "...", "=", "(", ")", "[", ">"] IDENTIFIER reduce using rule 6 (ELLIPSIS-opt) "::" reduce using rule 6 (ELLIPSIS-opt) "operator" reduce using rule 6 (ELLIPSIS-opt) "decltype" reduce using rule 6 (ELLIPSIS-opt) "~" reduce using rule 6 (ELLIPSIS-opt) $default reduce using rule 489 (noptr-abstract-pack-declarator)
5 ELLIPSIS-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 6 | • "..." 137 class-name → • IDENTIFIER 138 | • simple-template-id 213 declarator-id → • ELLIPSIS-opt id-expression 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 482 noptr-abstract-declarator → • noptr-abstract-declarator-opt parameters-and-qualifiers 483 | • noptr-abstract-declarator-opt "[" constant-expression-opt "]" attribute-specifier-seq-opt 484 | • "(" ptr-abstract-declarator ")" 484 | "(" • ptr-abstract-declarator ")" 485 noptr-abstract-declarator-opt → • %empty ["(", "["] 486 | • noptr-abstract-declarator 490 noptr-declarator → • declarator-id attribute-specifier-seq-opt 491 | • noptr-declarator parameters-and-qualifiers 492 | • noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 493 | • "(" ptr-declarator ")" 493 | "(" • ptr-declarator ")" 587 ptr-abstract-declarator → • noptr-abstract-declarator 588 | • ptr-operator ptr-abstract-declarator-opt 591 ptr-declarator → • noptr-declarator 592 | • ptr-operator ptr-declarator 593 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 594 | • "&" attribute-specifier-seq-opt 595 | • "&&" attribute-specifier-seq-opt 596 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id "..." shift, and go to state 156 IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 917 "&" shift, and go to state 160 "&&" shift, and go to state 163 "decltype" shift, and go to state 21 "*" shift, and go to state 164 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "::" [reduce using rule 5 (ELLIPSIS-opt)] "(" [reduce using rule 485 (noptr-abstract-declarator-opt)] "[" reduce using rule 485 (noptr-abstract-declarator-opt) "decltype" [reduce using rule 5 (ELLIPSIS-opt)] $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 165 class-name go to state 55 declarator-id go to state 171 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 187 noptr-abstract-declarator go to state 687 noptr-abstract-declarator-opt go to state 905 noptr-declarator go to state 329 ptr-abstract-declarator go to state 906 ptr-declarator go to state 330 ptr-operator go to state 1052 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
545 parameter-declaration → attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt • [",", "...", ")", ">"] 546 | attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt • "=" initializer-clause "=" shift, and go to state 1053 $default reduce using rule 545 (parameter-declaration)
543 parameter-declaration → attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator • [",", "...", ")", ">"] 544 | attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator • "=" initializer-clause "=" shift, and go to state 1054 $default reduce using rule 543 (parameter-declaration)
5 ELLIPSIS-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 6 | • "..." 34 abstract-pack-declarator → • noptr-abstract-pack-declarator 35 | • ptr-operator abstract-pack-declarator 35 | ptr-operator • abstract-pack-declarator 137 class-name → • IDENTIFIER 138 | • simple-template-id 213 declarator-id → • ELLIPSIS-opt id-expression 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 482 noptr-abstract-declarator → • noptr-abstract-declarator-opt parameters-and-qualifiers 483 | • noptr-abstract-declarator-opt "[" constant-expression-opt "]" attribute-specifier-seq-opt 484 | • "(" ptr-abstract-declarator ")" 485 noptr-abstract-declarator-opt → • %empty ["(", "["] 486 | • noptr-abstract-declarator 487 noptr-abstract-pack-declarator → • noptr-abstract-pack-declarator parameters-and-qualifiers 488 | • noptr-abstract-pack-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 489 | • "..." 490 noptr-declarator → • declarator-id attribute-specifier-seq-opt 491 | • noptr-declarator parameters-and-qualifiers 492 | • noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 493 | • "(" ptr-declarator ")" 587 ptr-abstract-declarator → • noptr-abstract-declarator 588 | • ptr-operator ptr-abstract-declarator-opt 588 | ptr-operator • ptr-abstract-declarator-opt 589 ptr-abstract-declarator-opt → • %empty [",", "...", "=", ")", ">"] 590 | • ptr-abstract-declarator 591 ptr-declarator → • noptr-declarator 592 | • ptr-operator ptr-declarator 592 | ptr-operator • ptr-declarator 593 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 594 | • "&" attribute-specifier-seq-opt 595 | • "&&" attribute-specifier-seq-opt 596 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id "..." shift, and go to state 916 IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 917 "&" shift, and go to state 160 "&&" shift, and go to state 163 "decltype" shift, and go to state 21 "*" shift, and go to state 164 "..." [reduce using rule 589 (ptr-abstract-declarator-opt)] IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "::" [reduce using rule 5 (ELLIPSIS-opt)] "(" [reduce using rule 485 (noptr-abstract-declarator-opt)] "[" reduce using rule 485 (noptr-abstract-declarator-opt) "operator" reduce using rule 5 (ELLIPSIS-opt) "decltype" [reduce using rule 5 (ELLIPSIS-opt)] "~" reduce using rule 5 (ELLIPSIS-opt) $default reduce using rule 589 (ptr-abstract-declarator-opt) ELLIPSIS-opt go to state 165 abstract-pack-declarator go to state 912 class-name go to state 55 declarator-id go to state 171 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 187 noptr-abstract-declarator go to state 687 noptr-abstract-declarator-opt go to state 905 noptr-abstract-pack-declarator go to state 689 noptr-declarator go to state 329 ptr-abstract-declarator go to state 913 ptr-abstract-declarator-opt go to state 914 ptr-declarator go to state 350 ptr-operator go to state 920 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
720 type-parameter → template-head type-parameter-key ELLIPSIS-opt IDENTIFIER-opt • $default reduce using rule 720 (type-parameter)
137 class-name → • IDENTIFIER 138 | • simple-template-id 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 340 id-expression → • unqualified-id 341 | • qualified-id 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 721 type-parameter → template-head type-parameter-key IDENTIFIER-opt "=" • id-expression 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "::" shift, and go to state 6 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "~" shift, and go to state 336 class-name go to state 55 conversion-function-id go to state 273 decltype-specifier go to state 121 enum-name go to state 71 id-expression go to state 1055 literal-operator-id go to state 283 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 338 operator-function-id go to state 290 qualified-id go to state 294 simple-template-id go to state 298 template-id go to state 301 template-name go to state 102 type-name go to state 106 typedef-name go to state 108 unqualified-id go to state 306
719 type-parameter → type-constraint IDENTIFIER-opt "=" type-id • $default reduce using rule 719 (type-parameter)
717 type-parameter → type-parameter-key IDENTIFIER-opt "=" type-id • $default reduce using rule 717 (type-parameter)
44 alias-declaration → "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" • $default reduce using rule 44 (alias-declaration)
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 220 defining-type-specifier-seq → defining-type-specifier attribute-specifier-seq-opt • ["...", IDENTIFIER, "::", ";", "(", "&", "[", "&&", "decltype", "*"] "alignas" shift, and go to state 158 "[" shift, and go to state 162 "[" [reduce using rule 220 (defining-type-specifier-seq)] $default reduce using rule 220 (defining-type-specifier-seq) alignment-specifier go to state 166 attribute-specifier go to state 167
221 defining-type-specifier-seq → defining-type-specifier defining-type-specifier-seq • $default reduce using rule 221 (defining-type-specifier-seq)
216 defining-type-id → defining-type-specifier-seq abstract-declarator-opt • $default reduce using rule 216 (defining-type-id)
477 noexcept-expression → "noexcept" "(" expression ")" • $default reduce using rule 477 (noexcept-expression)
286 fold-expression → "(" "..." fold-operator cast-expression • ")" ")" shift, and go to state 1056
285 fold-expression → "(" cast-expression fold-operator "..." • ")" 287 | "(" cast-expression fold-operator "..." • fold-operator cast-expression ")" 288 fold-operator → • "+" 289 | • "-" 290 | • "*" 291 | • "/" 292 | • "%" 293 | • "^" 294 | • "&" 295 | • "|" 296 | • "<<" 297 | • ">>" 298 | • "+=" 299 | • "-=" 300 | • "*=" 301 | • "/=" 302 | • "%=" 303 | • "^=" 304 | • "&=" 305 | • "|=" 306 | • "<<=" 307 | • ">>=" 308 | • "=" 309 | • "==" 310 | • "!=" 311 | • "<" 312 | • ">" 313 | • "<=" 314 | • ">=" 315 | • "&&" 316 | • "||" 317 | • "," 318 | • ".*" 319 | • "->*" "," shift, and go to state 709 "+" shift, and go to state 710 "-" shift, and go to state 711 "=" shift, and go to state 712 ")" shift, and go to state 1057 "&" shift, and go to state 713 "*=" shift, and go to state 714 "/=" shift, and go to state 715 "%=" shift, and go to state 716 "+=" shift, and go to state 717 "-=" shift, and go to state 718 ">>=" shift, and go to state 719 "<<=" shift, and go to state 720 "&=" shift, and go to state 721 "^=" shift, and go to state 722 "|=" shift, and go to state 723 "&&" shift, and go to state 724 "||" shift, and go to state 725 "==" shift, and go to state 726 "!=" shift, and go to state 727 "^" shift, and go to state 728 "<" shift, and go to state 729 ">" shift, and go to state 730 "*" shift, and go to state 731 "/" shift, and go to state 732 "%" shift, and go to state 733 "|" shift, and go to state 734 "<<" shift, and go to state 735 ">>" shift, and go to state 736 "<=" shift, and go to state 737 ">=" shift, and go to state 738 ".*" shift, and go to state 739 "->*" shift, and go to state 740 fold-operator go to state 1058
130 cast-expression → "(" type-id ")" cast-expression • $default reduce using rule 130 (cast-expression)
637 simple-capture → "&" IDENTIFIER ELLIPSIS-opt • $default reduce using rule 637 (simple-capture)
116 brace-or-equal-initializer → • "=" initializer-clause 117 | • braced-init-list 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 347 init-capture → "&" ELLIPSIS-opt IDENTIFIER • initializer 359 initializer → • brace-or-equal-initializer 360 | • "(" expression-list ")" "=" shift, and go to state 378 "(" shift, and go to state 379 "{" shift, and go to state 380 brace-or-equal-initializer go to state 382 braced-init-list go to state 383 initializer go to state 1059
346 init-capture → ELLIPSIS-opt IDENTIFIER initializer • $default reduce using rule 346 (init-capture)
5 ELLIPSIS-opt → • %empty [IDENTIFIER] 6 | • "..." 347 init-capture → "&" • ELLIPSIS-opt IDENTIFIER initializer 637 simple-capture → "&" • IDENTIFIER ELLIPSIS-opt "..." shift, and go to state 156 IDENTIFIER shift, and go to state 746 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] ELLIPSIS-opt go to state 747
128 capture-list → capture-list • "," capture 381 lambda-capture → capture-default "," capture-list • ["]"] "," shift, and go to state 751 $default reduce using rule 381 (lambda-capture)
128 capture-list → capture-list "," capture • $default reduce using rule 128 (capture-list)
502 overloadable-operator → "delete" "[" "]" • $default reduce using rule 502 (overloadable-operator)
501 overloadable-operator → "new" "[" "]" • $default reduce using rule 501 (overloadable-operator)
498 operator-function-id → "operator" overloadable-operator "<" template-argument-list-opt • ">" ">" shift, and go to state 1060
166 conversion-declarator → ptr-operator conversion-declarator-opt • $default reduce using rule 166 (conversion-declarator)
616 requirement-parameter-list → "(" parameter-declaration-clause ")" • $default reduce using rule 616 (requirement-parameter-list)
137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 724 type-requirement → "typename" • nested-name-specifier-opt type-name ";" 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → "typename" • nested-name-specifier IDENTIFIER 734 | "typename" • nested-name-specifier TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] class-name go to state 55 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 1061 nested-name-specifier-opt go to state 1062 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 148 compound-requirement → "{" • expression "}" NOEXCEPT-opt return-type-requirement-opt ";" 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 277 expression → • assignment-expression 278 | • expression "," assignment-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 261 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 "co_yield" shift, and go to state 264 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 assignment-expression go to state 268 await-expression go to state 269 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 272 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 expression go to state 1063 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 285 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 throw-expression go to state 302 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306 yield-expression go to state 307
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 161 constraint-expression → • logical-or-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 461 nested-requirement → "requires" • constraint-expression ";" 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 616 requirement-parameter-list → • "(" parameter-declaration-clause ")" 617 requirement-parameter-list-opt → • %empty ["{"] 618 | • requirement-parameter-list 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 624 | "requires" • requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 1064 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "{" reduce using rule 617 (requirement-parameter-list-opt) "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 await-expression go to state 269 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 constraint-expression go to state 1065 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 902 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requirement-parameter-list go to state 505 requirement-parameter-list-opt go to state 506 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306
613 requirement → compound-requirement • $default reduce using rule 613 (requirement)
278 expression → expression • "," assignment-expression 643 simple-requirement → expression • ";" "," shift, and go to state 534 ";" shift, and go to state 1066
614 requirement → nested-requirement • $default reduce using rule 614 (requirement)
619 requirement-seq → requirement • $default reduce using rule 619 (requirement-seq)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 148 compound-requirement → • "{" expression "}" NOEXCEPT-opt return-type-requirement-opt ";" 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 277 expression → • assignment-expression 278 | • expression "," assignment-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 461 nested-requirement → • "requires" constraint-expression ";" 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 611 requirement → • simple-requirement 612 | • type-requirement 613 | • compound-requirement 614 | • nested-requirement 615 requirement-body → "{" requirement-seq • "}" 620 requirement-seq → requirement-seq • requirement 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 643 simple-requirement → • expression ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 724 type-requirement → • "typename" nested-name-specifier-opt type-name ";" 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 944 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "{" shift, and go to state 945 "}" shift, and go to state 1067 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 946 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 261 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 "co_yield" shift, and go to state 264 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 assignment-expression go to state 268 await-expression go to state 269 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 compound-requirement go to state 947 conditional-expression go to state 272 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 expression go to state 948 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 285 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 nested-requirement go to state 949 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requirement go to state 1068 requires-expression go to state 296 shift-expression go to state 297 simple-requirement go to state 952 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 throw-expression go to state 302 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-requirement go to state 953 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306 yield-expression go to state 307
611 requirement → simple-requirement • $default reduce using rule 611 (requirement)
612 requirement → type-requirement • $default reduce using rule 612 (requirement)
570 postfix-expression → "dynamic_cast" "<" type-id ">" • "(" expression ")" "(" shift, and go to state 1069
571 postfix-expression → "static_cast" "<" type-id ">" • "(" expression ")" "(" shift, and go to state 1070
572 postfix-expression → "reinterpret_cast" "<" type-id ">" • "(" expression ")" "(" shift, and go to state 1071
573 postfix-expression → "const_cast" "<" type-id ">" • "(" expression ")" "(" shift, and go to state 1072
574 postfix-expression → "typeid" "(" expression ")" • $default reduce using rule 574 (postfix-expression)
575 postfix-expression → "typeid" "(" type-id ")" • $default reduce using rule 575 (postfix-expression)
743 unary-expression → "sizeof" "..." "(" IDENTIFIER • ")" ")" shift, and go to state 1073
742 unary-expression → "sizeof" "(" type-id ")" • $default reduce using rule 742 (unary-expression)
744 unary-expression → "alignof" "(" type-id ")" • $default reduce using rule 744 (unary-expression)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 223 | SCOPE-opt "delete" "[" "]" • cast-expression 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 await-expression go to state 269 cast-expression go to state 1074 class-name go to state 55 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 fold-expression go to state 278 id-expression go to state 279 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 requires-expression go to state 296 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306
472 new-placement → "(" expression-list • ")" ")" shift, and go to state 1075
134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 467 new-expression → SCOPE-opt "new" new-placement-opt "(" • type-id ")" new-initializer-opt 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 712 type-id → • type-specifier-seq abstract-declarator-opt 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 729 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 730 | • type-specifier type-specifier-seq 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "typename" shift, and go to state 8 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 125 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] $default reduce using rule 710 (type-constraint-opt) class-key go to state 406 class-name go to state 55 cv-qualifier go to state 57 decltype-specifier go to state 63 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 1076 type-name go to state 106 type-specifier go to state 414 type-specifier-seq go to state 415 typedef-name go to state 108 typename-specifier go to state 109
120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 466 new-expression → SCOPE-opt "new" new-placement-opt new-type-id • new-initializer-opt 468 new-initializer → • "(" expression-list-opt ")" 469 | • braced-init-list 470 new-initializer-opt → • %empty [",", "...", "+", "-", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*"] 471 | • new-initializer "(" shift, and go to state 1077 "{" shift, and go to state 380 "{" [reduce using rule 470 (new-initializer-opt)] $default reduce using rule 470 (new-initializer-opt) braced-init-list go to state 1078 new-initializer go to state 1079 new-initializer-opt go to state 1080
137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 462 new-declarator → • ptr-operator new-declarator-opt 463 | • noptr-new-declarator 464 new-declarator-opt → • %empty [",", "...", "+", "-", "=", ";", "(", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*"] 465 | • new-declarator 475 new-type-id → type-specifier-seq • new-declarator-opt 494 noptr-new-declarator → • "[" expression-opt "]" attribute-specifier-seq-opt 495 | • noptr-new-declarator "[" constant-expression "]" attribute-specifier-seq-opt 593 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 594 | • "&" attribute-specifier-seq-opt 595 | • "&&" attribute-specifier-seq-opt 596 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "&" shift, and go to state 160 "[" shift, and go to state 1081 "&&" shift, and go to state 163 "decltype" shift, and go to state 21 "*" shift, and go to state 164 "&" [reduce using rule 464 (new-declarator-opt)] "&&" [reduce using rule 464 (new-declarator-opt)] "*" [reduce using rule 464 (new-declarator-opt)] $default reduce using rule 464 (new-declarator-opt) class-name go to state 55 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 187 new-declarator go to state 1082 new-declarator-opt go to state 1083 noptr-new-declarator go to state 1084 ptr-operator go to state 1085 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 191 decl-specifier-seq-opt → • %empty ["noexcept", "alignas", "[", "{", "->", "requires"] 192 | • decl-specifier-seq 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 329 function-specifier → • "virtual" 330 | • explicit-specifier 385 lambda-declarator → "(" parameter-declaration-clause ")" • lambda-specifiers requires-clause-opt 389 lambda-specifiers → • decl-specifier-seq-opt noexcept-specifier-opt attribute-specifier-seq-opt trailing-return-type-opt 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 151 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 191 (decl-specifier-seq-opt) class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 539 decl-specifier-seq-opt go to state 540 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 154 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 155 function-specifier go to state 79 lambda-specifiers go to state 1086 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109
387 lambda-expression → lambda-introducer "<" template-parameter-list ">" • requires-clause-opt lambda-declarator compound-statement 621 requires-clause → • "requires" constraint-logical-or-expression 622 requires-clause-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "::", "typename", "virtual", "alignas", "(", "[", "{", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 623 | • requires-clause "requires" shift, and go to state 381 $default reduce using rule 622 (requires-clause-opt) requires-clause go to state 698 requires-clause-opt go to state 1087
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 158 constant-expression → • conditional-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 478 noexcept-specifier → "noexcept" "(" • constant-expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 await-expression go to state 269 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 309 constant-expression go to state 1088 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 311 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 389 lambda-specifiers → decl-specifier-seq-opt noexcept-specifier-opt attribute-specifier-seq-opt • trailing-return-type-opt 702 trailing-return-type → • "->" type-id 703 trailing-return-type-opt → • %empty ["{", "requires"] 704 | • trailing-return-type "alignas" shift, and go to state 158 "[" shift, and go to state 162 "->" shift, and go to state 625 $default reduce using rule 703 (trailing-return-type-opt) alignment-specifier go to state 166 attribute-specifier go to state 167 trailing-return-type go to state 1089 trailing-return-type-opt go to state 1090
445 namespace-alias-definition → "namespace" • IDENTIFIER "=" qualified-namespace-specifier ";" IDENTIFIER shift, and go to state 1091
84 attribute-specifier-seq-opt → attribute-specifier-seq • ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "using", ";", "alignas", "(", "&", "asm", "[", "co_await", "{", "class", "struct", "union", "operator", "co_return", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", "*", "default", "try", "while", "do", "for", "break", "continue", "return", "goto", "case", "requires", "new", "~", "++", "--", "auto", "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "literal", "if", "switch", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", "co_yield"] 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 329 function-specifier → • "virtual" 330 | • explicit-specifier 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 641 simple-declaration → attribute-specifier-seq • decl-specifier-seq init-declarator-list ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 151 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 84 (attribute-specifier-seq-opt)] "extern" [reduce using rule 84 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 84 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 84 (attribute-specifier-seq-opt)] "::" [reduce using rule 84 (attribute-specifier-seq-opt)] "typename" [reduce using rule 84 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 84 (attribute-specifier-seq-opt)] "class" [reduce using rule 84 (attribute-specifier-seq-opt)] "struct" [reduce using rule 84 (attribute-specifier-seq-opt)] "union" [reduce using rule 84 (attribute-specifier-seq-opt)] "const" [reduce using rule 84 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 84 (attribute-specifier-seq-opt)] "friend" [reduce using rule 84 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 84 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 84 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 84 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 84 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 84 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 84 (attribute-specifier-seq-opt)] "auto" reduce using rule 84 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 84 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 84 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 84 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 84 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 84 (attribute-specifier-seq-opt)] "bool" [reduce using rule 84 (attribute-specifier-seq-opt)] "short" [reduce using rule 84 (attribute-specifier-seq-opt)] "int" [reduce using rule 84 (attribute-specifier-seq-opt)] "long" [reduce using rule 84 (attribute-specifier-seq-opt)] "signed" [reduce using rule 84 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 84 (attribute-specifier-seq-opt)] "float" [reduce using rule 84 (attribute-specifier-seq-opt)] "double" [reduce using rule 84 (attribute-specifier-seq-opt)] "void" [reduce using rule 84 (attribute-specifier-seq-opt)] "static" [reduce using rule 84 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 84 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 84 (attribute-specifier-seq-opt)] $default reduce using rule 84 (attribute-specifier-seq-opt) class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 153 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 154 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 155 function-specifier go to state 79 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 49 asm-declaration → attribute-specifier-seq-opt • "asm" "(" string-literal ")" ";" 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 149 compound-statement → • "{" statement-seq-opt "}" 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 171 coroutine-return-statement → • "co_return" expr-or-braced-init-list-opt ";" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 277 expression → • assignment-expression 278 | • expression "," assignment-expression 282 expression-opt → • %empty [";"] 283 | • expression 284 expression-statement → • expression-opt ";" 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 329 function-specifier → • "virtual" 330 | • explicit-specifier 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 367 iteration-statement → • "while" "(" condition ")" statement 368 | • "do" statement "while" "(" expression ")" ";" 369 | • "for" "(" init-statement condition-opt ";" expression-opt ")" statement 370 | • "for" "(" init-statement-opt for-range-declaration ":" for-range-initializer ")" statement 371 jump-statement → • "break" ";" 372 | • "continue" ";" 373 | • "return" expr-or-braced-init-list-opt ";" 374 | • coroutine-return-statement 375 | • "goto" IDENTIFIER ";" 376 labeled-statement → attribute-specifier-seq-opt • IDENTIFIER ":" statement 377 | attribute-specifier-seq-opt • "case" constant-expression ":" statement 378 | attribute-specifier-seq-opt • "default" ":" statement 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 628 selection-statement → • "if" CONSTEXPR-opt "(" init-statement-opt condition ")" statement 629 | • "if" CONSTEXPR-opt "(" init-statement-opt condition ")" statement "else" statement 630 | • "if" NOT-opt "consteval" compound-statement 631 | • "if" NOT-opt "consteval" compound-statement "else" statement 632 | • "switch" "(" init-statement-opt condition ")" statement 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 642 simple-declaration → attribute-specifier-seq-opt • decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 665 statement → attribute-specifier-seq-opt • expression-statement 666 | attribute-specifier-seq-opt • compound-statement 667 | attribute-specifier-seq-opt • selection-statement 668 | attribute-specifier-seq-opt • iteration-statement 669 | attribute-specifier-seq-opt • jump-statement 671 | attribute-specifier-seq-opt • try-block 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 707 try-block → • "try" compound-statement handler-seq 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 767 using-directive → attribute-specifier-seq-opt • "using" "namespace" nested-name-specifier-opt namespace-name ";" 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 1092 "inline" shift, and go to state 151 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "+" shift, and go to state 243 "-" shift, and go to state 244 "using" shift, and go to state 157 "alignas" shift, and go to state 158 "(" shift, and go to state 245 "&" shift, and go to state 246 "asm" shift, and go to state 161 "[" shift, and go to state 1093 "co_await" shift, and go to state 248 "{" shift, and go to state 794 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "operator" shift, and go to state 249 "co_return" shift, and go to state 1094 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "*" shift, and go to state 250 "default" shift, and go to state 1095 "try" shift, and go to state 1096 "while" shift, and go to state 1097 "do" shift, and go to state 1098 "for" shift, and go to state 1099 "break" shift, and go to state 1100 "continue" shift, and go to state 1101 "return" shift, and go to state 1102 "goto" shift, and go to state 1103 "case" shift, and go to state 1104 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "if" shift, and go to state 1105 "switch" shift, and go to state 1106 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 261 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 "co_yield" shift, and go to state 264 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] ";" reduce using rule 282 (expression-opt) "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 alignment-specifier go to state 166 and-expression go to state 267 assignment-expression go to state 268 attribute-specifier go to state 167 await-expression go to state 269 cast-expression go to state 270 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 compare-expression go to state 271 compound-statement go to state 1107 conditional-expression go to state 272 conversion-function-id go to state 273 coroutine-return-statement go to state 1108 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 1109 decltype-specifier go to state 63 defining-type-specifier go to state 65 delete-expression go to state 274 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 154 enum-name go to state 71 enum-specifier go to state 72 equality-expression go to state 275 exclusive-or-expression go to state 276 explicit-specifier go to state 155 expression go to state 1110 expression-opt go to state 1111 expression-statement go to state 1112 fold-expression go to state 278 function-specifier go to state 79 id-expression go to state 279 inclusive-or-expression go to state 280 iteration-statement go to state 1113 jump-statement go to state 1114 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 285 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 selection-statement go to state 1115 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 409 storage-class-specifier go to state 99 string-literal go to state 300 template-id go to state 301 template-name go to state 102 throw-expression go to state 302 try-block go to state 1116 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 416 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306 yield-expression go to state 307
210 declaration-statement → block-declaration • $default reduce using rule 210 (declaration-statement)
670 statement → declaration-statement • $default reduce using rule 670 (statement)
664 statement → labeled-statement • $default reduce using rule 664 (statement)
672 statement-seq → statement • $default reduce using rule 672 (statement-seq)
44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "using", ";", "alignas", "(", "&", "asm", "[", "co_await", "{", "class", "struct", "union", "operator", "co_return", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", "*", "default", "try", "while", "do", "for", "break", "continue", "return", "goto", "case", "requires", "new", "~", "++", "--", "auto", "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "literal", "if", "switch", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", "co_yield"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 210 declaration-statement → • block-declaration 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 329 function-specifier → • "virtual" 330 | • explicit-specifier 376 labeled-statement → • attribute-specifier-seq-opt IDENTIFIER ":" statement 377 | • attribute-specifier-seq-opt "case" constant-expression ":" statement 378 | • attribute-specifier-seq-opt "default" ":" statement 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 664 statement → • labeled-statement 665 | • attribute-specifier-seq-opt expression-statement 666 | • attribute-specifier-seq-opt compound-statement 667 | • attribute-specifier-seq-opt selection-statement 668 | • attribute-specifier-seq-opt iteration-statement 669 | • attribute-specifier-seq-opt jump-statement 670 | • declaration-statement 671 | • attribute-specifier-seq-opt try-block 673 statement-seq → statement-seq • statement 675 statement-seq-opt → statement-seq • ["}"] 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 151 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "namespace" shift, and go to state 972 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "}" reduce using rule 675 (statement-seq-opt) "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) alias-declaration go to state 47 asm-declaration go to state 48 attribute-specifier-seq go to state 973 attribute-specifier-seq-opt go to state 974 block-declaration go to state 975 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration-statement go to state 976 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 155 function-specifier go to state 79 labeled-statement go to state 977 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 statement go to state 1117 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
149 compound-statement → "{" statement-seq-opt • "}" "}" shift, and go to state 1118
695 template-id → literal-operator-id "<" template-argument-list-opt ">" • $default reduce using rule 695 (template-id)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 157 | logical-or-expression "?" expression ":" • assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 261 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 "co_yield" shift, and go to state 264 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 assignment-expression go to state 1119 await-expression go to state 269 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 272 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 285 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 throw-expression go to state 302 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306 yield-expression go to state 307
694 template-id → operator-function-id "<" template-argument-list-opt ">" • $default reduce using rule 694 (template-id)
561 postfix-expression → postfix-expression "(" expression-list-opt ")" • $default reduce using rule 561 (postfix-expression)
560 postfix-expression → postfix-expression "[" expression-list-opt "]" • $default reduce using rule 560 (postfix-expression)
567 postfix-expression → postfix-expression "->" TEMPLATE-opt id-expression • $default reduce using rule 567 (postfix-expression)
566 postfix-expression → postfix-expression "." TEMPLATE-opt id-expression • $default reduce using rule 566 (postfix-expression)
562 postfix-expression → simple-type-specifier "(" expression-list-opt ")" • $default reduce using rule 562 (postfix-expression)
563 postfix-expression → typename-specifier "(" expression-list-opt ")" • $default reduce using rule 563 (postfix-expression)
9 EXTERN-opt → • %empty ["template"] 10 | • "extern" 13 INLINE-opt → • %empty ["namespace"] 14 | • "inline" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 71 attribute-declaration → • attribute-specifier-seq ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "using", "alignas", "(", "&", "asm", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 193 declaration → • block-declaration 194 | • nodeclspec-function-declaration 195 | • function-definition 196 | • template-declaration 197 | • deduction-guide 198 | • explicit-instantiation 199 | • explicit-specialization 200 | • export-declaration 201 | • linkage-specification 202 | • namespace-definition 203 | • empty-declaration 204 | • attribute-declaration 205 | • module-import-declaration 206 declaration-seq → • declaration 207 | • declaration-seq declaration 208 declaration-seq-opt → • %empty ["}"] 209 | • declaration-seq 214 decltype-specifier → • "decltype" "(" expression ")" 215 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 233 empty-declaration → • ";" 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 264 explicit-instantiation → • EXTERN-opt "template" declaration 265 explicit-specialization → • "template" "<" ">" declaration 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 268 explicit-specifier-opt → • %empty [IDENTIFIER] 269 | • explicit-specifier 270 export-declaration → • "export" declaration 271 | • "export" "{" declaration-seq-opt "}" 272 | • "export" module-import-declaration 327 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 328 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 329 function-specifier → • "virtual" 330 | • explicit-specifier 390 linkage-specification → • "extern" string-literal "{" declaration-seq-opt "}" 391 | • "extern" string-literal declaration 428 module-import-declaration → • "import" module-name attribute-specifier-seq-opt ";" 429 | • "import" module-partition attribute-specifier-seq-opt ";" 430 | • "import" header-name attribute-specifier-seq-opt ";" 443 named-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 446 namespace-body → • declaration-seq-opt 447 namespace-definition → • named-namespace-definition 448 | • unnamed-namespace-definition 449 | • nested-namespace-definition 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 460 nested-namespace-definition → • "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" 460 | "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" • namespace-body "}" 476 nodeclspec-function-declaration → • attribute-specifier-seq-opt declarator ";" 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 690 template-declaration → • template-head declaration 691 | • template-head concept-definition 692 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 754 unnamed-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body "}" 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "export" shift, and go to state 2 "extern" shift, and go to state 3 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 5 "::" shift, and go to state 6 "template" shift, and go to state 7 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 ";" shift, and go to state 11 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "import" shift, and go to state 25 "namespace" shift, and go to state 26 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 268 (explicit-specifier-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "template" [reduce using rule 9 (EXTERN-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "}" reduce using rule 208 (declaration-seq-opt) "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "namespace" [reduce using rule 13 (INLINE-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) EXTERN-opt go to state 45 INLINE-opt go to state 46 alias-declaration go to state 47 asm-declaration go to state 48 attribute-declaration go to state 49 attribute-specifier-seq go to state 50 attribute-specifier-seq-opt go to state 51 block-declaration go to state 52 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration go to state 60 declaration-seq go to state 61 declaration-seq-opt go to state 830 decltype-specifier go to state 63 deduction-guide go to state 64 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 empty-declaration go to state 68 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-instantiation go to state 73 explicit-specialization go to state 74 explicit-specifier go to state 75 explicit-specifier-opt go to state 76 export-declaration go to state 77 function-definition go to state 78 function-specifier go to state 79 linkage-specification go to state 82 module-import-declaration go to state 83 named-namespace-definition go to state 84 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-body go to state 1120 namespace-definition go to state 87 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 nested-namespace-definition go to state 91 nodeclspec-function-declaration go to state 92 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-declaration go to state 100 template-head go to state 101 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 unnamed-namespace-definition go to state 110 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
677 static_assert-declaration → "static_assert" "(" constant-expression "," string-literal ")" • ";" ";" shift, and go to state 1121
443 named-namespace-definition → INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body • "}" "}" shift, and go to state 1122
754 unnamed-namespace-definition → INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body "}" • $default reduce using rule 754 (unnamed-namespace-definition)
767 using-directive → attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" • $default reduce using rule 767 (using-directive)
46 alignment-specifier → "alignas" "(" constant-expression ELLIPSIS-opt ")" • $default reduce using rule 46 (alignment-specifier)
45 alignment-specifier → "alignas" "(" type-id ELLIPSIS-opt ")" • $default reduce using rule 45 (alignment-specifier)
49 asm-declaration → attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" • $default reduce using rule 49 (asm-declaration)
87 attribute-using-prefix → "using" attribute-namespace ":" • $default reduce using rule 87 (attribute-using-prefix)
74 attribute-list → attribute "..." • $default reduce using rule 74 (attribute-list)
67 attribute → • attribute-token attribute-argument-clause-opt 73 attribute-list → attribute-list "," • attribute-opt 75 | attribute-list "," • attribute "..." 76 attribute-namespace → • IDENTIFIER 77 attribute-opt → • %empty [",", "]"] 78 | • attribute 79 attribute-scoped-token → • attribute-namespace "::" IDENTIFIER 85 attribute-token → • IDENTIFIER 86 | • attribute-scoped-token IDENTIFIER shift, and go to state 838 $default reduce using rule 77 (attribute-opt) attribute go to state 1123 attribute-namespace go to state 841 attribute-opt go to state 1124 attribute-scoped-token go to state 843 attribute-token go to state 844
80 attribute-specifier → "[" "[" attribute-using-prefix-opt attribute-list "]" • "]" "]" shift, and go to state 1125
79 attribute-scoped-token → attribute-namespace "::" • IDENTIFIER IDENTIFIER shift, and go to state 1126
68 attribute-argument-clause → "(" • balanced-token-seq-opt ")" 91 balanced-token → • "(" balanced-token-seq-opt ")" 92 | • "[" balanced-token-seq-opt "]" 93 | • "{" balanced-token-seq-opt "}" 94 | • BALANCED_TOKEN 95 balanced-token-seq → • balanced-token 96 | • balanced-token-seq balanced-token 97 balanced-token-seq-opt → • %empty [")"] 98 | • balanced-token-seq "(" shift, and go to state 1127 "[" shift, and go to state 1128 "{" shift, and go to state 1129 BALANCED_TOKEN shift, and go to state 1130 $default reduce using rule 97 (balanced-token-seq-opt) balanced-token go to state 1131 balanced-token-seq go to state 1132 balanced-token-seq-opt go to state 1133
70 attribute-argument-clause-opt → attribute-argument-clause • $default reduce using rule 70 (attribute-argument-clause-opt)
67 attribute → attribute-token attribute-argument-clause-opt • $default reduce using rule 67 (attribute)
343 identifier-list → identifier-list "," • IDENTIFIER IDENTIFIER shift, and go to state 1134
116 brace-or-equal-initializer → • "=" initializer-clause 117 | • braced-init-list 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 359 initializer → • brace-or-equal-initializer 360 | • "(" expression-list ")" 642 simple-declaration → attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" • initializer ";" "=" shift, and go to state 378 "(" shift, and go to state 379 "{" shift, and go to state 380 brace-or-equal-initializer go to state 382 braced-init-list go to state 383 initializer go to state 1135
326 function-body → "=" "delete" • ";" ";" shift, and go to state 1136
325 function-body → "=" "default" • ";" ";" shift, and go to state 1137
137 class-name → IDENTIFIER • ["::"] 246 enum-name → IDENTIFIER • ["::"] 401 mem-initializer-id → IDENTIFIER • ["(", "{"] 444 namespace-alias → IDENTIFIER • ["::"] 450 namespace-name → IDENTIFIER • ["::"] 696 template-name → IDENTIFIER • ["<"] 731 typedef-name → IDENTIFIER • ["::"] "::" reduce using rule 137 (class-name) "::" [reduce using rule 246 (enum-name)] "::" [reduce using rule 444 (namespace-alias)] "::" [reduce using rule 450 (namespace-name)] "::" [reduce using rule 731 (typedef-name)] "<" reduce using rule 696 (template-name) $default reduce using rule 401 (mem-initializer-id)
400 mem-initializer-id → class-or-decltype • $default reduce using rule 400 (mem-initializer-id)
5 ELLIPSIS-opt → • %empty [",", "{"] 6 | • "..." 402 mem-initializer-list → mem-initializer • ELLIPSIS-opt "..." shift, and go to state 156 $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 1138
120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 398 mem-initializer → mem-initializer-id • "(" expression-list-opt ")" 399 | mem-initializer-id • braced-init-list "(" shift, and go to state 1139 "{" shift, and go to state 380 braced-init-list go to state 1140
172 ctor-initializer → ":" mem-initializer-list • ["{"] 403 mem-initializer-list → mem-initializer-list • "," mem-initializer ELLIPSIS-opt "," shift, and go to state 1141 $default reduce using rule 172 (ctor-initializer)
149 compound-statement → • "{" statement-seq-opt "}" 331 function-try-block → "try" ctor-initializer-opt • compound-statement handler-seq "{" shift, and go to state 794 compound-statement go to state 1142
323 function-body → ctor-initializer-opt compound-statement • $default reduce using rule 323 (function-body)
553 parameters-and-qualifiers → "(" parameter-declaration-clause ")" cv-qualifier-seq-opt • ref-qualifier-opt noexcept-specifier-opt attribute-specifier-seq-opt 602 ref-qualifier → • "&" 603 | • "&&" 604 ref-qualifier-opt → • %empty [",", "...", "noexcept", "=", ";", "alignas", "(", ")", "[", ":", "{", "final", "->", ">", "try", "requires", "override"] 605 | • ref-qualifier "&" shift, and go to state 339 "&&" shift, and go to state 340 $default reduce using rule 604 (ref-qualifier-opt) ref-qualifier go to state 341 ref-qualifier-opt go to state 1143
548 parameter-declaration-clause → parameter-declaration-list "," "..." • $default reduce using rule 548 (parameter-declaration-clause)
550 parameter-declaration-list → parameter-declaration-list "," parameter-declaration • $default reduce using rule 550 (parameter-declaration-list)
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 492 noptr-declarator → noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt • [",", "...", "=", ";", "(", ")", "[", ":", "{", "final", ">", "try", "requires", "override"] "alignas" shift, and go to state 158 "[" shift, and go to state 162 "[" [reduce using rule 492 (noptr-declarator)] $default reduce using rule 492 (noptr-declarator) alignment-specifier go to state 166 attribute-specifier go to state 167
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 418 member-declarator → IDENTIFIER-opt attribute-specifier-seq-opt • ":" constant-expression brace-or-equal-initializer-opt "alignas" shift, and go to state 158 "[" shift, and go to state 162 ":" shift, and go to state 1144 alignment-specifier go to state 166 attribute-specifier go to state 167
119 brace-or-equal-initializer-opt → brace-or-equal-initializer • $default reduce using rule 119 (brace-or-equal-initializer-opt)
417 member-declarator → declarator brace-or-equal-initializer-opt • $default reduce using rule 417 (member-declarator)
172 ctor-initializer → • ":" mem-initializer-list 173 ctor-initializer-opt → • %empty ["{"] 174 | • ctor-initializer 323 function-body → • ctor-initializer-opt compound-statement 324 | • function-try-block 325 | • "=" "default" ";" 326 | • "=" "delete" ";" 328 function-definition → attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause • function-body 331 function-try-block → • "try" ctor-initializer-opt compound-statement handler-seq 416 member-declarator → declarator requires-clause • [",", ";"] "=" shift, and go to state 848 ":" shift, and go to state 849 "try" shift, and go to state 850 "{" reduce using rule 173 (ctor-initializer-opt) $default reduce using rule 416 (member-declarator) ctor-initializer go to state 851 ctor-initializer-opt go to state 852 function-body go to state 853 function-try-block go to state 854
172 ctor-initializer → • ":" mem-initializer-list 173 ctor-initializer-opt → • %empty ["{"] 174 | • ctor-initializer 323 function-body → • ctor-initializer-opt compound-statement 324 | • function-try-block 325 | • "=" "default" ";" 326 | • "=" "delete" ";" 327 function-definition → attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt • function-body 331 function-try-block → • "try" ctor-initializer-opt compound-statement handler-seq 415 member-declarator → declarator virt-specifier-seq-opt • pure-specifier-opt 597 pure-specifier → • "=" '0' 598 pure-specifier-opt → • %empty [",", ";"] 599 | • pure-specifier "=" shift, and go to state 1145 ":" shift, and go to state 849 "try" shift, and go to state 850 "{" reduce using rule 173 (ctor-initializer-opt) $default reduce using rule 598 (pure-specifier-opt) ctor-initializer go to state 851 ctor-initializer-opt go to state 852 function-body go to state 856 function-try-block go to state 854 pure-specifier go to state 1146 pure-specifier-opt go to state 1147
5 ELLIPSIS-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 6 | • "..." 11 IDENTIFIER-opt → • %empty ["alignas", "[", ":"] 12 | • IDENTIFIER 137 class-name → • IDENTIFIER 138 | • simple-template-id 211 declarator → • ptr-declarator 212 | • noptr-declarator parameters-and-qualifiers trailing-return-type 213 declarator-id → • ELLIPSIS-opt id-expression 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 415 member-declarator → • declarator virt-specifier-seq-opt pure-specifier-opt 416 | • declarator requires-clause 417 | • declarator brace-or-equal-initializer-opt 418 | • IDENTIFIER-opt attribute-specifier-seq-opt ":" constant-expression brace-or-equal-initializer-opt 420 member-declarator-list → member-declarator-list "," • member-declarator 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 490 noptr-declarator → • declarator-id attribute-specifier-seq-opt 491 | • noptr-declarator parameters-and-qualifiers 492 | • noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 493 | • "(" ptr-declarator ")" 591 ptr-declarator → • noptr-declarator 592 | • ptr-operator ptr-declarator 593 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 594 | • "&" attribute-specifier-seq-opt 595 | • "&&" attribute-specifier-seq-opt 596 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id "..." shift, and go to state 156 IDENTIFIER shift, and go to state 864 "::" shift, and go to state 6 "(" shift, and go to state 159 "&" shift, and go to state 160 "&&" shift, and go to state 163 "decltype" shift, and go to state 21 "*" shift, and go to state 164 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "::" [reduce using rule 5 (ELLIPSIS-opt)] "operator" reduce using rule 5 (ELLIPSIS-opt) "decltype" [reduce using rule 5 (ELLIPSIS-opt)] "~" reduce using rule 5 (ELLIPSIS-opt) $default reduce using rule 11 (IDENTIFIER-opt) ELLIPSIS-opt go to state 165 IDENTIFIER-opt go to state 865 class-name go to state 55 declarator go to state 1148 declarator-id go to state 171 decltype-specifier go to state 121 enum-name go to state 71 member-declarator go to state 1149 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 187 noptr-declarator go to state 173 ptr-declarator go to state 174 ptr-operator go to state 175 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
404 member-declaration → attribute-specifier-seq-opt decl-specifier-seq-opt member-declarator-list-opt ";" • $default reduce using rule 404 (member-declaration)
40 access-specifier-opt → access-specifier • $default reduce using rule 40 (access-specifier-opt)
103 base-specifier → attribute-specifier-seq-opt "virtual" access-specifier-opt • class-or-decltype 137 class-name → • IDENTIFIER 138 | • simple-template-id 139 class-or-decltype → • nested-name-specifier-opt type-name 140 | • nested-name-specifier "template" simple-template-id 141 | • decltype-specifier 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] class-name go to state 55 class-or-decltype go to state 1150 decltype-specifier go to state 874 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 875 nested-name-specifier-opt go to state 876 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
28 VIRTUAL-opt → "virtual" • $default reduce using rule 28 (VIRTUAL-opt)
104 base-specifier → attribute-specifier-seq-opt access-specifier VIRTUAL-opt • class-or-decltype 137 class-name → • IDENTIFIER 138 | • simple-template-id 139 class-or-decltype → • nested-name-specifier-opt type-name 140 | • nested-name-specifier "template" simple-template-id 141 | • decltype-specifier 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] class-name go to state 55 class-or-decltype go to state 1151 decltype-specifier go to state 874 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 875 nested-name-specifier-opt go to state 876 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
22 TEMPLATE-opt → "template" • [IDENTIFIER] 140 class-or-decltype → nested-name-specifier "template" • simple-template-id 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER IDENTIFIER shift, and go to state 192 IDENTIFIER [reduce using rule 22 (TEMPLATE-opt)] simple-template-id go to state 1152 template-name go to state 102
139 class-or-decltype → nested-name-specifier-opt type-name • $default reduce using rule 139 (class-or-decltype)
5 ELLIPSIS-opt → • %empty [",", "{"] 6 | • "..." 106 base-specifier-list → base-specifier-list "," base-specifier • ELLIPSIS-opt "..." shift, and go to state 156 $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 1153
5 ELLIPSIS-opt → • %empty [",", ")", "]", "}"] 6 | • "..." 364 initializer-list → initializer-list "," initializer-clause • ELLIPSIS-opt "..." shift, and go to state 156 $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 1154
226 designated-initializer-list → designated-initializer-list "," designated-initializer-clause • $default reduce using rule 226 (designated-initializer-list)
121 braced-init-list → "{" designated-initializer-list COMMA-opt "}" • $default reduce using rule 121 (braced-init-list)
120 braced-init-list → "{" initializer-list COMMA-opt "}" • $default reduce using rule 120 (braced-init-list)
163 constraint-logical-and-expression → constraint-logical-and-expression "&&" primary-expression • $default reduce using rule 163 (constraint-logical-and-expression)
163 constraint-logical-and-expression → constraint-logical-and-expression • "&&" primary-expression 165 constraint-logical-or-expression → constraint-logical-or-expression "||" constraint-logical-and-expression • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "using", "=", ";", "alignas", "(", "&", "asm", "[", ":", "{", "class", "struct", "union", "concept", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", "enum", "explicit", "*", "try", "import", "namespace", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable"] "&&" shift, and go to state 889 $default reduce using rule 165 (constraint-logical-or-expression) Conflict between rule 165 and token "&&" resolved as shift ("||" < "&&").
215 deduction-guide → explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" • simple-template-id ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER IDENTIFIER shift, and go to state 192 simple-template-id go to state 1155 template-name go to state 102
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 427 module-declaration → EXPORT-opt "module" module-name module-partition-opt attribute-specifier-seq-opt • ";" ";" shift, and go to state 1156 "alignas" shift, and go to state 158 "[" shift, and go to state 162 alignment-specifier go to state 166 attribute-specifier go to state 167
584 private-module-fragment → "module" ":" "private" • ";" declaration-seq-opt ";" shift, and go to state 1157
150 concept-definition → "concept" concept-name "=" constraint-expression ";" • $default reduce using rule 150 (concept-definition)
229 elaborated-type-specifier → class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER • $default reduce using rule 229 (elaborated-type-specifier)
687 template-argument-list → template-argument-list "," template-argument ELLIPSIS-opt • $default reduce using rule 687 (template-argument-list)
482 noptr-abstract-declarator → noptr-abstract-declarator-opt parameters-and-qualifiers • $default reduce using rule 482 (noptr-abstract-declarator)
484 noptr-abstract-declarator → "(" ptr-abstract-declarator ")" • $default reduce using rule 484 (noptr-abstract-declarator)
483 noptr-abstract-declarator → noptr-abstract-declarator-opt "[" constant-expression-opt • "]" attribute-specifier-seq-opt "]" shift, and go to state 1158
30 abstract-declarator → noptr-abstract-declarator-opt parameters-and-qualifiers trailing-return-type • $default reduce using rule 30 (abstract-declarator)
488 noptr-abstract-pack-declarator → noptr-abstract-pack-declarator "[" constant-expression-opt • "]" attribute-specifier-seq-opt "]" shift, and go to state 1159
5 ELLIPSIS-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 6 | • "..." 137 class-name → • IDENTIFIER 138 | • simple-template-id 213 declarator-id → • ELLIPSIS-opt id-expression 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 482 noptr-abstract-declarator → • noptr-abstract-declarator-opt parameters-and-qualifiers 483 | • noptr-abstract-declarator-opt "[" constant-expression-opt "]" attribute-specifier-seq-opt 484 | • "(" ptr-abstract-declarator ")" 485 noptr-abstract-declarator-opt → • %empty ["(", "["] 486 | • noptr-abstract-declarator 490 noptr-declarator → • declarator-id attribute-specifier-seq-opt 491 | • noptr-declarator parameters-and-qualifiers 492 | • noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 493 | • "(" ptr-declarator ")" 587 ptr-abstract-declarator → • noptr-abstract-declarator 588 | • ptr-operator ptr-abstract-declarator-opt 588 | ptr-operator • ptr-abstract-declarator-opt 589 ptr-abstract-declarator-opt → • %empty [")"] 590 | • ptr-abstract-declarator 591 ptr-declarator → • noptr-declarator 592 | • ptr-operator ptr-declarator 592 | ptr-operator • ptr-declarator 593 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 594 | • "&" attribute-specifier-seq-opt 595 | • "&&" attribute-specifier-seq-opt 596 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id "..." shift, and go to state 156 IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 917 "&" shift, and go to state 160 "&&" shift, and go to state 163 "decltype" shift, and go to state 21 "*" shift, and go to state 164 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "::" [reduce using rule 5 (ELLIPSIS-opt)] "(" [reduce using rule 485 (noptr-abstract-declarator-opt)] ")" reduce using rule 589 (ptr-abstract-declarator-opt) "[" reduce using rule 485 (noptr-abstract-declarator-opt) "decltype" [reduce using rule 5 (ELLIPSIS-opt)] $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 165 class-name go to state 55 declarator-id go to state 171 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 187 noptr-abstract-declarator go to state 687 noptr-abstract-declarator-opt go to state 905 noptr-declarator go to state 329 ptr-abstract-declarator go to state 913 ptr-abstract-declarator-opt go to state 914 ptr-declarator go to state 350 ptr-operator go to state 1052 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 361 initializer-clause → • assignment-expression 362 | • braced-init-list 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 546 parameter-declaration → attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt "=" • initializer-clause 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "{" shift, and go to state 380 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 261 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 "co_yield" shift, and go to state 264 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 assignment-expression go to state 642 await-expression go to state 269 braced-init-list go to state 643 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 272 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 initializer-clause go to state 1160 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 285 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 throw-expression go to state 302 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306 yield-expression go to state 307
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 361 initializer-clause → • assignment-expression 362 | • braced-init-list 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 544 parameter-declaration → attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator "=" • initializer-clause 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "{" shift, and go to state 380 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 261 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 "co_yield" shift, and go to state 264 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 assignment-expression go to state 642 await-expression go to state 269 braced-init-list go to state 643 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 272 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 initializer-clause go to state 1161 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 285 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 throw-expression go to state 302 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306 yield-expression go to state 307
721 type-parameter → template-head type-parameter-key IDENTIFIER-opt "=" id-expression • $default reduce using rule 721 (type-parameter)
286 fold-expression → "(" "..." fold-operator cast-expression ")" • $default reduce using rule 286 (fold-expression)
285 fold-expression → "(" cast-expression fold-operator "..." ")" • $default reduce using rule 285 (fold-expression)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 287 | "(" cast-expression fold-operator "..." fold-operator • cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 await-expression go to state 269 cast-expression go to state 1162 class-name go to state 55 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 fold-expression go to state 278 id-expression go to state 279 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 requires-expression go to state 296 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306
347 init-capture → "&" ELLIPSIS-opt IDENTIFIER initializer • $default reduce using rule 347 (init-capture)
498 operator-function-id → "operator" overloadable-operator "<" template-argument-list-opt ">" • $default reduce using rule 498 (operator-function-id)
21 TEMPLATE-opt → • %empty [IDENTIFIER] 22 | • "template" 456 nested-name-specifier → nested-name-specifier • IDENTIFIER "::" 457 | nested-name-specifier • TEMPLATE-opt simple-template-id "::" 459 nested-name-specifier-opt → nested-name-specifier • [IDENTIFIER] 733 typename-specifier → "typename" nested-name-specifier • IDENTIFIER 734 | "typename" nested-name-specifier • TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 229 "template" shift, and go to state 230 IDENTIFIER [reduce using rule 21 (TEMPLATE-opt)] IDENTIFIER [reduce using rule 459 (nested-name-specifier-opt)] TEMPLATE-opt go to state 231
137 class-name → • IDENTIFIER 138 | • simple-template-id 246 enum-name → • IDENTIFIER 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 724 type-requirement → "typename" nested-name-specifier-opt • type-name ";" 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 507 class-name go to state 55 enum-name go to state 71 simple-template-id go to state 96 template-name go to state 102 type-name go to state 1163 typedef-name go to state 108
148 compound-requirement → "{" expression • "}" NOEXCEPT-opt return-type-requirement-opt ";" 278 expression → expression • "," assignment-expression "," shift, and go to state 534 "}" shift, and go to state 1164
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "this", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 130 | "(" • type-id ")" cast-expression 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 277 expression → • assignment-expression 278 | • expression "," assignment-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 285 | "(" • cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 286 | "(" • "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 287 | "(" • cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 543 parameter-declaration → • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator 544 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator "=" initializer-clause 545 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt 546 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt "=" initializer-clause 547 parameter-declaration-clause → • parameter-declaration-list-opt ELLIPSIS-opt 548 | • parameter-declaration-list "," "..." 549 parameter-declaration-list → • parameter-declaration 550 | • parameter-declaration-list "," parameter-declaration 551 parameter-declaration-list-opt → • %empty ["...", ")"] 552 | • parameter-declaration-list 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 579 | "(" • expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 616 requirement-parameter-list → "(" • parameter-declaration-clause ")" 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 712 type-id → • type-specifier-seq abstract-declarator-opt 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 729 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 730 | • type-specifier type-specifier-seq 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list "..." shift, and go to state 439 IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "operator" shift, and go to state 249 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 125 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 261 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 "co_yield" shift, and go to state 264 "..." [reduce using rule 551 (parameter-declaration-list-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "this" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] ")" reduce using rule 551 (parameter-declaration-list-opt) "[" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "delete" reduce using rule 19 (SCOPE-opt) "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "new" reduce using rule 19 (SCOPE-opt) "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 assignment-expression go to state 268 attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 220 await-expression go to state 269 cast-expression go to state 440 class-key go to state 406 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 272 conversion-function-id go to state 273 cv-qualifier go to state 57 decltype-specifier go to state 63 delete-expression go to state 274 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 expression go to state 441 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 285 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 parameter-declaration go to state 619 parameter-declaration-clause go to state 763 parameter-declaration-list go to state 621 parameter-declaration-list-opt go to state 622 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 409 string-literal go to state 300 template-id go to state 301 template-name go to state 102 throw-expression go to state 302 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 442 type-name go to state 106 type-specifier go to state 414 type-specifier-seq go to state 415 typedef-name go to state 108 typename-specifier go to state 416 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306 yield-expression go to state 307
461 nested-requirement → "requires" constraint-expression • ";" ";" shift, and go to state 1165
643 simple-requirement → expression ";" • $default reduce using rule 643 (simple-requirement)
615 requirement-body → "{" requirement-seq "}" • $default reduce using rule 615 (requirement-body)
620 requirement-seq → requirement-seq requirement • $default reduce using rule 620 (requirement-seq)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 277 expression → • assignment-expression 278 | • expression "," assignment-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 570 | "dynamic_cast" "<" type-id ">" "(" • expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 261 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 "co_yield" shift, and go to state 264 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 assignment-expression go to state 268 await-expression go to state 269 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 272 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 expression go to state 1166 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 285 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 throw-expression go to state 302 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306 yield-expression go to state 307
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 277 expression → • assignment-expression 278 | • expression "," assignment-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 571 | "static_cast" "<" type-id ">" "(" • expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 261 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 "co_yield" shift, and go to state 264 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 assignment-expression go to state 268 await-expression go to state 269 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 272 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 expression go to state 1167 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 285 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 throw-expression go to state 302 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306 yield-expression go to state 307
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 277 expression → • assignment-expression 278 | • expression "," assignment-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 572 | "reinterpret_cast" "<" type-id ">" "(" • expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 261 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 "co_yield" shift, and go to state 264 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 assignment-expression go to state 268 await-expression go to state 269 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 272 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 expression go to state 1168 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 285 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 throw-expression go to state 302 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306 yield-expression go to state 307
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 277 expression → • assignment-expression 278 | • expression "," assignment-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 573 | "const_cast" "<" type-id ">" "(" • expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 261 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 "co_yield" shift, and go to state 264 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 assignment-expression go to state 268 await-expression go to state 269 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 272 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 expression go to state 1169 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 285 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 throw-expression go to state 302 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306 yield-expression go to state 307
743 unary-expression → "sizeof" "..." "(" IDENTIFIER ")" • $default reduce using rule 743 (unary-expression)
223 delete-expression → SCOPE-opt "delete" "[" "]" cast-expression • $default reduce using rule 223 (delete-expression)
472 new-placement → "(" expression-list ")" • $default reduce using rule 472 (new-placement)
467 new-expression → SCOPE-opt "new" new-placement-opt "(" type-id • ")" new-initializer-opt ")" shift, and go to state 1170
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 279 expression-list → • initializer-list 280 expression-list-opt → • %empty [")"] 281 | • expression-list 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 361 initializer-clause → • assignment-expression 362 | • braced-init-list 363 initializer-list → • initializer-clause ELLIPSIS-opt 364 | • initializer-list "," initializer-clause ELLIPSIS-opt 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 468 new-initializer → "(" • expression-list-opt ")" 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "{" shift, and go to state 380 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 261 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 "co_yield" shift, and go to state 264 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] ")" reduce using rule 280 (expression-list-opt) "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 assignment-expression go to state 642 await-expression go to state 269 braced-init-list go to state 643 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 272 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 expression-list go to state 810 expression-list-opt go to state 1171 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 initializer-clause go to state 646 initializer-list go to state 647 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 285 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 throw-expression go to state 302 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306 yield-expression go to state 307
469 new-initializer → braced-init-list • $default reduce using rule 469 (new-initializer)
471 new-initializer-opt → new-initializer • $default reduce using rule 471 (new-initializer-opt)
466 new-expression → SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt • $default reduce using rule 466 (new-expression)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 277 expression → • assignment-expression 278 | • expression "," assignment-expression 282 expression-opt → • %empty ["]"] 283 | • expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 494 noptr-new-declarator → "[" • expression-opt "]" attribute-specifier-seq-opt 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 261 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 "co_yield" shift, and go to state 264 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "]" reduce using rule 282 (expression-opt) "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 assignment-expression go to state 268 await-expression go to state 269 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 272 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 expression go to state 1110 expression-opt go to state 1172 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 285 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 throw-expression go to state 302 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306 yield-expression go to state 307
465 new-declarator-opt → new-declarator • $default reduce using rule 465 (new-declarator-opt)
475 new-type-id → type-specifier-seq new-declarator-opt • $default reduce using rule 475 (new-type-id)
463 new-declarator → noptr-new-declarator • [",", "...", "+", "-", "=", ";", "(", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*"] 495 noptr-new-declarator → noptr-new-declarator • "[" constant-expression "]" attribute-specifier-seq-opt "[" shift, and go to state 1173 $default reduce using rule 463 (new-declarator)
137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 462 new-declarator → • ptr-operator new-declarator-opt 462 | ptr-operator • new-declarator-opt 463 | • noptr-new-declarator 464 new-declarator-opt → • %empty [",", "...", "+", "-", "=", ";", "(", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*"] 465 | • new-declarator 494 noptr-new-declarator → • "[" expression-opt "]" attribute-specifier-seq-opt 495 | • noptr-new-declarator "[" constant-expression "]" attribute-specifier-seq-opt 593 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 594 | • "&" attribute-specifier-seq-opt 595 | • "&&" attribute-specifier-seq-opt 596 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "&" shift, and go to state 160 "[" shift, and go to state 1081 "&&" shift, and go to state 163 "decltype" shift, and go to state 21 "*" shift, and go to state 164 "&" [reduce using rule 464 (new-declarator-opt)] "&&" [reduce using rule 464 (new-declarator-opt)] "*" [reduce using rule 464 (new-declarator-opt)] $default reduce using rule 464 (new-declarator-opt) class-name go to state 55 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 187 new-declarator go to state 1082 new-declarator-opt go to state 1174 noptr-new-declarator go to state 1084 ptr-operator go to state 1085 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
385 lambda-declarator → "(" parameter-declaration-clause ")" lambda-specifiers • requires-clause-opt 621 requires-clause → • "requires" constraint-logical-or-expression 622 requires-clause-opt → • %empty ["{"] 623 | • requires-clause "requires" shift, and go to state 381 $default reduce using rule 622 (requires-clause-opt) requires-clause go to state 698 requires-clause-opt go to state 1175
131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 191 decl-specifier-seq-opt → • %empty ["noexcept", "alignas", "[", "{", "->"] 192 | • decl-specifier-seq 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 329 function-specifier → • "virtual" 330 | • explicit-specifier 384 lambda-declarator → • lambda-specifiers 385 | • "(" parameter-declaration-clause ")" lambda-specifiers requires-clause-opt 387 lambda-expression → lambda-introducer "<" template-parameter-list ">" requires-clause-opt • lambda-declarator compound-statement 389 lambda-specifiers → • decl-specifier-seq-opt noexcept-specifier-opt attribute-specifier-seq-opt trailing-return-type-opt 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 151 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "(" shift, and go to state 537 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 191 (decl-specifier-seq-opt) class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 539 decl-specifier-seq-opt go to state 540 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 154 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 155 function-specifier go to state 79 lambda-declarator go to state 1176 lambda-specifiers go to state 542 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109
478 noexcept-specifier → "noexcept" "(" constant-expression • ")" ")" shift, and go to state 1177
704 trailing-return-type-opt → trailing-return-type • $default reduce using rule 704 (trailing-return-type-opt)
389 lambda-specifiers → decl-specifier-seq-opt noexcept-specifier-opt attribute-specifier-seq-opt trailing-return-type-opt • $default reduce using rule 389 (lambda-specifiers)
445 namespace-alias-definition → "namespace" IDENTIFIER • "=" qualified-namespace-specifier ";" "=" shift, and go to state 320
137 class-name → IDENTIFIER • ["::"] 246 enum-name → IDENTIFIER • ["::"] 376 labeled-statement → attribute-specifier-seq-opt IDENTIFIER • ":" statement 444 namespace-alias → IDENTIFIER • ["::"] 450 namespace-name → IDENTIFIER • ["::"] 696 template-name → IDENTIFIER • ["<"] 731 typedef-name → IDENTIFIER • ["::"] 755 unqualified-id → IDENTIFIER • [",", "+", "-", "=", ";", "(", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "<=>", "?", "&&", "||", "->", ".", "==", "!=", "^", "<", ">", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "++", "--"] ":" shift, and go to state 1178 "::" reduce using rule 137 (class-name) "::" [reduce using rule 246 (enum-name)] "::" [reduce using rule 444 (namespace-alias)] "::" [reduce using rule 450 (namespace-name)] "::" [reduce using rule 731 (typedef-name)] "<" reduce using rule 696 (template-name) "<" [reduce using rule 755 (unqualified-id)] $default reduce using rule 755 (unqualified-id)
5 ELLIPSIS-opt → • %empty [IDENTIFIER] 6 | • "..." 80 attribute-specifier → "[" • "[" attribute-using-prefix-opt attribute-list "]" "]" 123 capture → • simple-capture 124 | • init-capture 125 capture-default → • "&" 126 | • "=" 127 capture-list → • capture 128 | • capture-list "," capture 346 init-capture → • ELLIPSIS-opt IDENTIFIER initializer 347 | • "&" ELLIPSIS-opt IDENTIFIER initializer 379 lambda-capture → • capture-default 380 | • capture-list 381 | • capture-default "," capture-list 382 lambda-capture-opt → • %empty ["]"] 383 | • lambda-capture 388 lambda-introducer → "[" • lambda-capture-opt "]" 636 simple-capture → • IDENTIFIER ELLIPSIS-opt 637 | • "&" IDENTIFIER ELLIPSIS-opt 638 | • "this" 639 | • "*" "this" "..." shift, and go to state 156 IDENTIFIER shift, and go to state 443 "this" shift, and go to state 444 "=" shift, and go to state 445 "&" shift, and go to state 446 "[" shift, and go to state 333 "*" shift, and go to state 447 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] $default reduce using rule 382 (lambda-capture-opt) ELLIPSIS-opt go to state 448 capture go to state 449 capture-default go to state 450 capture-list go to state 451 init-capture go to state 452 lambda-capture go to state 453 lambda-capture-opt go to state 454 simple-capture go to state 455
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 171 coroutine-return-statement → "co_return" • expr-or-braced-init-list-opt ";" 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 273 expr-or-braced-init-list → • expression 274 | • braced-init-list 275 expr-or-braced-init-list-opt → • %empty [";"] 276 | • expr-or-braced-init-list 277 expression → • assignment-expression 278 | • expression "," assignment-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "{" shift, and go to state 380 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 261 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 "co_yield" shift, and go to state 264 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] ";" reduce using rule 275 (expr-or-braced-init-list-opt) "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 assignment-expression go to state 268 await-expression go to state 269 braced-init-list go to state 1179 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 272 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 expr-or-braced-init-list go to state 1180 expr-or-braced-init-list-opt go to state 1181 expression go to state 1182 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 285 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 throw-expression go to state 302 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306 yield-expression go to state 307
378 labeled-statement → attribute-specifier-seq-opt "default" • ":" statement ":" shift, and go to state 1183
149 compound-statement → • "{" statement-seq-opt "}" 707 try-block → "try" • compound-statement handler-seq "{" shift, and go to state 794 compound-statement go to state 1184
367 iteration-statement → "while" • "(" condition ")" statement "(" shift, and go to state 1185
44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "using", ";", "alignas", "(", "&", "asm", "[", "co_await", "{", "class", "struct", "union", "operator", "co_return", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", "*", "default", "try", "while", "do", "for", "break", "continue", "return", "goto", "case", "requires", "new", "~", "++", "--", "auto", "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "literal", "if", "switch", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", "co_yield"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 210 declaration-statement → • block-declaration 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 329 function-specifier → • "virtual" 330 | • explicit-specifier 368 iteration-statement → "do" • statement "while" "(" expression ")" ";" 376 labeled-statement → • attribute-specifier-seq-opt IDENTIFIER ":" statement 377 | • attribute-specifier-seq-opt "case" constant-expression ":" statement 378 | • attribute-specifier-seq-opt "default" ":" statement 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 664 statement → • labeled-statement 665 | • attribute-specifier-seq-opt expression-statement 666 | • attribute-specifier-seq-opt compound-statement 667 | • attribute-specifier-seq-opt selection-statement 668 | • attribute-specifier-seq-opt iteration-statement 669 | • attribute-specifier-seq-opt jump-statement 670 | • declaration-statement 671 | • attribute-specifier-seq-opt try-block 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 151 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "namespace" shift, and go to state 972 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) alias-declaration go to state 47 asm-declaration go to state 48 attribute-specifier-seq go to state 973 attribute-specifier-seq-opt go to state 974 block-declaration go to state 975 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration-statement go to state 976 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 155 function-specifier go to state 79 labeled-statement go to state 977 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 statement go to state 1186 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
369 iteration-statement → "for" • "(" init-statement condition-opt ";" expression-opt ")" statement 370 | "for" • "(" init-statement-opt for-range-declaration ":" for-range-initializer ")" statement "(" shift, and go to state 1187
371 jump-statement → "break" • ";" ";" shift, and go to state 1188
372 jump-statement → "continue" • ";" ";" shift, and go to state 1189
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 273 expr-or-braced-init-list → • expression 274 | • braced-init-list 275 expr-or-braced-init-list-opt → • %empty [";"] 276 | • expr-or-braced-init-list 277 expression → • assignment-expression 278 | • expression "," assignment-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 373 jump-statement → "return" • expr-or-braced-init-list-opt ";" 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "{" shift, and go to state 380 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 261 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 "co_yield" shift, and go to state 264 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] ";" reduce using rule 275 (expr-or-braced-init-list-opt) "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 assignment-expression go to state 268 await-expression go to state 269 braced-init-list go to state 1179 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 272 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 expr-or-braced-init-list go to state 1180 expr-or-braced-init-list-opt go to state 1190 expression go to state 1182 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 285 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 throw-expression go to state 302 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306 yield-expression go to state 307
375 jump-statement → "goto" • IDENTIFIER ";" IDENTIFIER shift, and go to state 1191
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 158 constant-expression → • conditional-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 377 labeled-statement → attribute-specifier-seq-opt "case" • constant-expression ":" statement 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 await-expression go to state 269 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 309 constant-expression go to state 1192 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 311 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306
3 CONSTEXPR-opt → • %empty ["("] 4 | • "constexpr" 17 NOT-opt → • %empty ["consteval"] 18 | • "!" 628 selection-statement → "if" • CONSTEXPR-opt "(" init-statement-opt condition ")" statement 629 | "if" • CONSTEXPR-opt "(" init-statement-opt condition ")" statement "else" statement 630 | "if" • NOT-opt "consteval" compound-statement 631 | "if" • NOT-opt "consteval" compound-statement "else" statement "constexpr" shift, and go to state 1193 "!" shift, and go to state 1194 "consteval" reduce using rule 17 (NOT-opt) $default reduce using rule 3 (CONSTEXPR-opt) CONSTEXPR-opt go to state 1195 NOT-opt go to state 1196
632 selection-statement → "switch" • "(" init-statement-opt condition ")" statement "(" shift, and go to state 1197
666 statement → attribute-specifier-seq-opt compound-statement • $default reduce using rule 666 (statement)
374 jump-statement → coroutine-return-statement • $default reduce using rule 374 (jump-statement)
602 ref-qualifier → • "&" 603 | • "&&" 604 ref-qualifier-opt → • %empty ["["] 605 | • ref-qualifier 642 simple-declaration → attribute-specifier-seq-opt decl-specifier-seq • ref-qualifier-opt "[" identifier-list "]" initializer ";" "&" shift, and go to state 339 "&&" shift, and go to state 340 $default reduce using rule 604 (ref-qualifier-opt) ref-qualifier go to state 341 ref-qualifier-opt go to state 342
278 expression → expression • "," assignment-expression 283 expression-opt → expression • [";", ")", "]"] "," shift, and go to state 534 $default reduce using rule 283 (expression-opt)
284 expression-statement → expression-opt • ";" ";" shift, and go to state 1198
665 statement → attribute-specifier-seq-opt expression-statement • $default reduce using rule 665 (statement)
668 statement → attribute-specifier-seq-opt iteration-statement • $default reduce using rule 668 (statement)
669 statement → attribute-specifier-seq-opt jump-statement • $default reduce using rule 669 (statement)
667 statement → attribute-specifier-seq-opt selection-statement • $default reduce using rule 667 (statement)
671 statement → attribute-specifier-seq-opt try-block • $default reduce using rule 671 (statement)
673 statement-seq → statement-seq statement • $default reduce using rule 673 (statement-seq)
149 compound-statement → "{" statement-seq-opt "}" • $default reduce using rule 149 (compound-statement)
157 conditional-expression → logical-or-expression "?" expression ":" assignment-expression • $default reduce using rule 157 (conditional-expression)
460 nested-namespace-definition → "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body • "}" "}" shift, and go to state 1199
677 static_assert-declaration → "static_assert" "(" constant-expression "," string-literal ")" ";" • $default reduce using rule 677 (static_assert-declaration)
443 named-namespace-definition → INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" • $default reduce using rule 443 (named-namespace-definition)
75 attribute-list → attribute-list "," attribute • "..." 78 attribute-opt → attribute • [",", "]"] "..." shift, and go to state 1200 $default reduce using rule 78 (attribute-opt)
73 attribute-list → attribute-list "," attribute-opt • $default reduce using rule 73 (attribute-list)
80 attribute-specifier → "[" "[" attribute-using-prefix-opt attribute-list "]" "]" • $default reduce using rule 80 (attribute-specifier)
79 attribute-scoped-token → attribute-namespace "::" IDENTIFIER • $default reduce using rule 79 (attribute-scoped-token)
91 balanced-token → • "(" balanced-token-seq-opt ")" 91 | "(" • balanced-token-seq-opt ")" 92 | • "[" balanced-token-seq-opt "]" 93 | • "{" balanced-token-seq-opt "}" 94 | • BALANCED_TOKEN 95 balanced-token-seq → • balanced-token 96 | • balanced-token-seq balanced-token 97 balanced-token-seq-opt → • %empty [")"] 98 | • balanced-token-seq "(" shift, and go to state 1127 "[" shift, and go to state 1128 "{" shift, and go to state 1129 BALANCED_TOKEN shift, and go to state 1130 $default reduce using rule 97 (balanced-token-seq-opt) balanced-token go to state 1131 balanced-token-seq go to state 1132 balanced-token-seq-opt go to state 1201
91 balanced-token → • "(" balanced-token-seq-opt ")" 92 | • "[" balanced-token-seq-opt "]" 92 | "[" • balanced-token-seq-opt "]" 93 | • "{" balanced-token-seq-opt "}" 94 | • BALANCED_TOKEN 95 balanced-token-seq → • balanced-token 96 | • balanced-token-seq balanced-token 97 balanced-token-seq-opt → • %empty ["]"] 98 | • balanced-token-seq "(" shift, and go to state 1127 "[" shift, and go to state 1128 "{" shift, and go to state 1129 BALANCED_TOKEN shift, and go to state 1130 $default reduce using rule 97 (balanced-token-seq-opt) balanced-token go to state 1131 balanced-token-seq go to state 1132 balanced-token-seq-opt go to state 1202
91 balanced-token → • "(" balanced-token-seq-opt ")" 92 | • "[" balanced-token-seq-opt "]" 93 | • "{" balanced-token-seq-opt "}" 93 | "{" • balanced-token-seq-opt "}" 94 | • BALANCED_TOKEN 95 balanced-token-seq → • balanced-token 96 | • balanced-token-seq balanced-token 97 balanced-token-seq-opt → • %empty ["}"] 98 | • balanced-token-seq "(" shift, and go to state 1127 "[" shift, and go to state 1128 "{" shift, and go to state 1129 BALANCED_TOKEN shift, and go to state 1130 $default reduce using rule 97 (balanced-token-seq-opt) balanced-token go to state 1131 balanced-token-seq go to state 1132 balanced-token-seq-opt go to state 1203
94 balanced-token → BALANCED_TOKEN • $default reduce using rule 94 (balanced-token)
95 balanced-token-seq → balanced-token • $default reduce using rule 95 (balanced-token-seq)
91 balanced-token → • "(" balanced-token-seq-opt ")" 92 | • "[" balanced-token-seq-opt "]" 93 | • "{" balanced-token-seq-opt "}" 94 | • BALANCED_TOKEN 96 balanced-token-seq → balanced-token-seq • balanced-token 98 balanced-token-seq-opt → balanced-token-seq • [")", "]", "}"] "(" shift, and go to state 1127 "[" shift, and go to state 1128 "{" shift, and go to state 1129 BALANCED_TOKEN shift, and go to state 1130 $default reduce using rule 98 (balanced-token-seq-opt) balanced-token go to state 1204
68 attribute-argument-clause → "(" balanced-token-seq-opt • ")" ")" shift, and go to state 1205
343 identifier-list → identifier-list "," IDENTIFIER • $default reduce using rule 343 (identifier-list)
642 simple-declaration → attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer • ";" ";" shift, and go to state 1206
326 function-body → "=" "delete" ";" • $default reduce using rule 326 (function-body)
325 function-body → "=" "default" ";" • $default reduce using rule 325 (function-body)
402 mem-initializer-list → mem-initializer ELLIPSIS-opt • $default reduce using rule 402 (mem-initializer-list)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 279 expression-list → • initializer-list 280 expression-list-opt → • %empty [")"] 281 | • expression-list 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 361 initializer-clause → • assignment-expression 362 | • braced-init-list 363 initializer-list → • initializer-clause ELLIPSIS-opt 364 | • initializer-list "," initializer-clause ELLIPSIS-opt 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 398 mem-initializer → mem-initializer-id "(" • expression-list-opt ")" 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "{" shift, and go to state 380 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 261 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 "co_yield" shift, and go to state 264 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] ")" reduce using rule 280 (expression-list-opt) "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 assignment-expression go to state 642 await-expression go to state 269 braced-init-list go to state 643 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 272 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 expression-list go to state 810 expression-list-opt go to state 1207 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 initializer-clause go to state 646 initializer-list go to state 647 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 285 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 throw-expression go to state 302 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306 yield-expression go to state 307
399 mem-initializer → mem-initializer-id braced-init-list • $default reduce using rule 399 (mem-initializer)
137 class-name → • IDENTIFIER 138 | • simple-template-id 139 class-or-decltype → • nested-name-specifier-opt type-name 140 | • nested-name-specifier "template" simple-template-id 141 | • decltype-specifier 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 398 mem-initializer → • mem-initializer-id "(" expression-list-opt ")" 399 | • mem-initializer-id braced-init-list 400 mem-initializer-id → • class-or-decltype 401 | • IDENTIFIER 403 mem-initializer-list → mem-initializer-list "," • mem-initializer ELLIPSIS-opt 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 1010 "::" shift, and go to state 6 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] class-name go to state 55 class-or-decltype go to state 1011 decltype-specifier go to state 874 enum-name go to state 71 mem-initializer go to state 1208 mem-initializer-id go to state 1013 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 875 nested-name-specifier-opt go to state 876 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
331 function-try-block → "try" ctor-initializer-opt compound-statement • handler-seq 335 handler → • "catch" "(" exception-declaration ")" compound-statement 336 handler-seq → • handler handler-seq-opt "catch" shift, and go to state 1209 handler go to state 1210 handler-seq go to state 1211
478 noexcept-specifier → • "noexcept" "(" constant-expression ")" 479 | • "noexcept" 480 noexcept-specifier-opt → • %empty [",", "...", "=", ";", "alignas", "(", ")", "[", ":", "{", "final", "->", ">", "try", "requires", "override"] 481 | • noexcept-specifier 553 parameters-and-qualifiers → "(" parameter-declaration-clause ")" cv-qualifier-seq-opt ref-qualifier-opt • noexcept-specifier-opt attribute-specifier-seq-opt "noexcept" shift, and go to state 791 $default reduce using rule 480 (noexcept-specifier-opt) noexcept-specifier go to state 792 noexcept-specifier-opt go to state 1212
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 158 constant-expression → • conditional-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 418 member-declarator → IDENTIFIER-opt attribute-specifier-seq-opt ":" • constant-expression brace-or-equal-initializer-opt 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 await-expression go to state 269 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 309 constant-expression go to state 1213 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 311 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306
325 function-body → "=" • "default" ";" 326 | "=" • "delete" ";" 597 pure-specifier → "=" • '0' "delete" shift, and go to state 1008 "default" shift, and go to state 1009 '0' shift, and go to state 1214
599 pure-specifier-opt → pure-specifier • $default reduce using rule 599 (pure-specifier-opt)
415 member-declarator → declarator virt-specifier-seq-opt pure-specifier-opt • $default reduce using rule 415 (member-declarator)
116 brace-or-equal-initializer → • "=" initializer-clause 117 | • braced-init-list 118 brace-or-equal-initializer-opt → • %empty [",", ";"] 119 | • brace-or-equal-initializer 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 415 member-declarator → declarator • virt-specifier-seq-opt pure-specifier-opt 416 | declarator • requires-clause 417 | declarator • brace-or-equal-initializer-opt 621 requires-clause → • "requires" constraint-logical-or-expression 769 virt-specifier → • "override" 770 | • "final" 771 virt-specifier-seq → • virt-specifier 772 | • virt-specifier-seq virt-specifier 773 virt-specifier-seq-opt → • %empty [",", "=", ";"] 774 | • virt-specifier-seq "=" shift, and go to state 378 "{" shift, and go to state 380 "final" shift, and go to state 612 "requires" shift, and go to state 381 "override" shift, and go to state 613 "," reduce using rule 118 (brace-or-equal-initializer-opt) "," [reduce using rule 773 (virt-specifier-seq-opt)] "=" [reduce using rule 773 (virt-specifier-seq-opt)] ";" reduce using rule 118 (brace-or-equal-initializer-opt) ";" [reduce using rule 773 (virt-specifier-seq-opt)] $default reduce using rule 118 (brace-or-equal-initializer-opt) brace-or-equal-initializer go to state 1022 brace-or-equal-initializer-opt go to state 1023 braced-init-list go to state 383 requires-clause go to state 1215 virt-specifier go to state 615 virt-specifier-seq go to state 616 virt-specifier-seq-opt go to state 1216
420 member-declarator-list → member-declarator-list "," member-declarator • $default reduce using rule 420 (member-declarator-list)
103 base-specifier → attribute-specifier-seq-opt "virtual" access-specifier-opt class-or-decltype • $default reduce using rule 103 (base-specifier)
104 base-specifier → attribute-specifier-seq-opt access-specifier VIRTUAL-opt class-or-decltype • $default reduce using rule 104 (base-specifier)
140 class-or-decltype → nested-name-specifier "template" simple-template-id • $default reduce using rule 140 (class-or-decltype)
106 base-specifier-list → base-specifier-list "," base-specifier ELLIPSIS-opt • $default reduce using rule 106 (base-specifier-list)
364 initializer-list → initializer-list "," initializer-clause ELLIPSIS-opt • $default reduce using rule 364 (initializer-list)
215 deduction-guide → explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id • ";" ";" shift, and go to state 1217
427 module-declaration → EXPORT-opt "module" module-name module-partition-opt attribute-specifier-seq-opt ";" • $default reduce using rule 427 (module-declaration)
9 EXTERN-opt → • %empty ["template"] 10 | • "extern" 13 INLINE-opt → • %empty ["namespace"] 14 | • "inline" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 71 attribute-declaration → • attribute-specifier-seq ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "using", "alignas", "(", "&", "asm", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 193 declaration → • block-declaration 194 | • nodeclspec-function-declaration 195 | • function-definition 196 | • template-declaration 197 | • deduction-guide 198 | • explicit-instantiation 199 | • explicit-specialization 200 | • export-declaration 201 | • linkage-specification 202 | • namespace-definition 203 | • empty-declaration 204 | • attribute-declaration 205 | • module-import-declaration 206 declaration-seq → • declaration 207 | • declaration-seq declaration 208 declaration-seq-opt → • %empty [$end] 209 | • declaration-seq 214 decltype-specifier → • "decltype" "(" expression ")" 215 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 233 empty-declaration → • ";" 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 264 explicit-instantiation → • EXTERN-opt "template" declaration 265 explicit-specialization → • "template" "<" ">" declaration 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 268 explicit-specifier-opt → • %empty [IDENTIFIER] 269 | • explicit-specifier 270 export-declaration → • "export" declaration 271 | • "export" "{" declaration-seq-opt "}" 272 | • "export" module-import-declaration 327 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 328 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 329 function-specifier → • "virtual" 330 | • explicit-specifier 390 linkage-specification → • "extern" string-literal "{" declaration-seq-opt "}" 391 | • "extern" string-literal declaration 428 module-import-declaration → • "import" module-name attribute-specifier-seq-opt ";" 429 | • "import" module-partition attribute-specifier-seq-opt ";" 430 | • "import" header-name attribute-specifier-seq-opt ";" 443 named-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 447 namespace-definition → • named-namespace-definition 448 | • unnamed-namespace-definition 449 | • nested-namespace-definition 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 460 nested-namespace-definition → • "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" 476 nodeclspec-function-declaration → • attribute-specifier-seq-opt declarator ";" 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 584 private-module-fragment → "module" ":" "private" ";" • declaration-seq-opt 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 690 template-declaration → • template-head declaration 691 | • template-head concept-definition 692 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 754 unnamed-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body "}" 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "export" shift, and go to state 2 "extern" shift, and go to state 3 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 5 "::" shift, and go to state 6 "template" shift, and go to state 7 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 ";" shift, and go to state 11 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "import" shift, and go to state 25 "namespace" shift, and go to state 26 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 $end reduce using rule 208 (declaration-seq-opt) "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 268 (explicit-specifier-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "template" [reduce using rule 9 (EXTERN-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "namespace" [reduce using rule 13 (INLINE-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) EXTERN-opt go to state 45 INLINE-opt go to state 46 alias-declaration go to state 47 asm-declaration go to state 48 attribute-declaration go to state 49 attribute-specifier-seq go to state 50 attribute-specifier-seq-opt go to state 51 block-declaration go to state 52 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration go to state 60 declaration-seq go to state 61 declaration-seq-opt go to state 1218 decltype-specifier go to state 63 deduction-guide go to state 64 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 empty-declaration go to state 68 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-instantiation go to state 73 explicit-specialization go to state 74 explicit-specifier go to state 75 explicit-specifier-opt go to state 76 export-declaration go to state 77 function-definition go to state 78 function-specifier go to state 79 linkage-specification go to state 82 module-import-declaration go to state 83 named-namespace-definition go to state 84 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-definition go to state 87 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 nested-namespace-definition go to state 91 nodeclspec-function-declaration go to state 92 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-declaration go to state 100 template-head go to state 101 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 unnamed-namespace-definition go to state 110 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 483 noptr-abstract-declarator → noptr-abstract-declarator-opt "[" constant-expression-opt "]" • attribute-specifier-seq-opt $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 1219
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 488 noptr-abstract-pack-declarator → noptr-abstract-pack-declarator "[" constant-expression-opt "]" • attribute-specifier-seq-opt $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 1220
546 parameter-declaration → attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt "=" initializer-clause • $default reduce using rule 546 (parameter-declaration)
544 parameter-declaration → attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator "=" initializer-clause • $default reduce using rule 544 (parameter-declaration)
287 fold-expression → "(" cast-expression fold-operator "..." fold-operator cast-expression • ")" ")" shift, and go to state 1221
724 type-requirement → "typename" nested-name-specifier-opt type-name • ";" ";" shift, and go to state 1222
15 NOEXCEPT-opt → • %empty [";", "->"] 16 | • "noexcept" 148 compound-requirement → "{" expression "}" • NOEXCEPT-opt return-type-requirement-opt ";" "noexcept" shift, and go to state 1223 $default reduce using rule 15 (NOEXCEPT-opt) NOEXCEPT-opt go to state 1224
461 nested-requirement → "requires" constraint-expression ";" • $default reduce using rule 461 (nested-requirement)
278 expression → expression • "," assignment-expression 570 postfix-expression → "dynamic_cast" "<" type-id ">" "(" expression • ")" "," shift, and go to state 534 ")" shift, and go to state 1225
278 expression → expression • "," assignment-expression 571 postfix-expression → "static_cast" "<" type-id ">" "(" expression • ")" "," shift, and go to state 534 ")" shift, and go to state 1226
278 expression → expression • "," assignment-expression 572 postfix-expression → "reinterpret_cast" "<" type-id ">" "(" expression • ")" "," shift, and go to state 534 ")" shift, and go to state 1227
278 expression → expression • "," assignment-expression 573 postfix-expression → "const_cast" "<" type-id ">" "(" expression • ")" "," shift, and go to state 534 ")" shift, and go to state 1228
120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 467 new-expression → SCOPE-opt "new" new-placement-opt "(" type-id ")" • new-initializer-opt 468 new-initializer → • "(" expression-list-opt ")" 469 | • braced-init-list 470 new-initializer-opt → • %empty [",", "...", "+", "-", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*"] 471 | • new-initializer "(" shift, and go to state 1077 "{" shift, and go to state 380 "{" [reduce using rule 470 (new-initializer-opt)] $default reduce using rule 470 (new-initializer-opt) braced-init-list go to state 1078 new-initializer go to state 1079 new-initializer-opt go to state 1229
468 new-initializer → "(" expression-list-opt • ")" ")" shift, and go to state 1230
494 noptr-new-declarator → "[" expression-opt • "]" attribute-specifier-seq-opt "]" shift, and go to state 1231
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 158 constant-expression → • conditional-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 495 noptr-new-declarator → noptr-new-declarator "[" • constant-expression "]" attribute-specifier-seq-opt 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 await-expression go to state 269 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 309 constant-expression go to state 1232 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 311 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306
462 new-declarator → ptr-operator new-declarator-opt • $default reduce using rule 462 (new-declarator)
385 lambda-declarator → "(" parameter-declaration-clause ")" lambda-specifiers requires-clause-opt • $default reduce using rule 385 (lambda-declarator)
149 compound-statement → • "{" statement-seq-opt "}" 387 lambda-expression → lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator • compound-statement "{" shift, and go to state 794 compound-statement go to state 1233
478 noexcept-specifier → "noexcept" "(" constant-expression ")" • $default reduce using rule 478 (noexcept-specifier)
44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "using", ";", "alignas", "(", "&", "asm", "[", "co_await", "{", "class", "struct", "union", "operator", "co_return", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", "*", "default", "try", "while", "do", "for", "break", "continue", "return", "goto", "case", "requires", "new", "~", "++", "--", "auto", "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "literal", "if", "switch", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", "co_yield"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 210 declaration-statement → • block-declaration 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 329 function-specifier → • "virtual" 330 | • explicit-specifier 376 labeled-statement → • attribute-specifier-seq-opt IDENTIFIER ":" statement 376 | attribute-specifier-seq-opt IDENTIFIER ":" • statement 377 | • attribute-specifier-seq-opt "case" constant-expression ":" statement 378 | • attribute-specifier-seq-opt "default" ":" statement 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 664 statement → • labeled-statement 665 | • attribute-specifier-seq-opt expression-statement 666 | • attribute-specifier-seq-opt compound-statement 667 | • attribute-specifier-seq-opt selection-statement 668 | • attribute-specifier-seq-opt iteration-statement 669 | • attribute-specifier-seq-opt jump-statement 670 | • declaration-statement 671 | • attribute-specifier-seq-opt try-block 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 151 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "namespace" shift, and go to state 972 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) alias-declaration go to state 47 asm-declaration go to state 48 attribute-specifier-seq go to state 973 attribute-specifier-seq-opt go to state 974 block-declaration go to state 975 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration-statement go to state 976 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 155 function-specifier go to state 79 labeled-statement go to state 977 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 statement go to state 1234 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
274 expr-or-braced-init-list → braced-init-list • $default reduce using rule 274 (expr-or-braced-init-list)
276 expr-or-braced-init-list-opt → expr-or-braced-init-list • $default reduce using rule 276 (expr-or-braced-init-list-opt)
171 coroutine-return-statement → "co_return" expr-or-braced-init-list-opt • ";" ";" shift, and go to state 1235
273 expr-or-braced-init-list → expression • [";", ")"] 278 expression → expression • "," assignment-expression "," shift, and go to state 534 $default reduce using rule 273 (expr-or-braced-init-list)
44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "using", ";", "alignas", "(", "&", "asm", "[", "co_await", "{", "class", "struct", "union", "operator", "co_return", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", "*", "default", "try", "while", "do", "for", "break", "continue", "return", "goto", "case", "requires", "new", "~", "++", "--", "auto", "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "literal", "if", "switch", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", "co_yield"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 210 declaration-statement → • block-declaration 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 329 function-specifier → • "virtual" 330 | • explicit-specifier 376 labeled-statement → • attribute-specifier-seq-opt IDENTIFIER ":" statement 377 | • attribute-specifier-seq-opt "case" constant-expression ":" statement 378 | • attribute-specifier-seq-opt "default" ":" statement 378 | attribute-specifier-seq-opt "default" ":" • statement 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 664 statement → • labeled-statement 665 | • attribute-specifier-seq-opt expression-statement 666 | • attribute-specifier-seq-opt compound-statement 667 | • attribute-specifier-seq-opt selection-statement 668 | • attribute-specifier-seq-opt iteration-statement 669 | • attribute-specifier-seq-opt jump-statement 670 | • declaration-statement 671 | • attribute-specifier-seq-opt try-block 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 151 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "namespace" shift, and go to state 972 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) alias-declaration go to state 47 asm-declaration go to state 48 attribute-specifier-seq go to state 973 attribute-specifier-seq-opt go to state 974 block-declaration go to state 975 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration-statement go to state 976 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 155 function-specifier go to state 79 labeled-statement go to state 977 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 statement go to state 1236 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
335 handler → • "catch" "(" exception-declaration ")" compound-statement 336 handler-seq → • handler handler-seq-opt 707 try-block → "try" compound-statement • handler-seq "catch" shift, and go to state 1209 handler go to state 1210 handler-seq go to state 1237
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 152 condition → • expression 153 | • attribute-specifier-seq-opt decl-specifier-seq declarator brace-or-equal-initializer 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 277 expression → • assignment-expression 278 | • expression "," assignment-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 367 iteration-statement → "while" "(" • condition ")" statement 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 261 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 "co_yield" shift, and go to state 264 IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "[" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "delete" reduce using rule 19 (SCOPE-opt) "new" reduce using rule 19 (SCOPE-opt) "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 assignment-expression go to state 268 attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 1238 await-expression go to state 269 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 condition go to state 1239 conditional-expression go to state 272 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 expression go to state 1240 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 285 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 throw-expression go to state 302 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306 yield-expression go to state 307
368 iteration-statement → "do" statement • "while" "(" expression ")" ";" "while" shift, and go to state 1241
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 277 expression → • assignment-expression 278 | • expression "," assignment-expression 282 expression-opt → • %empty [";"] 283 | • expression 284 expression-statement → • expression-opt ";" 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 329 function-specifier → • "virtual" 330 | • explicit-specifier 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 354 init-statement → • expression-statement 355 | • simple-declaration 356 | • alias-declaration 357 init-statement-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 358 | • init-statement 369 iteration-statement → "for" "(" • init-statement condition-opt ";" expression-opt ")" statement 370 | "for" "(" • init-statement-opt for-range-declaration ":" for-range-initializer ")" statement 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 238 "inline" shift, and go to state 151 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "+" shift, and go to state 243 "-" shift, and go to state 244 "using" shift, and go to state 1242 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "operator" shift, and go to state 249 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 261 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 "co_yield" shift, and go to state 264 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "constexpr" [reduce using rule 357 (init-statement-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 357 (init-statement-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 357 (init-statement-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "inline" [reduce using rule 357 (init-statement-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 357 (init-statement-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 357 (init-statement-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 357 (init-statement-opt)] ";" reduce using rule 282 (expression-opt) "alignas" reduce using rule 83 (attribute-specifier-seq-opt) "alignas" [reduce using rule 357 (init-statement-opt)] "[" [reduce using rule 83 (attribute-specifier-seq-opt)] "[" [reduce using rule 357 (init-statement-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 357 (init-statement-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 357 (init-statement-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 357 (init-statement-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 357 (init-statement-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 357 (init-statement-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 357 (init-statement-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 357 (init-statement-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 357 (init-statement-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 357 (init-statement-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 357 (init-statement-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "enum" [reduce using rule 357 (init-statement-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 357 (init-statement-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 357 (init-statement-opt)] "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char" [reduce using rule 357 (init-statement-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 357 (init-statement-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 357 (init-statement-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 357 (init-statement-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 357 (init-statement-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 357 (init-statement-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 357 (init-statement-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 357 (init-statement-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 357 (init-statement-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 357 (init-statement-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 357 (init-statement-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 357 (init-statement-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 357 (init-statement-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 357 (init-statement-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 357 (init-statement-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 357 (init-statement-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 357 (init-statement-opt)] $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 alias-declaration go to state 1243 and-expression go to state 267 assignment-expression go to state 268 attribute-specifier-seq go to state 973 attribute-specifier-seq-opt go to state 1244 await-expression go to state 269 cast-expression go to state 270 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 compare-expression go to state 271 conditional-expression go to state 272 conversion-function-id go to state 273 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 decltype-specifier go to state 63 defining-type-specifier go to state 65 delete-expression go to state 274 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 154 enum-name go to state 71 enum-specifier go to state 72 equality-expression go to state 275 exclusive-or-expression go to state 276 explicit-specifier go to state 155 expression go to state 1110 expression-opt go to state 1111 expression-statement go to state 1245 fold-expression go to state 278 function-specifier go to state 79 id-expression go to state 279 inclusive-or-expression go to state 280 init-statement go to state 1246 init-statement-opt go to state 1247 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 285 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-declaration go to state 1248 simple-template-id go to state 298 simple-type-specifier go to state 409 storage-class-specifier go to state 99 string-literal go to state 300 template-id go to state 301 template-name go to state 102 throw-expression go to state 302 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 416 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306 yield-expression go to state 307
371 jump-statement → "break" ";" • $default reduce using rule 371 (jump-statement)
372 jump-statement → "continue" ";" • $default reduce using rule 372 (jump-statement)
373 jump-statement → "return" expr-or-braced-init-list-opt • ";" ";" shift, and go to state 1249
375 jump-statement → "goto" IDENTIFIER • ";" ";" shift, and go to state 1250
377 labeled-statement → attribute-specifier-seq-opt "case" constant-expression • ":" statement ":" shift, and go to state 1251
4 CONSTEXPR-opt → "constexpr" • $default reduce using rule 4 (CONSTEXPR-opt)
18 NOT-opt → "!" • $default reduce using rule 18 (NOT-opt)
628 selection-statement → "if" CONSTEXPR-opt • "(" init-statement-opt condition ")" statement 629 | "if" CONSTEXPR-opt • "(" init-statement-opt condition ")" statement "else" statement "(" shift, and go to state 1252
630 selection-statement → "if" NOT-opt • "consteval" compound-statement 631 | "if" NOT-opt • "consteval" compound-statement "else" statement "consteval" shift, and go to state 1253
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 277 expression → • assignment-expression 278 | • expression "," assignment-expression 282 expression-opt → • %empty [";"] 283 | • expression 284 expression-statement → • expression-opt ";" 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 329 function-specifier → • "virtual" 330 | • explicit-specifier 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 354 init-statement → • expression-statement 355 | • simple-declaration 356 | • alias-declaration 357 init-statement-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "alignas", "(", "&", "[", "co_await", "class", "struct", "union", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", "*", "requires", "new", "~", "++", "--", "auto", "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "literal", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", "co_yield"] 358 | • init-statement 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 632 selection-statement → "switch" "(" • init-statement-opt condition ")" statement 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 238 "inline" shift, and go to state 151 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "+" shift, and go to state 243 "-" shift, and go to state 244 "using" shift, and go to state 1242 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "operator" shift, and go to state 249 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 261 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 "co_yield" shift, and go to state 264 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "constexpr" [reduce using rule 357 (init-statement-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 357 (init-statement-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 357 (init-statement-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "inline" [reduce using rule 357 (init-statement-opt)] "noexcept" [reduce using rule 357 (init-statement-opt)] "!" [reduce using rule 357 (init-statement-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 357 (init-statement-opt)] "this" [reduce using rule 357 (init-statement-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 357 (init-statement-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 357 (init-statement-opt)] "+" [reduce using rule 357 (init-statement-opt)] "-" [reduce using rule 357 (init-statement-opt)] ";" reduce using rule 282 (expression-opt) "alignas" reduce using rule 83 (attribute-specifier-seq-opt) "alignas" [reduce using rule 357 (init-statement-opt)] "(" [reduce using rule 357 (init-statement-opt)] "&" [reduce using rule 357 (init-statement-opt)] "[" [reduce using rule 83 (attribute-specifier-seq-opt)] "[" [reduce using rule 357 (init-statement-opt)] "co_await" [reduce using rule 357 (init-statement-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 357 (init-statement-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 357 (init-statement-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 357 (init-statement-opt)] "operator" [reduce using rule 357 (init-statement-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 357 (init-statement-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 357 (init-statement-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 357 (init-statement-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 357 (init-statement-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 357 (init-statement-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 357 (init-statement-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 357 (init-statement-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "delete" reduce using rule 19 (SCOPE-opt) "delete" [reduce using rule 357 (init-statement-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "enum" [reduce using rule 357 (init-statement-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 357 (init-statement-opt)] "*" [reduce using rule 357 (init-statement-opt)] "requires" [reduce using rule 357 (init-statement-opt)] "new" reduce using rule 19 (SCOPE-opt) "new" [reduce using rule 357 (init-statement-opt)] "~" [reduce using rule 357 (init-statement-opt)] "++" [reduce using rule 357 (init-statement-opt)] "--" [reduce using rule 357 (init-statement-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 357 (init-statement-opt)] "auto" [reduce using rule 710 (type-constraint-opt)] "dynamic_cast" [reduce using rule 357 (init-statement-opt)] "static_cast" [reduce using rule 357 (init-statement-opt)] "reinterpret_cast" [reduce using rule 357 (init-statement-opt)] "const_cast" [reduce using rule 357 (init-statement-opt)] "typeid" [reduce using rule 357 (init-statement-opt)] "literal" [reduce using rule 357 (init-statement-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char" [reduce using rule 357 (init-statement-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 357 (init-statement-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 357 (init-statement-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 357 (init-statement-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 357 (init-statement-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 357 (init-statement-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 357 (init-statement-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 357 (init-statement-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 357 (init-statement-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 357 (init-statement-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 357 (init-statement-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 357 (init-statement-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 357 (init-statement-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 357 (init-statement-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 357 (init-statement-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 357 (init-statement-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 357 (init-statement-opt)] STRING_LITERAL [reduce using rule 357 (init-statement-opt)] "throw" [reduce using rule 357 (init-statement-opt)] "sizeof" [reduce using rule 357 (init-statement-opt)] "alignof" [reduce using rule 357 (init-statement-opt)] "co_yield" [reduce using rule 357 (init-statement-opt)] $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 alias-declaration go to state 1243 and-expression go to state 267 assignment-expression go to state 268 attribute-specifier-seq go to state 973 attribute-specifier-seq-opt go to state 1244 await-expression go to state 269 cast-expression go to state 270 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 compare-expression go to state 271 conditional-expression go to state 272 conversion-function-id go to state 273 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 decltype-specifier go to state 63 defining-type-specifier go to state 65 delete-expression go to state 274 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 154 enum-name go to state 71 enum-specifier go to state 72 equality-expression go to state 275 exclusive-or-expression go to state 276 explicit-specifier go to state 155 expression go to state 1110 expression-opt go to state 1111 expression-statement go to state 1245 fold-expression go to state 278 function-specifier go to state 79 id-expression go to state 279 inclusive-or-expression go to state 280 init-statement go to state 1254 init-statement-opt go to state 1255 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 285 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-declaration go to state 1248 simple-template-id go to state 298 simple-type-specifier go to state 409 storage-class-specifier go to state 99 string-literal go to state 300 template-id go to state 301 template-name go to state 102 throw-expression go to state 302 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 416 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306 yield-expression go to state 307
284 expression-statement → expression-opt ";" • $default reduce using rule 284 (expression-statement)
460 nested-namespace-definition → "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" • $default reduce using rule 460 (nested-namespace-definition)
75 attribute-list → attribute-list "," attribute "..." • $default reduce using rule 75 (attribute-list)
91 balanced-token → "(" balanced-token-seq-opt • ")" ")" shift, and go to state 1256
92 balanced-token → "[" balanced-token-seq-opt • "]" "]" shift, and go to state 1257
93 balanced-token → "{" balanced-token-seq-opt • "}" "}" shift, and go to state 1258
96 balanced-token-seq → balanced-token-seq balanced-token • $default reduce using rule 96 (balanced-token-seq)
68 attribute-argument-clause → "(" balanced-token-seq-opt ")" • $default reduce using rule 68 (attribute-argument-clause)
642 simple-declaration → attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" • $default reduce using rule 642 (simple-declaration)
398 mem-initializer → mem-initializer-id "(" expression-list-opt • ")" ")" shift, and go to state 1259
5 ELLIPSIS-opt → • %empty [",", "{"] 6 | • "..." 403 mem-initializer-list → mem-initializer-list "," mem-initializer • ELLIPSIS-opt "..." shift, and go to state 156 $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 1260
335 handler → "catch" • "(" exception-declaration ")" compound-statement "(" shift, and go to state 1261
335 handler → • "catch" "(" exception-declaration ")" compound-statement 336 handler-seq → • handler handler-seq-opt 336 | handler • handler-seq-opt 337 handler-seq-opt → • %empty [$end, "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "template", "this", "typename", "virtual", "private", "protected", "public", "+", "-", "using", ";", "alignas", "(", "&", "asm", "[", ":", "co_await", "{", "}", "class", "struct", "union", "&&", "operator", "co_return", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", "*", "default", "try", "module", "while", "do", "for", "break", "continue", "return", "goto", "case", "import", "namespace", "requires", "new", "~", "++", "--", "auto", "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "literal", "if", "else", "switch", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", "co_yield"] 338 | • handler-seq "catch" shift, and go to state 1209 $default reduce using rule 337 (handler-seq-opt) handler go to state 1210 handler-seq go to state 1262 handler-seq-opt go to state 1263
331 function-try-block → "try" ctor-initializer-opt compound-statement handler-seq • $default reduce using rule 331 (function-try-block)
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 553 parameters-and-qualifiers → "(" parameter-declaration-clause ")" cv-qualifier-seq-opt ref-qualifier-opt noexcept-specifier-opt • attribute-specifier-seq-opt $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 1264
116 brace-or-equal-initializer → • "=" initializer-clause 117 | • braced-init-list 118 brace-or-equal-initializer-opt → • %empty [",", ";"] 119 | • brace-or-equal-initializer 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 418 member-declarator → IDENTIFIER-opt attribute-specifier-seq-opt ":" constant-expression • brace-or-equal-initializer-opt "=" shift, and go to state 378 "{" shift, and go to state 380 $default reduce using rule 118 (brace-or-equal-initializer-opt) brace-or-equal-initializer go to state 1022 brace-or-equal-initializer-opt go to state 1265 braced-init-list go to state 383
597 pure-specifier → "=" '0' • $default reduce using rule 597 (pure-specifier)
416 member-declarator → declarator requires-clause • $default reduce using rule 416 (member-declarator)
415 member-declarator → declarator virt-specifier-seq-opt • pure-specifier-opt 597 pure-specifier → • "=" '0' 598 pure-specifier-opt → • %empty [",", ";"] 599 | • pure-specifier "=" shift, and go to state 1266 $default reduce using rule 598 (pure-specifier-opt) pure-specifier go to state 1146 pure-specifier-opt go to state 1147
215 deduction-guide → explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" • $default reduce using rule 215 (deduction-guide)
584 private-module-fragment → "module" ":" "private" ";" declaration-seq-opt • $default reduce using rule 584 (private-module-fragment)
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 483 noptr-abstract-declarator → noptr-abstract-declarator-opt "[" constant-expression-opt "]" attribute-specifier-seq-opt • [",", "...", "=", ";", "(", ")", "[", ":", "{", "final", ">", "try", "requires", "override"] "alignas" shift, and go to state 158 "[" shift, and go to state 162 "[" [reduce using rule 483 (noptr-abstract-declarator)] $default reduce using rule 483 (noptr-abstract-declarator) alignment-specifier go to state 166 attribute-specifier go to state 167
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 488 noptr-abstract-pack-declarator → noptr-abstract-pack-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt • [",", "...", "=", ";", "(", ")", "[", ":", "{", "final", ">", "try", "requires", "override"] "alignas" shift, and go to state 158 "[" shift, and go to state 162 "[" [reduce using rule 488 (noptr-abstract-pack-declarator)] $default reduce using rule 488 (noptr-abstract-pack-declarator) alignment-specifier go to state 166 attribute-specifier go to state 167
287 fold-expression → "(" cast-expression fold-operator "..." fold-operator cast-expression ")" • $default reduce using rule 287 (fold-expression)
724 type-requirement → "typename" nested-name-specifier-opt type-name ";" • $default reduce using rule 724 (type-requirement)
16 NOEXCEPT-opt → "noexcept" • $default reduce using rule 16 (NOEXCEPT-opt)
148 compound-requirement → "{" expression "}" NOEXCEPT-opt • return-type-requirement-opt ";" 625 return-type-requirement → • "->" type-constraint 626 return-type-requirement-opt → • %empty [";"] 627 | • return-type-requirement "->" shift, and go to state 1267 $default reduce using rule 626 (return-type-requirement-opt) return-type-requirement go to state 1268 return-type-requirement-opt go to state 1269
570 postfix-expression → "dynamic_cast" "<" type-id ">" "(" expression ")" • $default reduce using rule 570 (postfix-expression)
571 postfix-expression → "static_cast" "<" type-id ">" "(" expression ")" • $default reduce using rule 571 (postfix-expression)
572 postfix-expression → "reinterpret_cast" "<" type-id ">" "(" expression ")" • $default reduce using rule 572 (postfix-expression)
573 postfix-expression → "const_cast" "<" type-id ">" "(" expression ")" • $default reduce using rule 573 (postfix-expression)
467 new-expression → SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt • $default reduce using rule 467 (new-expression)
468 new-initializer → "(" expression-list-opt ")" • $default reduce using rule 468 (new-initializer)
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 494 noptr-new-declarator → "[" expression-opt "]" • attribute-specifier-seq-opt $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 1270
495 noptr-new-declarator → noptr-new-declarator "[" constant-expression • "]" attribute-specifier-seq-opt "]" shift, and go to state 1271
387 lambda-expression → lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement • $default reduce using rule 387 (lambda-expression)
376 labeled-statement → attribute-specifier-seq-opt IDENTIFIER ":" statement • $default reduce using rule 376 (labeled-statement)
171 coroutine-return-statement → "co_return" expr-or-braced-init-list-opt ";" • $default reduce using rule 171 (coroutine-return-statement)
378 labeled-statement → attribute-specifier-seq-opt "default" ":" statement • $default reduce using rule 378 (labeled-statement)
707 try-block → "try" compound-statement handler-seq • $default reduce using rule 707 (try-block)
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 153 condition → attribute-specifier-seq-opt • decl-specifier-seq declarator brace-or-equal-initializer 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 329 function-specifier → • "virtual" 330 | • explicit-specifier 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 151 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "alignas" shift, and go to state 158 "[" shift, and go to state 162 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] $default reduce using rule 710 (type-constraint-opt) alignment-specifier go to state 166 attribute-specifier go to state 167 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 1272 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 154 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 155 function-specifier go to state 79 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109
367 iteration-statement → "while" "(" condition • ")" statement ")" shift, and go to state 1273
152 condition → expression • [";", ")"] 278 expression → expression • "," assignment-expression "," shift, and go to state 534 $default reduce using rule 152 (condition)
368 iteration-statement → "do" statement "while" • "(" expression ")" ";" "(" shift, and go to state 1274
44 alias-declaration → "using" • IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" IDENTIFIER shift, and go to state 123
356 init-statement → alias-declaration • $default reduce using rule 356 (init-statement)
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 329 function-specifier → • "virtual" 330 | • explicit-specifier 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 642 simple-declaration → attribute-specifier-seq-opt • decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 151 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "alignas" shift, and go to state 158 "[" shift, and go to state 162 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] $default reduce using rule 710 (type-constraint-opt) alignment-specifier go to state 166 attribute-specifier go to state 167 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 1109 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 154 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 155 function-specifier go to state 79 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109
354 init-statement → expression-statement • $default reduce using rule 354 (init-statement)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 152 condition → • expression 153 | • attribute-specifier-seq-opt decl-specifier-seq declarator brace-or-equal-initializer 154 condition-opt → • %empty [";"] 155 | • condition 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 277 expression → • assignment-expression 278 | • expression "," assignment-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 358 init-statement-opt → init-statement • ["constexpr", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 369 iteration-statement → "for" "(" init-statement • condition-opt ";" expression-opt ")" statement 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 261 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 "co_yield" shift, and go to state 264 "constexpr" reduce using rule 83 (attribute-specifier-seq-opt) "constexpr" [reduce using rule 358 (init-statement-opt)] "extern" reduce using rule 83 (attribute-specifier-seq-opt) "extern" [reduce using rule 358 (init-statement-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 358 (init-statement-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" reduce using rule 83 (attribute-specifier-seq-opt) "inline" [reduce using rule 358 (init-statement-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 358 (init-statement-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 358 (init-statement-opt)] "virtual" reduce using rule 83 (attribute-specifier-seq-opt) "virtual" [reduce using rule 358 (init-statement-opt)] ";" reduce using rule 154 (condition-opt) "alignas" reduce using rule 83 (attribute-specifier-seq-opt) "alignas" [reduce using rule 358 (init-statement-opt)] "[" [reduce using rule 83 (attribute-specifier-seq-opt)] "[" [reduce using rule 358 (init-statement-opt)] "class" reduce using rule 83 (attribute-specifier-seq-opt) "class" [reduce using rule 358 (init-statement-opt)] "struct" reduce using rule 83 (attribute-specifier-seq-opt) "struct" [reduce using rule 358 (init-statement-opt)] "union" reduce using rule 83 (attribute-specifier-seq-opt) "union" [reduce using rule 358 (init-statement-opt)] "const" reduce using rule 83 (attribute-specifier-seq-opt) "const" [reduce using rule 358 (init-statement-opt)] "volatile" reduce using rule 83 (attribute-specifier-seq-opt) "volatile" [reduce using rule 358 (init-statement-opt)] "friend" reduce using rule 83 (attribute-specifier-seq-opt) "friend" [reduce using rule 358 (init-statement-opt)] "typedef" reduce using rule 83 (attribute-specifier-seq-opt) "typedef" [reduce using rule 358 (init-statement-opt)] "consteval" reduce using rule 83 (attribute-specifier-seq-opt) "consteval" [reduce using rule 358 (init-statement-opt)] "constinit" reduce using rule 83 (attribute-specifier-seq-opt) "constinit" [reduce using rule 358 (init-statement-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 358 (init-statement-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "delete" reduce using rule 19 (SCOPE-opt) "enum" reduce using rule 83 (attribute-specifier-seq-opt) "enum" [reduce using rule 358 (init-statement-opt)] "explicit" reduce using rule 83 (attribute-specifier-seq-opt) "explicit" [reduce using rule 358 (init-statement-opt)] "new" reduce using rule 19 (SCOPE-opt) "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 358 (init-statement-opt)] "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char" [reduce using rule 358 (init-statement-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 358 (init-statement-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 358 (init-statement-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 358 (init-statement-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 358 (init-statement-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 358 (init-statement-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 358 (init-statement-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 358 (init-statement-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 358 (init-statement-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 358 (init-statement-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 358 (init-statement-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 358 (init-statement-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 358 (init-statement-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 358 (init-statement-opt)] "static" reduce using rule 83 (attribute-specifier-seq-opt) "static" [reduce using rule 358 (init-statement-opt)] "thread_local" reduce using rule 83 (attribute-specifier-seq-opt) "thread_local" [reduce using rule 358 (init-statement-opt)] "mutable" reduce using rule 83 (attribute-specifier-seq-opt) "mutable" [reduce using rule 358 (init-statement-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 assignment-expression go to state 268 attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 1238 await-expression go to state 269 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 condition go to state 1275 condition-opt go to state 1276 conditional-expression go to state 272 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 expression go to state 1240 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 285 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 throw-expression go to state 302 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306 yield-expression go to state 307
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 320 for-range-declaration → • attribute-specifier-seq-opt decl-specifier-seq declarator 321 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" 370 iteration-statement → "for" "(" init-statement-opt • for-range-declaration ":" for-range-initializer ")" statement $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 1277 for-range-declaration go to state 1278
355 init-statement → simple-declaration • $default reduce using rule 355 (init-statement)
373 jump-statement → "return" expr-or-braced-init-list-opt ";" • $default reduce using rule 373 (jump-statement)
375 jump-statement → "goto" IDENTIFIER ";" • $default reduce using rule 375 (jump-statement)
44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "using", ";", "alignas", "(", "&", "asm", "[", "co_await", "{", "class", "struct", "union", "operator", "co_return", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", "*", "default", "try", "while", "do", "for", "break", "continue", "return", "goto", "case", "requires", "new", "~", "++", "--", "auto", "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "literal", "if", "switch", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", "co_yield"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 210 declaration-statement → • block-declaration 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 329 function-specifier → • "virtual" 330 | • explicit-specifier 376 labeled-statement → • attribute-specifier-seq-opt IDENTIFIER ":" statement 377 | • attribute-specifier-seq-opt "case" constant-expression ":" statement 377 | attribute-specifier-seq-opt "case" constant-expression ":" • statement 378 | • attribute-specifier-seq-opt "default" ":" statement 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 664 statement → • labeled-statement 665 | • attribute-specifier-seq-opt expression-statement 666 | • attribute-specifier-seq-opt compound-statement 667 | • attribute-specifier-seq-opt selection-statement 668 | • attribute-specifier-seq-opt iteration-statement 669 | • attribute-specifier-seq-opt jump-statement 670 | • declaration-statement 671 | • attribute-specifier-seq-opt try-block 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 151 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "namespace" shift, and go to state 972 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) alias-declaration go to state 47 asm-declaration go to state 48 attribute-specifier-seq go to state 973 attribute-specifier-seq-opt go to state 974 block-declaration go to state 975 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration-statement go to state 976 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 155 function-specifier go to state 79 labeled-statement go to state 977 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 statement go to state 1279 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 277 expression → • assignment-expression 278 | • expression "," assignment-expression 282 expression-opt → • %empty [";"] 283 | • expression 284 expression-statement → • expression-opt ";" 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 329 function-specifier → • "virtual" 330 | • explicit-specifier 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 354 init-statement → • expression-statement 355 | • simple-declaration 356 | • alias-declaration 357 init-statement-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "alignas", "(", "&", "[", "co_await", "class", "struct", "union", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", "*", "requires", "new", "~", "++", "--", "auto", "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "literal", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", "co_yield"] 358 | • init-statement 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 628 selection-statement → "if" CONSTEXPR-opt "(" • init-statement-opt condition ")" statement 629 | "if" CONSTEXPR-opt "(" • init-statement-opt condition ")" statement "else" statement 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 238 "inline" shift, and go to state 151 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "+" shift, and go to state 243 "-" shift, and go to state 244 "using" shift, and go to state 1242 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "operator" shift, and go to state 249 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 261 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 "co_yield" shift, and go to state 264 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "constexpr" [reduce using rule 357 (init-statement-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 357 (init-statement-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 357 (init-statement-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "inline" [reduce using rule 357 (init-statement-opt)] "noexcept" [reduce using rule 357 (init-statement-opt)] "!" [reduce using rule 357 (init-statement-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 357 (init-statement-opt)] "this" [reduce using rule 357 (init-statement-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 357 (init-statement-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 357 (init-statement-opt)] "+" [reduce using rule 357 (init-statement-opt)] "-" [reduce using rule 357 (init-statement-opt)] ";" reduce using rule 282 (expression-opt) "alignas" reduce using rule 83 (attribute-specifier-seq-opt) "alignas" [reduce using rule 357 (init-statement-opt)] "(" [reduce using rule 357 (init-statement-opt)] "&" [reduce using rule 357 (init-statement-opt)] "[" [reduce using rule 83 (attribute-specifier-seq-opt)] "[" [reduce using rule 357 (init-statement-opt)] "co_await" [reduce using rule 357 (init-statement-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 357 (init-statement-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 357 (init-statement-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 357 (init-statement-opt)] "operator" [reduce using rule 357 (init-statement-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 357 (init-statement-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 357 (init-statement-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 357 (init-statement-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 357 (init-statement-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 357 (init-statement-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 357 (init-statement-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 357 (init-statement-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "delete" reduce using rule 19 (SCOPE-opt) "delete" [reduce using rule 357 (init-statement-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "enum" [reduce using rule 357 (init-statement-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 357 (init-statement-opt)] "*" [reduce using rule 357 (init-statement-opt)] "requires" [reduce using rule 357 (init-statement-opt)] "new" reduce using rule 19 (SCOPE-opt) "new" [reduce using rule 357 (init-statement-opt)] "~" [reduce using rule 357 (init-statement-opt)] "++" [reduce using rule 357 (init-statement-opt)] "--" [reduce using rule 357 (init-statement-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 357 (init-statement-opt)] "auto" [reduce using rule 710 (type-constraint-opt)] "dynamic_cast" [reduce using rule 357 (init-statement-opt)] "static_cast" [reduce using rule 357 (init-statement-opt)] "reinterpret_cast" [reduce using rule 357 (init-statement-opt)] "const_cast" [reduce using rule 357 (init-statement-opt)] "typeid" [reduce using rule 357 (init-statement-opt)] "literal" [reduce using rule 357 (init-statement-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char" [reduce using rule 357 (init-statement-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 357 (init-statement-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 357 (init-statement-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 357 (init-statement-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 357 (init-statement-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 357 (init-statement-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 357 (init-statement-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 357 (init-statement-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 357 (init-statement-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 357 (init-statement-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 357 (init-statement-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 357 (init-statement-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 357 (init-statement-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 357 (init-statement-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 357 (init-statement-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 357 (init-statement-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 357 (init-statement-opt)] STRING_LITERAL [reduce using rule 357 (init-statement-opt)] "throw" [reduce using rule 357 (init-statement-opt)] "sizeof" [reduce using rule 357 (init-statement-opt)] "alignof" [reduce using rule 357 (init-statement-opt)] "co_yield" [reduce using rule 357 (init-statement-opt)] $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 alias-declaration go to state 1243 and-expression go to state 267 assignment-expression go to state 268 attribute-specifier-seq go to state 973 attribute-specifier-seq-opt go to state 1244 await-expression go to state 269 cast-expression go to state 270 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 compare-expression go to state 271 conditional-expression go to state 272 conversion-function-id go to state 273 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 decltype-specifier go to state 63 defining-type-specifier go to state 65 delete-expression go to state 274 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 154 enum-name go to state 71 enum-specifier go to state 72 equality-expression go to state 275 exclusive-or-expression go to state 276 explicit-specifier go to state 155 expression go to state 1110 expression-opt go to state 1111 expression-statement go to state 1245 fold-expression go to state 278 function-specifier go to state 79 id-expression go to state 279 inclusive-or-expression go to state 280 init-statement go to state 1254 init-statement-opt go to state 1280 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 285 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-declaration go to state 1248 simple-template-id go to state 298 simple-type-specifier go to state 409 storage-class-specifier go to state 99 string-literal go to state 300 template-id go to state 301 template-name go to state 102 throw-expression go to state 302 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 416 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306 yield-expression go to state 307
149 compound-statement → • "{" statement-seq-opt "}" 630 selection-statement → "if" NOT-opt "consteval" • compound-statement 631 | "if" NOT-opt "consteval" • compound-statement "else" statement "{" shift, and go to state 794 compound-statement go to state 1281
358 init-statement-opt → init-statement • $default reduce using rule 358 (init-statement-opt)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 152 condition → • expression 153 | • attribute-specifier-seq-opt decl-specifier-seq declarator brace-or-equal-initializer 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 277 expression → • assignment-expression 278 | • expression "," assignment-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 632 selection-statement → "switch" "(" init-statement-opt • condition ")" statement 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 261 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 "co_yield" shift, and go to state 264 IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "[" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "delete" reduce using rule 19 (SCOPE-opt) "new" reduce using rule 19 (SCOPE-opt) "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 assignment-expression go to state 268 attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 1238 await-expression go to state 269 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 condition go to state 1282 conditional-expression go to state 272 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 expression go to state 1240 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 285 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 throw-expression go to state 302 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306 yield-expression go to state 307
91 balanced-token → "(" balanced-token-seq-opt ")" • $default reduce using rule 91 (balanced-token)
92 balanced-token → "[" balanced-token-seq-opt "]" • $default reduce using rule 92 (balanced-token)
93 balanced-token → "{" balanced-token-seq-opt "}" • $default reduce using rule 93 (balanced-token)
398 mem-initializer → mem-initializer-id "(" expression-list-opt ")" • $default reduce using rule 398 (mem-initializer)
403 mem-initializer-list → mem-initializer-list "," mem-initializer ELLIPSIS-opt • $default reduce using rule 403 (mem-initializer-list)
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty [IDENTIFIER, "::", "typename", "alignas", "[", "class", "struct", "union", "const", "volatile", "decltype", "enum", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void"] 84 | • attribute-specifier-seq 259 exception-declaration → • attribute-specifier-seq-opt type-specifier-seq declarator 260 | • attribute-specifier-seq-opt type-specifier-seq abstract-declarator-opt 261 | • "..." 335 handler → "catch" "(" • exception-declaration ")" compound-statement "..." shift, and go to state 1283 $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 1284 exception-declaration go to state 1285
338 handler-seq-opt → handler-seq • $default reduce using rule 338 (handler-seq-opt)
336 handler-seq → handler handler-seq-opt • $default reduce using rule 336 (handler-seq)
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 553 parameters-and-qualifiers → "(" parameter-declaration-clause ")" cv-qualifier-seq-opt ref-qualifier-opt noexcept-specifier-opt attribute-specifier-seq-opt • [",", "...", "=", ";", "(", ")", "[", ":", "{", "final", "->", ">", "try", "requires", "override"] "alignas" shift, and go to state 158 "[" shift, and go to state 162 "[" [reduce using rule 553 (parameters-and-qualifiers)] $default reduce using rule 553 (parameters-and-qualifiers) alignment-specifier go to state 166 attribute-specifier go to state 167
418 member-declarator → IDENTIFIER-opt attribute-specifier-seq-opt ":" constant-expression brace-or-equal-initializer-opt • $default reduce using rule 418 (member-declarator)
597 pure-specifier → "=" • '0' '0' shift, and go to state 1214
137 class-name → • IDENTIFIER 138 | • simple-template-id 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 625 return-type-requirement → "->" • type-constraint 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] class-name go to state 55 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 133 nested-name-specifier-opt go to state 221 simple-template-id go to state 96 template-name go to state 102 type-constraint go to state 1286 type-name go to state 106 typedef-name go to state 108
627 return-type-requirement-opt → return-type-requirement • $default reduce using rule 627 (return-type-requirement-opt)
148 compound-requirement → "{" expression "}" NOEXCEPT-opt return-type-requirement-opt • ";" ";" shift, and go to state 1287
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 494 noptr-new-declarator → "[" expression-opt "]" attribute-specifier-seq-opt • [",", "...", "+", "-", "=", ";", "(", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*"] "alignas" shift, and go to state 158 "[" shift, and go to state 162 "[" [reduce using rule 494 (noptr-new-declarator)] $default reduce using rule 494 (noptr-new-declarator) alignment-specifier go to state 166 attribute-specifier go to state 167
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 495 noptr-new-declarator → noptr-new-declarator "[" constant-expression "]" • attribute-specifier-seq-opt $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 1288
5 ELLIPSIS-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 6 | • "..." 137 class-name → • IDENTIFIER 138 | • simple-template-id 153 condition → attribute-specifier-seq-opt decl-specifier-seq • declarator brace-or-equal-initializer 211 declarator → • ptr-declarator 212 | • noptr-declarator parameters-and-qualifiers trailing-return-type 213 declarator-id → • ELLIPSIS-opt id-expression 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 490 noptr-declarator → • declarator-id attribute-specifier-seq-opt 491 | • noptr-declarator parameters-and-qualifiers 492 | • noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 493 | • "(" ptr-declarator ")" 591 ptr-declarator → • noptr-declarator 592 | • ptr-operator ptr-declarator 593 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 594 | • "&" attribute-specifier-seq-opt 595 | • "&&" attribute-specifier-seq-opt 596 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id "..." shift, and go to state 156 IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 159 "&" shift, and go to state 160 "&&" shift, and go to state 163 "decltype" shift, and go to state 21 "*" shift, and go to state 164 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "::" [reduce using rule 5 (ELLIPSIS-opt)] "decltype" [reduce using rule 5 (ELLIPSIS-opt)] $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 165 class-name go to state 55 declarator go to state 1289 declarator-id go to state 171 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 187 noptr-declarator go to state 173 ptr-declarator go to state 174 ptr-operator go to state 175 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "using", ";", "alignas", "(", "&", "asm", "[", "co_await", "{", "class", "struct", "union", "operator", "co_return", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", "*", "default", "try", "while", "do", "for", "break", "continue", "return", "goto", "case", "requires", "new", "~", "++", "--", "auto", "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "literal", "if", "switch", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", "co_yield"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 210 declaration-statement → • block-declaration 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 329 function-specifier → • "virtual" 330 | • explicit-specifier 367 iteration-statement → "while" "(" condition ")" • statement 376 labeled-statement → • attribute-specifier-seq-opt IDENTIFIER ":" statement 377 | • attribute-specifier-seq-opt "case" constant-expression ":" statement 378 | • attribute-specifier-seq-opt "default" ":" statement 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 664 statement → • labeled-statement 665 | • attribute-specifier-seq-opt expression-statement 666 | • attribute-specifier-seq-opt compound-statement 667 | • attribute-specifier-seq-opt selection-statement 668 | • attribute-specifier-seq-opt iteration-statement 669 | • attribute-specifier-seq-opt jump-statement 670 | • declaration-statement 671 | • attribute-specifier-seq-opt try-block 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 151 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "namespace" shift, and go to state 972 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) alias-declaration go to state 47 asm-declaration go to state 48 attribute-specifier-seq go to state 973 attribute-specifier-seq-opt go to state 974 block-declaration go to state 975 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration-statement go to state 976 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 155 function-specifier go to state 79 labeled-statement go to state 977 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 statement go to state 1290 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 277 expression → • assignment-expression 278 | • expression "," assignment-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 368 iteration-statement → "do" statement "while" "(" • expression ")" ";" 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 261 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 "co_yield" shift, and go to state 264 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 assignment-expression go to state 268 await-expression go to state 269 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 272 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 expression go to state 1291 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 285 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 throw-expression go to state 302 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306 yield-expression go to state 307
155 condition-opt → condition • $default reduce using rule 155 (condition-opt)
369 iteration-statement → "for" "(" init-statement condition-opt • ";" expression-opt ")" statement ";" shift, and go to state 1292
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 320 for-range-declaration → attribute-specifier-seq-opt • decl-specifier-seq declarator 321 | attribute-specifier-seq-opt • decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" 329 function-specifier → • "virtual" 330 | • explicit-specifier 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 151 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "alignas" shift, and go to state 158 "[" shift, and go to state 162 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] $default reduce using rule 710 (type-constraint-opt) alignment-specifier go to state 166 attribute-specifier go to state 167 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 1293 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 154 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 155 function-specifier go to state 79 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109
370 iteration-statement → "for" "(" init-statement-opt for-range-declaration • ":" for-range-initializer ")" statement ":" shift, and go to state 1294
377 labeled-statement → attribute-specifier-seq-opt "case" constant-expression ":" statement • $default reduce using rule 377 (labeled-statement)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 152 condition → • expression 153 | • attribute-specifier-seq-opt decl-specifier-seq declarator brace-or-equal-initializer 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 277 expression → • assignment-expression 278 | • expression "," assignment-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 628 selection-statement → "if" CONSTEXPR-opt "(" init-statement-opt • condition ")" statement 629 | "if" CONSTEXPR-opt "(" init-statement-opt • condition ")" statement "else" statement 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 261 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 "co_yield" shift, and go to state 264 IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "[" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "delete" reduce using rule 19 (SCOPE-opt) "new" reduce using rule 19 (SCOPE-opt) "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 assignment-expression go to state 268 attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 1238 await-expression go to state 269 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 condition go to state 1295 conditional-expression go to state 272 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 expression go to state 1240 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 285 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 throw-expression go to state 302 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306 yield-expression go to state 307
630 selection-statement → "if" NOT-opt "consteval" compound-statement • ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "using", ";", "alignas", "(", "&", "asm", "[", "co_await", "{", "}", "class", "struct", "union", "operator", "co_return", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", "*", "default", "try", "while", "do", "for", "break", "continue", "return", "goto", "case", "namespace", "requires", "new", "~", "++", "--", "auto", "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "literal", "if", "else", "switch", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", "co_yield"] 631 | "if" NOT-opt "consteval" compound-statement • "else" statement "else" shift, and go to state 1296 "else" [reduce using rule 630 (selection-statement)] $default reduce using rule 630 (selection-statement)
632 selection-statement → "switch" "(" init-statement-opt condition • ")" statement ")" shift, and go to state 1297
261 exception-declaration → "..." • $default reduce using rule 261 (exception-declaration)
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 175 cv-qualifier → • "const" 176 | • "volatile" 214 decltype-specifier → • "decltype" "(" expression ")" 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 246 enum-name → • IDENTIFIER 259 exception-declaration → attribute-specifier-seq-opt • type-specifier-seq declarator 260 | attribute-specifier-seq-opt • type-specifier-seq abstract-declarator-opt 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 729 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 730 | • type-specifier type-specifier-seq 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "typename" shift, and go to state 8 "alignas" shift, and go to state 158 "[" shift, and go to state 162 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 125 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] $default reduce using rule 710 (type-constraint-opt) alignment-specifier go to state 166 attribute-specifier go to state 167 class-key go to state 406 class-name go to state 55 cv-qualifier go to state 57 decltype-specifier go to state 63 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 414 type-specifier-seq go to state 1298 typedef-name go to state 108 typename-specifier go to state 109
335 handler → "catch" "(" exception-declaration • ")" compound-statement ")" shift, and go to state 1299
625 return-type-requirement → "->" type-constraint • $default reduce using rule 625 (return-type-requirement)
148 compound-requirement → "{" expression "}" NOEXCEPT-opt return-type-requirement-opt ";" • $default reduce using rule 148 (compound-requirement)
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 495 noptr-new-declarator → noptr-new-declarator "[" constant-expression "]" attribute-specifier-seq-opt • [",", "...", "+", "-", "=", ";", "(", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*"] "alignas" shift, and go to state 158 "[" shift, and go to state 162 "[" [reduce using rule 495 (noptr-new-declarator)] $default reduce using rule 495 (noptr-new-declarator) alignment-specifier go to state 166 attribute-specifier go to state 167
116 brace-or-equal-initializer → • "=" initializer-clause 117 | • braced-init-list 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 153 condition → attribute-specifier-seq-opt decl-specifier-seq declarator • brace-or-equal-initializer "=" shift, and go to state 378 "{" shift, and go to state 380 brace-or-equal-initializer go to state 1300 braced-init-list go to state 383
367 iteration-statement → "while" "(" condition ")" statement • $default reduce using rule 367 (iteration-statement)
278 expression → expression • "," assignment-expression 368 iteration-statement → "do" statement "while" "(" expression • ")" ";" "," shift, and go to state 534 ")" shift, and go to state 1301
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 277 expression → • assignment-expression 278 | • expression "," assignment-expression 282 expression-opt → • %empty [")"] 283 | • expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 369 iteration-statement → "for" "(" init-statement condition-opt ";" • expression-opt ")" statement 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 261 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 "co_yield" shift, and go to state 264 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] ")" reduce using rule 282 (expression-opt) "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 assignment-expression go to state 268 await-expression go to state 269 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 272 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 expression go to state 1110 expression-opt go to state 1302 fold-expression go to state 278 id-expression go to state 279 inclusive-or-expression go to state 280 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 285 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 throw-expression go to state 302 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306 yield-expression go to state 307
5 ELLIPSIS-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 6 | • "..." 137 class-name → • IDENTIFIER 138 | • simple-template-id 211 declarator → • ptr-declarator 212 | • noptr-declarator parameters-and-qualifiers trailing-return-type 213 declarator-id → • ELLIPSIS-opt id-expression 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 320 for-range-declaration → attribute-specifier-seq-opt decl-specifier-seq • declarator 321 | attribute-specifier-seq-opt decl-specifier-seq • ref-qualifier-opt "[" identifier-list "]" 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 490 noptr-declarator → • declarator-id attribute-specifier-seq-opt 491 | • noptr-declarator parameters-and-qualifiers 492 | • noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 493 | • "(" ptr-declarator ")" 591 ptr-declarator → • noptr-declarator 592 | • ptr-operator ptr-declarator 593 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 594 | • "&" attribute-specifier-seq-opt 595 | • "&&" attribute-specifier-seq-opt 596 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 602 ref-qualifier → • "&" 603 | • "&&" 604 ref-qualifier-opt → • %empty ["["] 605 | • ref-qualifier 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id "..." shift, and go to state 156 IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 159 "&" shift, and go to state 1303 "&&" shift, and go to state 1304 "decltype" shift, and go to state 21 "*" shift, and go to state 164 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "::" [reduce using rule 5 (ELLIPSIS-opt)] "[" reduce using rule 604 (ref-qualifier-opt) "decltype" [reduce using rule 5 (ELLIPSIS-opt)] $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 165 class-name go to state 55 declarator go to state 1305 declarator-id go to state 171 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 187 noptr-declarator go to state 173 ptr-declarator go to state 174 ptr-operator go to state 175 ref-qualifier go to state 341 ref-qualifier-opt go to state 1306 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 120 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | • "{" designated-initializer-list COMMA-opt "}" 122 | • "{" "}" 129 cast-expression → • unary-expression 130 | • "(" type-id ")" cast-expression 137 class-name → • IDENTIFIER 138 | • simple-template-id 146 compare-expression → • shift-expression 147 | • compare-expression "<=>" shift-expression 156 conditional-expression → • logical-or-expression 157 | • logical-or-expression "?" expression ":" assignment-expression 169 conversion-function-id → • "operator" conversion-type-id 214 decltype-specifier → • "decltype" "(" expression ")" 222 delete-expression → • SCOPE-opt "delete" cast-expression 223 | • SCOPE-opt "delete" "[" "]" cast-expression 246 enum-name → • IDENTIFIER 256 equality-expression → • relational-expression 257 | • equality-expression "==" relational-expression 258 | • equality-expression "!=" relational-expression 262 exclusive-or-expression → • and-expression 263 | • exclusive-or-expression "^" and-expression 273 expr-or-braced-init-list → • expression 274 | • braced-init-list 277 expression → • assignment-expression 278 | • expression "," assignment-expression 285 fold-expression → • "(" cast-expression fold-operator "..." ")" 286 | • "(" "..." fold-operator cast-expression ")" 287 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 322 for-range-initializer → • expr-or-braced-init-list 340 id-expression → • unqualified-id 341 | • qualified-id 344 inclusive-or-expression → • exclusive-or-expression 345 | • inclusive-or-expression "|" exclusive-or-expression 370 iteration-statement → "for" "(" init-statement-opt for-range-declaration ":" • for-range-initializer ")" statement 386 lambda-expression → • lambda-introducer lambda-declarator compound-statement 387 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 388 lambda-introducer → • "[" lambda-capture-opt "]" 392 literal-operator-id → • "operator" string-literal IDENTIFIER 393 | • "operator" user-defined-string-literal 394 logical-and-expression → • inclusive-or-expression 395 | • logical-and-expression "&&" inclusive-or-expression 396 logical-or-expression → • logical-and-expression 397 | • logical-or-expression "||" logical-and-expression 439 multiplicative-expression → • pm-expression 440 | • multiplicative-expression "*" pm-expression 441 | • multiplicative-expression "/" pm-expression 442 | • multiplicative-expression "%" pm-expression 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 466 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 467 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 477 noexcept-expression → • "noexcept" "(" expression ")" 497 operator-function-id → • "operator" overloadable-operator 498 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 556 pm-expression → • cast-expression 557 | • pm-expression ".*" cast-expression 558 | • pm-expression "->*" cast-expression 559 postfix-expression → • primary-expression 560 | • postfix-expression "[" expression-list-opt "]" 561 | • postfix-expression "(" expression-list-opt ")" 562 | • simple-type-specifier "(" expression-list-opt ")" 563 | • typename-specifier "(" expression-list-opt ")" 564 | • simple-type-specifier braced-init-list 565 | • typename-specifier braced-init-list 566 | • postfix-expression "." TEMPLATE-opt id-expression 567 | • postfix-expression "->" TEMPLATE-opt id-expression 568 | • postfix-expression "++" 569 | • postfix-expression "--" 570 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 571 | • "static_cast" "<" type-id ">" "(" expression ")" 572 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 573 | • "const_cast" "<" type-id ">" "(" expression ")" 574 | • "typeid" "(" expression ")" 575 | • "typeid" "(" type-id ")" 576 primary-expression → • "literal" 577 | • string-literal 578 | • "this" 579 | • "(" expression ")" 580 | • id-expression 581 | • lambda-expression 582 | • fold-expression 583 | • requires-expression 600 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 606 relational-expression → • compare-expression 607 | • relational-expression "<" compare-expression 608 | • relational-expression ">" compare-expression 609 | • relational-expression "<=" compare-expression 610 | • relational-expression ">=" compare-expression 624 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 633 shift-expression → • additive-expression 634 | • shift-expression "<<" additive-expression 635 | • shift-expression ">>" additive-expression 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 682 string-literal → • STRING_LITERAL 693 template-id → • simple-template-id 694 | • operator-function-id "<" template-argument-list-opt ">" 695 | • literal-operator-id "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 701 throw-expression → • "throw" assignment-expression-opt 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 736 unary-expression → • postfix-expression 737 | • unary-operator cast-expression 738 | • "++" cast-expression 739 | • "--" cast-expression 740 | • await-expression 741 | • "sizeof" unary-expression 742 | • "sizeof" "(" type-id ")" 743 | • "sizeof" "..." "(" IDENTIFIER ")" 744 | • "alignof" "(" type-id ")" 745 | • noexcept-expression 746 | • new-expression 747 | • delete-expression 748 unary-operator → • "*" 749 | • "&" 750 | • "+" 751 | • "-" 752 | • "!" 753 | • "~" 755 unqualified-id → • IDENTIFIER 756 | • operator-function-id 757 | • conversion-function-id 758 | • literal-operator-id 759 | • "~" type-name 760 | • "~" decltype-specifier 761 | • template-id 775 yield-expression → • "co_yield" assignment-expression 776 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "{" shift, and go to state 380 "operator" shift, and go to state 249 "decltype" shift, and go to state 21 "*" shift, and go to state 250 "requires" shift, and go to state 251 "~" shift, and go to state 252 "++" shift, and go to state 253 "--" shift, and go to state 254 "dynamic_cast" shift, and go to state 255 "static_cast" shift, and go to state 256 "reinterpret_cast" shift, and go to state 257 "const_cast" shift, and go to state 258 "typeid" shift, and go to state 259 "literal" shift, and go to state 260 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 261 "sizeof" shift, and go to state 262 "alignof" shift, and go to state 263 "co_yield" shift, and go to state 264 IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "auto" reduce using rule 710 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 265 additive-expression go to state 266 and-expression go to state 267 assignment-expression go to state 268 await-expression go to state 269 braced-init-list go to state 1179 cast-expression go to state 270 class-name go to state 55 compare-expression go to state 271 conditional-expression go to state 272 conversion-function-id go to state 273 decltype-specifier go to state 63 delete-expression go to state 274 enum-name go to state 71 equality-expression go to state 275 exclusive-or-expression go to state 276 expr-or-braced-init-list go to state 1307 expression go to state 1182 fold-expression go to state 278 for-range-initializer go to state 1308 id-expression go to state 279 inclusive-or-expression go to state 280 lambda-expression go to state 281 lambda-introducer go to state 282 literal-operator-id go to state 283 logical-and-expression go to state 284 logical-or-expression go to state 285 multiplicative-expression go to state 286 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 287 nested-name-specifier-opt go to state 90 new-expression go to state 288 noexcept-expression go to state 289 operator-function-id go to state 290 placeholder-type-specifier go to state 94 pm-expression go to state 291 postfix-expression go to state 292 primary-expression go to state 293 qualified-id go to state 294 relational-expression go to state 295 requires-expression go to state 296 shift-expression go to state 297 simple-template-id go to state 298 simple-type-specifier go to state 299 string-literal go to state 300 template-id go to state 301 template-name go to state 102 throw-expression go to state 302 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 303 unary-expression go to state 304 unary-operator go to state 305 unqualified-id go to state 306 yield-expression go to state 307
628 selection-statement → "if" CONSTEXPR-opt "(" init-statement-opt condition • ")" statement 629 | "if" CONSTEXPR-opt "(" init-statement-opt condition • ")" statement "else" statement ")" shift, and go to state 1309
44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "using", ";", "alignas", "(", "&", "asm", "[", "co_await", "{", "class", "struct", "union", "operator", "co_return", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", "*", "default", "try", "while", "do", "for", "break", "continue", "return", "goto", "case", "requires", "new", "~", "++", "--", "auto", "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "literal", "if", "switch", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", "co_yield"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 210 declaration-statement → • block-declaration 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 329 function-specifier → • "virtual" 330 | • explicit-specifier 376 labeled-statement → • attribute-specifier-seq-opt IDENTIFIER ":" statement 377 | • attribute-specifier-seq-opt "case" constant-expression ":" statement 378 | • attribute-specifier-seq-opt "default" ":" statement 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 631 selection-statement → "if" NOT-opt "consteval" compound-statement "else" • statement 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 664 statement → • labeled-statement 665 | • attribute-specifier-seq-opt expression-statement 666 | • attribute-specifier-seq-opt compound-statement 667 | • attribute-specifier-seq-opt selection-statement 668 | • attribute-specifier-seq-opt iteration-statement 669 | • attribute-specifier-seq-opt jump-statement 670 | • declaration-statement 671 | • attribute-specifier-seq-opt try-block 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 151 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "namespace" shift, and go to state 972 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) alias-declaration go to state 47 asm-declaration go to state 48 attribute-specifier-seq go to state 973 attribute-specifier-seq-opt go to state 974 block-declaration go to state 975 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration-statement go to state 976 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 155 function-specifier go to state 79 labeled-statement go to state 977 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 statement go to state 1310 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "using", ";", "alignas", "(", "&", "asm", "[", "co_await", "{", "class", "struct", "union", "operator", "co_return", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", "*", "default", "try", "while", "do", "for", "break", "continue", "return", "goto", "case", "requires", "new", "~", "++", "--", "auto", "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "literal", "if", "switch", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", "co_yield"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 210 declaration-statement → • block-declaration 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 329 function-specifier → • "virtual" 330 | • explicit-specifier 376 labeled-statement → • attribute-specifier-seq-opt IDENTIFIER ":" statement 377 | • attribute-specifier-seq-opt "case" constant-expression ":" statement 378 | • attribute-specifier-seq-opt "default" ":" statement 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 632 selection-statement → "switch" "(" init-statement-opt condition ")" • statement 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 664 statement → • labeled-statement 665 | • attribute-specifier-seq-opt expression-statement 666 | • attribute-specifier-seq-opt compound-statement 667 | • attribute-specifier-seq-opt selection-statement 668 | • attribute-specifier-seq-opt iteration-statement 669 | • attribute-specifier-seq-opt jump-statement 670 | • declaration-statement 671 | • attribute-specifier-seq-opt try-block 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 151 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "namespace" shift, and go to state 972 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) alias-declaration go to state 47 asm-declaration go to state 48 attribute-specifier-seq go to state 973 attribute-specifier-seq-opt go to state 974 block-declaration go to state 975 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration-statement go to state 976 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 155 function-specifier go to state 79 labeled-statement go to state 977 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 statement go to state 1311 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
5 ELLIPSIS-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 6 | • "..." 29 abstract-declarator → • ptr-abstract-declarator 30 | • noptr-abstract-declarator-opt parameters-and-qualifiers trailing-return-type 31 | • abstract-pack-declarator 32 abstract-declarator-opt → • %empty [")"] 33 | • abstract-declarator 34 abstract-pack-declarator → • noptr-abstract-pack-declarator 35 | • ptr-operator abstract-pack-declarator 137 class-name → • IDENTIFIER 138 | • simple-template-id 211 declarator → • ptr-declarator 212 | • noptr-declarator parameters-and-qualifiers trailing-return-type 213 declarator-id → • ELLIPSIS-opt id-expression 214 decltype-specifier → • "decltype" "(" expression ")" 246 enum-name → • IDENTIFIER 259 exception-declaration → attribute-specifier-seq-opt type-specifier-seq • declarator 260 | attribute-specifier-seq-opt type-specifier-seq • abstract-declarator-opt 444 namespace-alias → • IDENTIFIER 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 482 noptr-abstract-declarator → • noptr-abstract-declarator-opt parameters-and-qualifiers 483 | • noptr-abstract-declarator-opt "[" constant-expression-opt "]" attribute-specifier-seq-opt 484 | • "(" ptr-abstract-declarator ")" 485 noptr-abstract-declarator-opt → • %empty ["(", "["] 486 | • noptr-abstract-declarator 487 noptr-abstract-pack-declarator → • noptr-abstract-pack-declarator parameters-and-qualifiers 488 | • noptr-abstract-pack-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 489 | • "..." 490 noptr-declarator → • declarator-id attribute-specifier-seq-opt 491 | • noptr-declarator parameters-and-qualifiers 492 | • noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 493 | • "(" ptr-declarator ")" 587 ptr-abstract-declarator → • noptr-abstract-declarator 588 | • ptr-operator ptr-abstract-declarator-opt 591 ptr-declarator → • noptr-declarator 592 | • ptr-operator ptr-declarator 593 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 594 | • "&" attribute-specifier-seq-opt 595 | • "&&" attribute-specifier-seq-opt 596 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 696 template-name → • IDENTIFIER 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 731 typedef-name → • IDENTIFIER 732 | • simple-template-id "..." shift, and go to state 916 IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 917 "&" shift, and go to state 160 "&&" shift, and go to state 163 "decltype" shift, and go to state 21 "*" shift, and go to state 164 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "::" [reduce using rule 5 (ELLIPSIS-opt)] "(" [reduce using rule 485 (noptr-abstract-declarator-opt)] ")" reduce using rule 32 (abstract-declarator-opt) "[" reduce using rule 485 (noptr-abstract-declarator-opt) "decltype" [reduce using rule 5 (ELLIPSIS-opt)] $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 165 abstract-declarator go to state 684 abstract-declarator-opt go to state 1312 abstract-pack-declarator go to state 686 class-name go to state 55 declarator go to state 1313 declarator-id go to state 171 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 187 noptr-abstract-declarator go to state 687 noptr-abstract-declarator-opt go to state 688 noptr-abstract-pack-declarator go to state 689 noptr-declarator go to state 173 ptr-abstract-declarator go to state 690 ptr-declarator go to state 174 ptr-operator go to state 920 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
149 compound-statement → • "{" statement-seq-opt "}" 335 handler → "catch" "(" exception-declaration ")" • compound-statement "{" shift, and go to state 794 compound-statement go to state 1314
153 condition → attribute-specifier-seq-opt decl-specifier-seq declarator brace-or-equal-initializer • $default reduce using rule 153 (condition)
368 iteration-statement → "do" statement "while" "(" expression ")" • ";" ";" shift, and go to state 1315
369 iteration-statement → "for" "(" init-statement condition-opt ";" expression-opt • ")" statement ")" shift, and go to state 1316
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["...", IDENTIFIER, "::", "alignas", "(", "&", "[", "&&", "operator", "decltype", "*", "~"] 84 | • attribute-specifier-seq 594 ptr-operator → "&" • attribute-specifier-seq-opt 602 ref-qualifier → "&" • ["["] "[" reduce using rule 83 (attribute-specifier-seq-opt) "[" [reduce using rule 602 (ref-qualifier)] $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 331
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["...", IDENTIFIER, "::", "alignas", "(", "&", "[", "&&", "operator", "decltype", "*", "~"] 84 | • attribute-specifier-seq 595 ptr-operator → "&&" • attribute-specifier-seq-opt 603 ref-qualifier → "&&" • ["["] "[" reduce using rule 83 (attribute-specifier-seq-opt) "[" [reduce using rule 603 (ref-qualifier)] $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 334
320 for-range-declaration → attribute-specifier-seq-opt decl-specifier-seq declarator • $default reduce using rule 320 (for-range-declaration)
321 for-range-declaration → attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt • "[" identifier-list "]" "[" shift, and go to state 1317
322 for-range-initializer → expr-or-braced-init-list • $default reduce using rule 322 (for-range-initializer)
370 iteration-statement → "for" "(" init-statement-opt for-range-declaration ":" for-range-initializer • ")" statement ")" shift, and go to state 1318
44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "using", ";", "alignas", "(", "&", "asm", "[", "co_await", "{", "class", "struct", "union", "operator", "co_return", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", "*", "default", "try", "while", "do", "for", "break", "continue", "return", "goto", "case", "requires", "new", "~", "++", "--", "auto", "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "literal", "if", "switch", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", "co_yield"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 210 declaration-statement → • block-declaration 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 329 function-specifier → • "virtual" 330 | • explicit-specifier 376 labeled-statement → • attribute-specifier-seq-opt IDENTIFIER ":" statement 377 | • attribute-specifier-seq-opt "case" constant-expression ":" statement 378 | • attribute-specifier-seq-opt "default" ":" statement 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 628 selection-statement → "if" CONSTEXPR-opt "(" init-statement-opt condition ")" • statement 629 | "if" CONSTEXPR-opt "(" init-statement-opt condition ")" • statement "else" statement 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 664 statement → • labeled-statement 665 | • attribute-specifier-seq-opt expression-statement 666 | • attribute-specifier-seq-opt compound-statement 667 | • attribute-specifier-seq-opt selection-statement 668 | • attribute-specifier-seq-opt iteration-statement 669 | • attribute-specifier-seq-opt jump-statement 670 | • declaration-statement 671 | • attribute-specifier-seq-opt try-block 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 151 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "namespace" shift, and go to state 972 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) alias-declaration go to state 47 asm-declaration go to state 48 attribute-specifier-seq go to state 973 attribute-specifier-seq-opt go to state 974 block-declaration go to state 975 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration-statement go to state 976 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 155 function-specifier go to state 79 labeled-statement go to state 977 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 statement go to state 1319 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
631 selection-statement → "if" NOT-opt "consteval" compound-statement "else" statement • $default reduce using rule 631 (selection-statement)
632 selection-statement → "switch" "(" init-statement-opt condition ")" statement • $default reduce using rule 632 (selection-statement)
260 exception-declaration → attribute-specifier-seq-opt type-specifier-seq abstract-declarator-opt • $default reduce using rule 260 (exception-declaration)
259 exception-declaration → attribute-specifier-seq-opt type-specifier-seq declarator • $default reduce using rule 259 (exception-declaration)
335 handler → "catch" "(" exception-declaration ")" compound-statement • $default reduce using rule 335 (handler)
368 iteration-statement → "do" statement "while" "(" expression ")" ";" • $default reduce using rule 368 (iteration-statement)
44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "using", ";", "alignas", "(", "&", "asm", "[", "co_await", "{", "class", "struct", "union", "operator", "co_return", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", "*", "default", "try", "while", "do", "for", "break", "continue", "return", "goto", "case", "requires", "new", "~", "++", "--", "auto", "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "literal", "if", "switch", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", "co_yield"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 210 declaration-statement → • block-declaration 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 329 function-specifier → • "virtual" 330 | • explicit-specifier 369 iteration-statement → "for" "(" init-statement condition-opt ";" expression-opt ")" • statement 376 labeled-statement → • attribute-specifier-seq-opt IDENTIFIER ":" statement 377 | • attribute-specifier-seq-opt "case" constant-expression ":" statement 378 | • attribute-specifier-seq-opt "default" ":" statement 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 664 statement → • labeled-statement 665 | • attribute-specifier-seq-opt expression-statement 666 | • attribute-specifier-seq-opt compound-statement 667 | • attribute-specifier-seq-opt selection-statement 668 | • attribute-specifier-seq-opt iteration-statement 669 | • attribute-specifier-seq-opt jump-statement 670 | • declaration-statement 671 | • attribute-specifier-seq-opt try-block 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 151 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "namespace" shift, and go to state 972 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) alias-declaration go to state 47 asm-declaration go to state 48 attribute-specifier-seq go to state 973 attribute-specifier-seq-opt go to state 974 block-declaration go to state 975 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration-statement go to state 976 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 155 function-specifier go to state 79 labeled-statement go to state 977 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 statement go to state 1320 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
321 for-range-declaration → attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" • identifier-list "]" 342 identifier-list → • IDENTIFIER 343 | • identifier-list "," IDENTIFIER IDENTIFIER shift, and go to state 846 identifier-list go to state 1321
44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "using", ";", "alignas", "(", "&", "asm", "[", "co_await", "{", "class", "struct", "union", "operator", "co_return", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", "*", "default", "try", "while", "do", "for", "break", "continue", "return", "goto", "case", "requires", "new", "~", "++", "--", "auto", "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "literal", "if", "switch", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", "co_yield"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 210 declaration-statement → • block-declaration 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 329 function-specifier → • "virtual" 330 | • explicit-specifier 370 iteration-statement → "for" "(" init-statement-opt for-range-declaration ":" for-range-initializer ")" • statement 376 labeled-statement → • attribute-specifier-seq-opt IDENTIFIER ":" statement 377 | • attribute-specifier-seq-opt "case" constant-expression ":" statement 378 | • attribute-specifier-seq-opt "default" ":" statement 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 664 statement → • labeled-statement 665 | • attribute-specifier-seq-opt expression-statement 666 | • attribute-specifier-seq-opt compound-statement 667 | • attribute-specifier-seq-opt selection-statement 668 | • attribute-specifier-seq-opt iteration-statement 669 | • attribute-specifier-seq-opt jump-statement 670 | • declaration-statement 671 | • attribute-specifier-seq-opt try-block 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 151 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "namespace" shift, and go to state 972 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) alias-declaration go to state 47 asm-declaration go to state 48 attribute-specifier-seq go to state 973 attribute-specifier-seq-opt go to state 974 block-declaration go to state 975 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration-statement go to state 976 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 155 function-specifier go to state 79 labeled-statement go to state 977 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 statement go to state 1322 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
628 selection-statement → "if" CONSTEXPR-opt "(" init-statement-opt condition ")" statement • ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "using", ";", "alignas", "(", "&", "asm", "[", "co_await", "{", "}", "class", "struct", "union", "operator", "co_return", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", "*", "default", "try", "while", "do", "for", "break", "continue", "return", "goto", "case", "namespace", "requires", "new", "~", "++", "--", "auto", "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "literal", "if", "else", "switch", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", "co_yield"] 629 | "if" CONSTEXPR-opt "(" init-statement-opt condition ")" statement • "else" statement "else" shift, and go to state 1323 "else" [reduce using rule 628 (selection-statement)] $default reduce using rule 628 (selection-statement)
369 iteration-statement → "for" "(" init-statement condition-opt ";" expression-opt ")" statement • $default reduce using rule 369 (iteration-statement)
321 for-range-declaration → attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list • "]" 343 identifier-list → identifier-list • "," IDENTIFIER "," shift, and go to state 1006 "]" shift, and go to state 1324
370 iteration-statement → "for" "(" init-statement-opt for-range-declaration ":" for-range-initializer ")" statement • $default reduce using rule 370 (iteration-statement)
44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "using", ";", "alignas", "(", "&", "asm", "[", "co_await", "{", "class", "struct", "union", "operator", "co_return", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", "*", "default", "try", "while", "do", "for", "break", "continue", "return", "goto", "case", "requires", "new", "~", "++", "--", "auto", "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "literal", "if", "switch", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", "co_yield"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 131 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 132 | • class-key attribute-specifier-seq-opt base-clause-opt 134 class-key → • "class" 135 | • "struct" 136 | • "union" 137 class-name → • IDENTIFIER 138 | • simple-template-id 142 class-specifier → • class-head "{" member-specification-opt "}" 175 cv-qualifier → • "const" 176 | • "volatile" 180 decl-specifier → • storage-class-specifier 181 | • defining-type-specifier 182 | • function-specifier 183 | • "friend" 184 | • "typedef" 185 | • "constexpr" 186 | • "consteval" 187 | • "constinit" 188 | • "inline" 189 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 190 | • decl-specifier decl-specifier-seq 210 declaration-statement → • block-declaration 214 decltype-specifier → • "decltype" "(" expression ")" 217 defining-type-specifier → • type-specifier 218 | • class-specifier 219 | • enum-specifier 228 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 229 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 230 | • class-key simple-template-id 231 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 232 | • elaborated-enum-specifier 239 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 243 enum-key → • "enum" 244 | • "enum" "class" 245 | • "enum" "struct" 246 enum-name → • IDENTIFIER 247 enum-specifier → • enum-head "{" enumerator-list-opt "}" 248 | • enum-head "{" enumerator-list "," "}" 266 explicit-specifier → • "explicit" "(" constant-expression ")" 267 | • "explicit" 329 function-specifier → • "virtual" 330 | • explicit-specifier 376 labeled-statement → • attribute-specifier-seq-opt IDENTIFIER ":" statement 377 | • attribute-specifier-seq-opt "case" constant-expression ":" statement 378 | • attribute-specifier-seq-opt "default" ":" statement 444 namespace-alias → • IDENTIFIER 445 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 450 namespace-name → • IDENTIFIER 451 | • namespace-alias 452 nested-name-specifier → • "::" 453 | • type-name "::" 454 | • namespace-name "::" 455 | • decltype-specifier "::" 456 | • nested-name-specifier IDENTIFIER "::" 457 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 458 nested-name-specifier-opt → • %empty [IDENTIFIER] 459 | • nested-name-specifier 496 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 554 placeholder-type-specifier → • type-constraint-opt "auto" 555 | • type-constraint-opt "decltype" "(" "auto" ")" 629 selection-statement → "if" CONSTEXPR-opt "(" init-statement-opt condition ")" statement "else" • statement 640 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 641 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 642 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 644 simple-template-id → • template-name "<" template-argument-list-opt ">" 645 simple-type-specifier → • nested-name-specifier-opt type-name 646 | • nested-name-specifier "template" simple-template-id 647 | • decltype-specifier 648 | • placeholder-type-specifier 649 | • nested-name-specifier-opt template-name 650 | • "char" 651 | • "char8_t" 652 | • "char16_t" 653 | • "char32_t" 654 | • "wchar_t" 655 | • "bool" 656 | • "short" 657 | • "int" 658 | • "long" 659 | • "signed" 660 | • "unsigned" 661 | • "float" 662 | • "double" 663 | • "void" 664 statement → • labeled-statement 665 | • attribute-specifier-seq-opt expression-statement 666 | • attribute-specifier-seq-opt compound-statement 667 | • attribute-specifier-seq-opt selection-statement 668 | • attribute-specifier-seq-opt iteration-statement 669 | • attribute-specifier-seq-opt jump-statement 670 | • declaration-statement 671 | • attribute-specifier-seq-opt try-block 676 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 677 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 678 storage-class-specifier → • "static" 679 | • "thread_local" 680 | • "extern" 681 | • "mutable" 696 template-name → • IDENTIFIER 708 type-constraint → • nested-name-specifier-opt concept-name 709 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 710 type-constraint-opt → • %empty ["decltype", "auto"] 711 | • type-constraint 713 type-name → • class-name 714 | • enum-name 715 | • typedef-name 725 type-specifier → • simple-type-specifier 726 | • elaborated-type-specifier 727 | • typename-specifier 728 | • cv-qualifier 731 typedef-name → • IDENTIFIER 732 | • simple-template-id 733 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 734 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 763 using-declaration → • "using" using-declarator-list ";" 767 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 768 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 151 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "namespace" shift, and go to state 972 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 458 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 710 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 710 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) alias-declaration go to state 47 asm-declaration go to state 48 attribute-specifier-seq go to state 973 attribute-specifier-seq-opt go to state 974 block-declaration go to state 975 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration-statement go to state 976 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 155 function-specifier go to state 79 labeled-statement go to state 977 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 statement go to state 1325 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
321 for-range-declaration → attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" • $default reduce using rule 321 (for-range-declaration)
629 selection-statement → "if" CONSTEXPR-opt "(" init-statement-opt condition ")" statement "else" statement • $default reduce using rule 629 (selection-statement)