| abstract_declarator | 
 
 | 
 | access_specifier | 
 
-  
'private' 
-  
'protected' 
-  
'public' 
 
 | 
 | additive_expression | 
 
 | 
 | alias_declaration | 
  'using' identifier '=' type_id ';' | 
 | alignment_specifier | 
 
 | 
 | and_expression | 
 
 | 
 | asm_definition | 
  'asm' '(' string_literal ')' ';' | 
 | assignment_expression | 
 
 | 
 | assignment_operator | 
 
-  
'=' 
-  
'*=' 
-  
'/=' 
-  
'%=' 
-  
'+=' 
-  
'-=' 
-  
'>>=' 
-  
'<<=' 
-  
'&=' 
-  
'^=' 
-  
'|=' 
 
 | 
 | attribute | 
  attribute_token [ attribute_argument_clause ] | 
 | attribute_argument_clause | 
  '(' balanced_token_seq ')' | 
 | attribute_declaration | 
  attribute_specifier_seq ';' | 
 | attribute_list | 
 
 | 
 | attribute_namespace | 
  identifier | 
 | attribute_scoped_token | 
  attribute_namespace '::' identifier | 
 | attribute_specifier | 
 
 | 
 | attribute_specifier_seq | 
  [ attribute_specifier_seq ] attribute_specifier | 
 | attribute_token | 
 
 | 
 | balanced_token | 
 
 | 
 | balanced_token_seq | 
 
 | 
 | base_clause | 
  ':' base_specifier_list | 
 | base_specifier | 
 
 | 
 | base_specifier_list | 
 
 | 
 | base_type_specifier | 
  class_or_decltype | 
 | block_declaration | 
 
 | 
 | boolean_literal | 
 
 | 
 | brace_or_equal_initializer | 
 
 | 
 | braced_init_list | 
 
 | 
 | c_char | 
 
 | 
 | c_char_sequence | 
 
 | 
 | capture | 
 
 | 
 | capture_default | 
 
 | 
 | capture_list | 
 
 | 
 | cast_expression | 
 
 | 
 | character_literal | 
 
 | 
 | class_head | 
 
 | 
 | class_head_name | 
  [ nested_name_specifier ] class_name | 
 | class_key | 
 
 | 
 | class_name | 
 
 | 
 | class_or_decltype | 
 
 | 
 | class_or_namespace_name | 
 
 | 
 | class_specifier | 
  class_head '{' [ member_specification ] '}' | 
 | class_virt_specifier | 
 
 | 
 | class_virt_specifier_seq | 
 
 | 
 | compound_statement | 
  '{' [ statement_seq ] '}' | 
 | condition | 
 
 | 
 | conditional_expression | 
 
 | 
 | constant_expression | 
  conditional_expression | 
 | constant_initializer | 
  '=' constant_expression | 
 | control_line | 
 
 | 
 | conversion_declarator | 
  ptr_operator [ conversion_declarator ] | 
 | conversion_function_id | 
  'operator' conversion_type_id | 
 | conversion_type_id | 
  type_specifier_seq [ conversion_declarator ] | 
 | ctor_initializer | 
  ':' mem_initializer_list | 
 | cv_qualifier | 
 
 | 
 | cv_qualifier_seq | 
  cv_qualifier [ cv_qualifier_seq ] | 
 | d_char | 
  ANY_RAW_STRING_DELIMITER_CHAR | 
 | d_char_sequence | 
 
 | 
 | decimal_literal | 
 
 | 
 | decl_specifier | 
 
 | 
 | decl_specifier_seq | 
 
 | 
 | declaration | 
 
 | 
 | declaration_seq | 
 
 | 
 | declaration_statement | 
  block_declaration | 
 | declarator | 
 
 | 
 | declarator_id | 
 
 | 
 | decltype_specifier | 
  'decltype' '(' expression ')' | 
 | delete_expression | 
 
 | 
 | digit | 
  DIGIT | 
 | digit_sequence | 
 
 | 
 | direct_abstract_declarator | 
 
 | 
 | direct_declarator | 
 
 | 
 | direct_new_declarator | 
 
 | 
 | dynamic_exception_specification | 
  'throw' '(' [ type_id_list ] ')' | 
 | elaborated_type_specifier | 
 
 | 
 | elif_group | 
  '#' 'elif' constant_expression new_line [ group ] | 
 | elif_groups | 
 
 | 
 | else_group | 
  '#' 'else' new_line [ group ] | 
 | empty_declaration | 
  ';' | 
 | encoding_prefix | 
 
 | 
 | endif_line | 
  '#' 'endif' new_line | 
 | enum_base | 
  type_specifier_seq | 
 | enum_head | 
 
 | 
 | enum_key | 
 
-  
'enum' 
-  
'enum' 'class' 
-  
'enum' 'struct' 
 
 | 
 | enum_name | 
  identifier | 
 | enum_specifier | 
 
 | 
 | enumerator | 
  identifier | 
 | enumerator_definition | 
 
 | 
 | enumerator_list | 
 
 | 
 | equality_expression | 
 
 | 
 | escape_sequence | 
 
 | 
 | exception_declatation | 
 
 | 
 | exception_specification | 
 
 | 
 | exclusive_or_expression | 
 
 | 
 | explicit_instantiation | 
  [ 'extern'(C++11 only) ] 'template' declaration | 
 | explicit_specialization | 
  'template' '<' '>' declaration | 
 | exponent_part | 
 
 | 
 | expression | 
 
 | 
 | expression_list | 
 
 | 
 | expression_statement | 
  [ expression ] ';' | 
 | extension_namespace_definition | 
  [ 'inline'(C++11 only) ] 'namespace' original_namespace_name '{' namespace_body '}' | 
 | floating_literal | 
 
 | 
 | floating_suffix | 
 
 | 
 | for_init_statement | 
 
 | 
 | for_range_declaration | 
  [ attribute_specifier_seq ] type_specifier_seq declarator | 
 | for_range_initializer | 
 
 | 
 | fractional_constant | 
 
 | 
 | function_body | 
 
 | 
 | function_definition | 
 
 | 
 | function_specifier | 
 
-  
'inline' 
-  
'virtual' 
-  
'explicit' 
 
 | 
 | function_try_block | 
 
 | 
 | group | 
 
 | 
 | group_part | 
 
 | 
 | h_char | 
  ANY_CHARACTER_EXCEPT_NEWLINE_GT | 
 | h_char_sequence | 
 
 | 
 | handler | 
  'catch' '(' exception_declatation ')' compound_statement | 
 | handler_seq | 
  handler [ handler_seq ] | 
 | header_name | 
 
 | 
 | hex_quad | 
  hexadecimal_digit hexadecimal_digit hexadecimal_digit hexadecimal_digit | 
 | hexadecimal_digit | 
 
-  
'0' 
-  
'1' 
-  
'2' 
-  
'3' 
-  
'4' 
-  
'5' 
-  
'6' 
-  
'7' 
-  
'8' 
-  
'9' 
-  
'a' 
-  
'b' 
-  
'c' 
-  
'd' 
-  
'e' 
-  
'f' 
-  
'A' 
-  
'B' 
-  
'C' 
-  
'D' 
-  
'E' 
-  
'F' 
 
 | 
 | hexadecimal_escape_sequence | 
 
 | 
 | hexadecimal_literal | 
 
 | 
 | id_expression | 
 
 | 
 | identifier | 
 
 | 
 | identifier_list | 
 
 | 
 | if_group | 
 
 | 
 | if_section | 
  if_group [ elif_groups ] [ else_group ] endif_line | 
 | inclusive_or_expression | 
 
 | 
 | init_declarator | 
  declarator [ initializer ] | 
 | init_declarator_list | 
 
 | 
 | initializer | 
 
 | 
 | initializer_clause | 
 
 | 
 | initializer_list | 
 
 | 
 | integer_literal | 
 
 | 
 | integer_suffix | 
 
 | 
 | iteration_statement | 
 
 | 
 | jump_statement | 
 
 | 
 | labeled_statement | 
 
 | 
 | lambda_capture | 
 
 | 
 | lambda_declarator | 
  '(' parameter_declaration_clause ')' [ 'mutable' ] [ exception_specification ] [ attribute_specifier_seq ] [ trailing_return_type ] | 
 | lambda_expression | 
  lambda_introducer [ lambda_declarator ] compound_statement | 
 | lambda_introducer | 
  '[' [ lambda_capture ] ']' | 
 | linkage_specification | 
 
 | 
 | literal | 
 
 | 
 | literal_operator_id | 
  'operator' '""' identifier | 
 | logical_and_expression | 
 
 | 
 | logical_or_expression | 
 
 | 
 | long_long_suffix | 
 
 | 
 | long_suffix | 
 
 | 
 | lparen | 
  LEFT_PARENTHESIS_WITHOUT_LEADING_WS | 
 | mem_initializer | 
 
 | 
 | mem_initializer_id | 
 
 | 
 | mem_initializer_list | 
 
 | 
 | member_declaration | 
 
 | 
 | member_declarator | 
 
 | 
 | member_declarator_list | 
 
 | 
 | member_specification | 
 
 | 
 | multiplicative_expression | 
 
 | 
 | named_namespace_definition | 
 
 | 
 | namespace_alias | 
  identifier | 
 | namespace_alias_definition | 
  'namespace' identifier '=' qualified_namespace_specifier ';' | 
 | namespace_body | 
  [ declaration_seq ] | 
 | namespace_definition | 
 
 | 
 | namespace_name | 
 
 | 
 | nested_name_specifier | 
 
 | 
 | new_declarator | 
 
 | 
 | new_expression | 
 
 | 
 | new_initializer | 
 
 | 
 | new_line | 
  NEWLINE | 
 | new_placement | 
  '(' expression_list ')' | 
 | new_type_id | 
  type_specifier_seq [ new_declarator ] | 
 | noexcept_expression | 
  'noexcept' '(' expression ')' | 
 | noexcept_specification | 
 
 | 
 | non_directive | 
  pp_tokens new_line | 
 | nondigit | 
 
 | 
 | nonzero_digit | 
 
-  
'1' 
-  
'2' 
-  
'3' 
-  
'4' 
-  
'5' 
-  
'6' 
-  
'7' 
-  
'8' 
-  
'9' 
 
 | 
 | noptr_abstract_declarator | 
 
 | 
 | noptr_declarator | 
 
 | 
 | noptr_new_declarator | 
 
 | 
 | octal_digit | 
 
-  
'0' 
-  
'1' 
-  
'2' 
-  
'3' 
-  
'4' 
-  
'5' 
-  
'6' 
-  
'7' 
 
 | 
 | octal_escape_sequence | 
 
 | 
 | octal_literal | 
 
 | 
 | opaque_enum_declaration | 
  enum_key [ attribute_specifier_seq ] identifier [ enum_base ] | 
 | operator | 
 
-  
'new' 
-  
'delete' 
-  
'new[]' 
-  
'delete[]' 
-  
'+' 
-  
'-' 
-  
'*' 
-  
'/' 
-  
'%' 
-  
'^' 
-  
'&' 
-  
'|' 
-  
'~' 
-  
'!' 
-  
'=' 
-  
'<' 
-  
'>' 
-  
'+=' 
-  
'-=' 
-  
'*=' 
-  
'/=' 
-  
'%=' 
-  
'^=' 
-  
'&=' 
-  
'|=' 
-  
'<<' 
-  
'>>' 
-  
'>>=' 
-  
'<<=' 
-  
'==' 
-  
'!=' 
-  
'<=' 
-  
'>=' 
-  
'&&' 
-  
'||' 
-  
'++' 
-  
'--' 
-  
',' 
-  
'->*' 
-  
'->' 
-  
'()' 
-  
'[]' 
 
 | 
 | operator_function_id | 
  'operator' operator | 
 | original_namespace_definition | 
  [ 'inline'(C++11 only) ] 'namespace' identifier '{' namespace_body '}' | 
 | original_namespace_name | 
  identifier | 
 | parameter_declaration | 
 
 | 
 | parameter_declaration_clause | 
 
 | 
 | parameter_declaration_list | 
 
 | 
 | parameters_and_qualifiers | 
  '(' parameter_declaration_clause ')' [ attribute_specifier_seq ] [ cv_qualifier_seq ] [ ref_qualifier ] [ exception_specification ] | 
 | pm_expression | 
 
 | 
 | pointer_literal | 
  'nullptr' | 
 | postfix_expression | 
 
 | 
 | pp_number | 
 
 | 
 | pp_tokens | 
 
 | 
 | preprocessing_file | 
  [ group ] | 
 | preprocessing_op_or_punc | 
 
-  
'{' 
-  
'}' 
-  
'[' 
-  
']' 
-  
'#' 
-  
'##' 
-  
'(' 
-  
')' 
-  
'<:' 
-  
':>' 
-  
'<%' 
-  
'%>' 
-  
'%:' 
-  
'%:%:' 
-  
';' 
-  
':' 
-  
'...' 
-  
'new' 
-  
'delete' 
-  
'?' 
-  
'::' 
-  
'.' 
-  
'.*' 
-  
'+' 
-  
'-' 
-  
'*' 
-  
'/' 
-  
'%' 
-  
'^' 
-  
'&' 
-  
'|' 
-  
'~' 
-  
'!' 
-  
'=' 
-  
'<' 
-  
'>' 
-  
'+=' 
-  
'-=' 
-  
'*=' 
-  
'/=' 
-  
'%=' 
-  
'^=' 
-  
'&=' 
-  
'|=' 
-  
'<<' 
-  
'>>' 
-  
'>>=' 
-  
'<<=' 
-  
'==' 
-  
'!=' 
-  
'<=' 
-  
'>=' 
-  
'&&' 
-  
'||' 
-  
'++' 
-  
'--' 
-  
',' 
-  
'->*' 
-  
'->' 
-  
'and' 
-  
'and_eq' 
-  
'bitand' 
-  
'bitor' 
-  
'compl' 
-  
'not' 
-  
'not_eq' 
-  
'or' 
-  
'or_eq' 
-  
'xor' 
-  
'xor_eq' 
 
 | 
 | preprocessing_token | 
 
 | 
 | primary_expression | 
 
 | 
 | pseudo_destructor_name | 
 
 | 
 | ptr_abstract_declarator | 
 
 | 
 | ptr_declarator | 
 
 | 
 | ptr_operator | 
 
 | 
 | pure_specifier | 
  '=' '0' | 
 | q_char | 
  ANY_CHARACTER_EXCEPT_NEWLINE_DQUOTE | 
 | q_char_sequence | 
 
 | 
 | qualified_id | 
 
 | 
 | qualified_namespace_specifier | 
  [ '::' ] [ nested_name_specifier ] namespace_name | 
 | r_char | 
  ANY_CHAR_UNTIL_END_OF_RAW_STRING | 
 | r_char_sequence | 
 
 | 
 | raw_string | 
  '"' [ d_char_sequence ] '(' [ r_char_sequence ] ')' [ d_char_sequence ] '"' | 
 | ref_qualifier | 
 
 | 
 | relational_expression | 
 
 | 
 | replacement_list | 
  [ pp_tokens ] | 
 | s_char | 
 
 | 
 | s_char_sequence | 
 
 | 
 | selection_statement | 
 
 | 
 | shift_expression | 
 
 | 
 | sign | 
 
 | 
 | simple_declaration | 
  [ attribute_specifier_seq ] [ decl_specifier_seq ] [ init_declarator_list ] ';' | 
 | simple_escape_sequence | 
 
-  
"\'" 
-  
'\"' 
-  
'\?' 
-  
'\\' 
-  
'\a' 
-  
'\b' 
-  
'\f' 
-  
'\n' 
-  
'\r' 
-  
'\t' 
-  
'\v' 
 
 | 
 | simple_template_id | 
  template_name '<' [ template_argument_list ] '>' | 
 | simple_type_specifier | 
 
 | 
 | statement | 
 
 | 
 | statement_seq | 
 
 | 
 | static_assert_declaration | 
  'static_assert' '(' constant_expression ',' string_literal ')' ';' | 
 | storage_class_specifier | 
 
 | 
 | string_literal | 
 
 | 
 | syntax | 
 
 | 
 | template_argument | 
 
 | 
 | template_argument_list | 
 
 | 
 | template_declaration | 
  [ 'export'(C++98 only) ] 'template' '<' template_parameter_list '>' declaration | 
 | template_id | 
 
 | 
 | template_name | 
  identifier | 
 | template_parameter | 
 
 | 
 | template_parameter_list | 
 
 | 
 | text_line | 
  [ pp_tokens ] new_line | 
 | throw_expression | 
  'throw' [ assignment_expression ] | 
 | token (not used) | 
 
 | 
 | trailing_return_type | 
  '->' trailing_type_specifier_seq [ abstract_declarator ] | 
 | trailing_type_specifier | 
 
 | 
 | trailing_type_specifier_seq | 
 
 | 
 | translation_unit | 
  [ declaration_seq ] | 
 | try_block | 
  'try' compound_statement handler_seq | 
 | type_id | 
  type_specifier_seq [ abstract_declarator ] | 
 | type_id_list | 
 
 | 
 | type_name | 
 
 | 
 | type_parameter | 
 
 | 
 | type_specifier | 
 
 | 
 | type_specifier_seq | 
 
 | 
 | typedef_name | 
  identifier | 
 | typename_specifier | 
 
 | 
 | ud_suffix | 
  identifier | 
 | unary_expression | 
 
 | 
 | unary_operator | 
 
 | 
 | universal_character_name | 
 
 | 
 | unnamed_namespace_definition | 
  [ 'inline'(C++11 only) ] 'namespace' '{' namespace_body '}' | 
 | unqualified_id | 
 
 | 
 | unsigned_suffix | 
 
 | 
 | user_defined_character_literal | 
  character_literal ud_suffix | 
 | user_defined_floating_literal | 
 
 | 
 | user_defined_integer_literal | 
 
 | 
 | user_defined_literal | 
 
 | 
 | user_defined_string_literal | 
  string_literal ud_suffix | 
 | using_declaration | 
 
 | 
 | using_directive | 
  [ attribute_specifier_seq(C++11 only) ] 'using' 'namespace' [ '::' ] [ nested_name_specifier ] namespace_name ';' | 
 | virt_specifier | 
 
 | 
 | virt_specifier_seq | 
 
 |