program: extdefs
program  ::= extdefs?
no referencesextdefs: lang_extdef
extdefs  ::= lang_extdef+
referenced by: extdefs_opt program extdefs_opt: extdefs
         ::= extdefs?
referenced by: lang_extdef _hush_warning:
         ::=
referenced by: lang_extdef template_def _warning_ok:
         ::=
referenced by: lang_extdef template_def asm_keyword: ASM_KEYWORD
         ::= ASM_KEYWORD
referenced by: lang_extdef maybeasm simple_stmt lang_extdef: __extension__ fndef eat_saved_input datadef export template_def asm_keyword ( STRING ) using_decl ; extern_lang_string { extdefs_opt } _hush_warning fndef _warning_ok eat_saved_input datadef _warning_ok namespace identifier { extdefs_opt } namespace_alias using_directive
         ::= '__extension__'* ( fndef eat_saved_input | datadef | 'export'? template_def | ( asm_keyword '(' STRING ')' | using_decl ) ';' | extern_lang_string ( '{' extdefs_opt '}' | _hush_warning ( fndef _warning_ok eat_saved_input | datadef _warning_ok ) ) | 'namespace' identifier? '{' extdefs_opt '}' | namespace_alias | using_directive )
referenced by: extdefs namespace_alias: namespace identifier = any_id ;
         ::= 'namespace' identifier '=' any_id ';'
referenced by: lang_extdef simple_stmt using_decl: using qualified_id :: qualified_id unqualified_id
         ::= 'using' ( qualified_id | '::' ( qualified_id | unqualified_id ) )
referenced by: component_decl_1 lang_extdef namespace_using_decl: using namespace_qualifier :: namespace_qualifier identifier
         ::= 'using' ( namespace_qualifier | '::' namespace_qualifier? ) identifier
referenced by: simple_stmt using_directive: using namespace any_id ;
         ::= 'using' 'namespace' any_id ';'
referenced by: lang_extdef simple_stmt namespace_qualifier: NSNAME ::
         ::= ( NSNAME '::' )+
referenced by: namespace_using_decl any_id: :: qualified_id unqualified_id
any_id   ::= '::'? ( qualified_id | unqualified_id )
referenced by: namespace_alias using_directive extern_lang_string: EXTERN_LANG_STRING
         ::= EXTERN_LANG_STRING+
referenced by: lang_extdef template_def template_parm_header: template < template_parm , >
         ::= 'template' '<' template_parm ( ',' template_parm )* '>'
referenced by: template_header template_template_parm template_spec_header: template < >
         ::= 'template' '<' '>'
referenced by: template_header template_header: template_parm_header template_spec_header
         ::= template_parm_header
           | template_spec_header
referenced by: component_decl_list template_def maybe_identifier: identifier
         ::= identifier?
referenced by: template_template_parm template_type_parm template_type_parm: aggr typename maybe_identifier
         ::= ( aggr | 'typename' ) maybe_identifier
referenced by: template_parm template_template_parm: template_parm_header aggr maybe_identifier referenced by: template_parm template_parm: template_type_parm = type_id parm = expr_no_comma_rangle template_template_parm = template_arg
         ::= template_type_parm ( '=' type_id )?
           | parm ( '=' expr_no_comma_rangle )?
           | template_template_parm ( '=' template_arg )?
referenced by: template_parm_header template_def: template_header __extension__ fndef eat_saved_input template_datadef template_def extern_lang_string _hush_warning fndef _warning_ok eat_saved_input template_datadef _warning_ok referenced by: lang_extdef template_def template_datadef: nomods_initdecls declmods notype_initdecls typed_declspecs initdecls structsp ; referenced by: template_def datadef: nomods_initdecls explicit_instantiation declmods notype_initdecls typed_declspecs initdecls ; bad_decl
           | bad_decl
referenced by: lang_extdef ctor_initializer_opt: nodecls base_init
         ::= nodecls
           | base_init
referenced by: function_body maybe_return_init: return_init ;
         ::= ( return_init ';'? )?
referenced by: fndef pending_inline eat_saved_input: END_OF_SAVED_INPUT
         ::= END_OF_SAVED_INPUT?
referenced by: lang_extdef structsp template_def function_body: begin_function_body_ ctor_initializer_opt save_lineno { compstmtend referenced by: fndef function_try_block pending_inline fndef: fn.def1 maybe_return_init function_body function_try_block referenced by: lang_extdef template_def constructor_declarator: :: nested_name_specifier SELFNAME self_template_type ( parmlist ) LEFT_RIGHT cv_qualifiers exception_specification_opt referenced by: component_decl_1 explicit_instantiation fn.def1 fn_def2 nomods_initdcl0 notype_component_declarator0 fn.def1: typed_declspecs declarator declmods notype_declarator constructor_declarator
           | declmods? ( notype_declarator | constructor_declarator )
referenced by: fndef component_constructor_declarator: SELFNAME ( SELFNAME ) self_template_type ( parmlist ) LEFT_RIGHT cv_qualifiers exception_specification_opt referenced by: component_decl_1 fn_def2 fn_def2: declmods component_constructor_declarator notype_declarator constructor_declarator typed_declspecs declarator
           | typed_declspecs declarator
referenced by: component_decl_list return_id: return IDENTIFIER
         ::= 'return' IDENTIFIER
referenced by: return_init return_init: return_id maybe_init ( nonnull_exprlist ) LEFT_RIGHT
         ::= return_id ( maybe_init | '(' nonnull_exprlist ')' | LEFT_RIGHT )
referenced by: maybe_return_init base_init: : member_init , member_init
         ::= ':' member_init? ( ',' member_init )*
referenced by: ctor_initializer_opt begin_function_body_:
         ::=
referenced by: function_body begin_member_init: notype_identifier nonnested_type typename_sub
         ::= ( notype_identifier | nonnested_type | typename_sub )?
referenced by: member_init member_init: begin_member_init ( nonnull_exprlist ) LEFT_RIGHT
         ::= begin_member_init ( '(' nonnull_exprlist ')' | LEFT_RIGHT )
referenced by: base_init identifier: IDENTIFIER tTYPENAME SELFNAME PTYPENAME NSNAME
         ::= IDENTIFIER
           | tTYPENAME
           | SELFNAME
           | PTYPENAME
           | NSNAME
referenced by: any_word apparent_template_type asm_operand class_head enumerator explicit_template_type initlist label_decl lang_extdef maybe_identifier namespace_alias namespace_using_decl notype_unqualified_id object_template_id simple_stmt structsp template_arg_1 typename_sub0 unary_expr notype_identifier: IDENTIFIER PTYPENAME NSNAME
         ::= IDENTIFIER
           | PTYPENAME
           | NSNAME
referenced by: begin_member_init identifier_defn: IDENTIFIER_DEFN TYPENAME_DEFN PTYPENAME_DEFN
         ::= IDENTIFIER_DEFN
           | TYPENAME_DEFN
           | PTYPENAME_DEFN
referenced by: class_head_decl class_head_defn explicit_instantiation: SCSPEC template begin_explicit_instantiation typespec ; typed_declspecs declarator notype_declarator constructor_declarator end_explicit_instantiation referenced by: datadef begin_explicit_instantiation:
         ::=
referenced by: explicit_instantiation end_explicit_instantiation:
         ::=
referenced by: explicit_instantiation template_type: PTYPENAME tTYPENAME < template_arg_list_opt template_close_bracket finish_template_type_ self_template_type
           | self_template_type
referenced by: apparent_template_type nested_name_specifier_1 notype_unqualified_id type_name typename_sub0 typename_sub2 apparent_template_type: template_type identifier < template_arg_list_opt > finish_template_type_
         ::= template_type
referenced by: class_head_apparent_template self_template_type: SELFNAME < template_arg_list_opt template_close_bracket finish_template_type_ referenced by: component_constructor_declarator constructor_declarator template_type finish_template_type_:
         ::=
referenced by: apparent_template_type self_template_type template_type template_close_bracket: > >>
         ::= '>'
           | '>>'
referenced by: explicit_template_type notype_template_declarator object_template_id self_template_type template_arg_list_ignore template_id template_type template_arg_list_opt: template_arg_list
         ::= template_arg_list?
referenced by: apparent_template_type explicit_template_type notype_template_declarator object_template_id self_template_type template_arg_list_ignore template_id template_type template_arg_list: template_arg ,
         ::= template_arg ( ',' template_arg )*
referenced by: notype_template_declarator template_arg_list_opt template_arg: template_arg_1
         ::= template_arg_1
referenced by: template_arg_list template_parm template_arg_1: type_id :: PTYPENAME expr_no_comma_rangle nested_name_specifier template identifier
         ::= type_id
           | '::'? PTYPENAME
           | expr_no_comma_rangle
           | nested_name_specifier 'template' identifier
referenced by: template_arg unop: - + ++ -- !
unop     ::= '-'
           | '+'
           | '++'
           | '--'
           | '!'
referenced by: unary_expr expr: nontrivial_exprlist expr_no_commas
           | expr_no_commas
referenced by: absdcl after_type_declarator asm_operand complex_direct_notype_declarator condition new_type_id paren_expr_or_null primary simple_stmt typespec unary_expr xexpr paren_expr_or_null: LEFT_RIGHT ( expr )
         ::= LEFT_RIGHT
           | '(' expr ')'
referenced by: simple_stmt paren_cond_or_null: LEFT_RIGHT ( condition )
         ::= LEFT_RIGHT
           | '(' condition ')'
referenced by: simple_if simple_stmt xcond: condition
xcond    ::= condition?
referenced by: simple_stmt condition: type_specifier_seq declarator maybeasm maybe_attribute = init expr
           | expr
referenced by: paren_cond_or_null simple_stmt xcond compstmtend: maybe_label_decls stmt }
         ::= ( maybe_label_decls stmt+ )? '}'
referenced by: compstmt_or_stmtexpr for.init.statement function_body nontrivial_exprlist: expr_no_commas , expr_no_commas
         ::= expr_no_commas ( ',' expr_no_commas )+
referenced by: expr nonnull_exprlist nonnull_exprlist: expr_no_commas nontrivial_exprlist
         ::= expr_no_commas
           | nontrivial_exprlist
referenced by: arg_list_ignore attrib functional_cast maybe_parmlist member_init new_initializer new_placement primary return_init unary_expr: sizeof alignof :: delete [ expr ] __extension__ * & ~ unop REALPART IMAGPART cast_expr primary && identifier sizeof alignof ( type_id ) new new_placement new_type_id ( type_id ) new_initializer
         ::= ( 'sizeof' | alignof )* ( primary | ( '__extension__' | '*' | '&' | '~' | unop | REALPART | IMAGPART | '::'* 'delete' ( '[' expr? ']' )? ) cast_expr | '&&' identifier | ( 'sizeof' | alignof ) '(' type_id ')' | new new_placement? ( new_type_id | '(' type_id ')' ) new_initializer? )
referenced by: cast_expr new_placement: ( nonnull_exprlist ) { nonnull_exprlist }
         ::= '(' nonnull_exprlist ')'
           | '{' nonnull_exprlist '}'
referenced by: unary_expr new_initializer: ( nonnull_exprlist typespec ) LEFT_RIGHT = init
         ::= '(' ( nonnull_exprlist | typespec ) ')'
           | LEFT_RIGHT
           | '=' init
referenced by: unary_expr regcast_or_absdcl: ( type_id )
         ::= ( '(' type_id ')' )+
referenced by: absdcl cast_expr cast_expr: unary_expr regcast_or_absdcl unary_expr { initlist maybecomma }
         ::= unary_expr
           | regcast_or_absdcl ( unary_expr | '{' initlist maybecomma '}' )
referenced by: expr_no_comma_rangle expr_no_commas unary_expr expr_no_commas: cast_expr expr_no_commas ->* .* + - * / % << >> ARITHCOMPARE < > EQCOMPARE MIN_MAX & | ^ && || ? xexpr : = ASSIGN expr_no_commas throw expr_no_commas
         ::= cast_expr
           | expr_no_commas ( '->*' | '.*' | '+' | '-' | '*' | '/' | '%' | '<<' | '>>' | ARITHCOMPARE | '<' | '>' | EQCOMPARE | MIN_MAX | '&' | '|' | '^' | '&&' | '||' | '?' xexpr ':' | '=' | ASSIGN ) expr_no_commas
           | 'throw' expr_no_commas?
referenced by: after_type_component_declarator after_type_component_declarator0 component_decl_1 defarg_again enumerator expr expr_no_commas init initlist nonnull_exprlist nontrivial_exprlist notype_component_declarator notype_component_declarator0 primary simple_stmt expr_no_comma_rangle: cast_expr expr_no_comma_rangle ->* .* + - * / % << >> ARITHCOMPARE < EQCOMPARE MIN_MAX & | ^ && || ? xexpr : = ASSIGN expr_no_comma_rangle throw expr_no_comma_rangle
         ::= cast_expr
           | expr_no_comma_rangle ( '->*' | '.*' | '+' | '-' | '*' | '/' | '%' | '<<' | '>>' | ARITHCOMPARE | '<' | EQCOMPARE | MIN_MAX | '&' | '|' | '^' | '&&' | '||' | '?' xexpr ':' | '=' | ASSIGN ) expr_no_comma_rangle
           | 'throw' expr_no_comma_rangle?
referenced by: expr_no_comma_rangle template_arg_1 template_parm notype_unqualified_id: ~ see_typename identifier template_type template_id operator_name IDENTIFIER PTYPENAME NSNAME
         ::= '~' see_typename ( identifier | template_type )
           | template_id
           | operator_name
           | IDENTIFIER
           | PTYPENAME
           | NSNAME
referenced by: complex_direct_notype_declarator direct_notype_declarator expr_or_declarator notype_qualified_id primary unqualified_id do_id:
do_id ::=
referenced by: template_id template_id: PFUNCNAME operator_name < do_id template_arg_list_opt template_close_bracket referenced by: notype_unqualified_id primary object_template_id: template identifier PFUNCNAME operator_name < template_arg_list_opt template_close_bracket referenced by: notype_qualified_id primary qualified_id unqualified_id: notype_unqualified_id tTYPENAME SELFNAME
         ::= notype_unqualified_id
           | tTYPENAME
           | SELFNAME
referenced by: any_id primary qualified_id using_decl expr_or_declarator_intern: attributes expr_or_declarator
         ::= attributes? expr_or_declarator
referenced by: direct_notype_declarator expr_or_declarator functional_cast primary expr_or_declarator: notype_unqualified_id * & expr_or_declarator_intern ( expr_or_declarator_intern )
         ::= notype_unqualified_id
           | ( '*' | '&' ) expr_or_declarator_intern
           | '(' expr_or_declarator_intern ')'
referenced by: expr_or_declarator_intern notype_template_declarator: IDENTIFIER < template_arg_list_opt NSNAME < template_arg_list template_close_bracket referenced by: complex_direct_notype_declarator direct_notype_declarator direct_notype_declarator: complex_direct_notype_declarator notype_unqualified_id notype_template_declarator ( expr_or_declarator_intern )
         ::= complex_direct_notype_declarator
           | notype_unqualified_id
           | notype_template_declarator
           | '(' expr_or_declarator_intern ')'
referenced by: complex_direct_notype_declarator notype_declarator primary: notype_unqualified_id overqualified_id ( nonnull_exprlist ) LEFT_RIGHT CONSTANT boolean_literal STRING VAR_FUNC_NAME ( expr expr_or_declarator_intern compstmt_or_stmtexpr __builtin_va_arg ( expr_no_commas , type_id CV_QUALIFIER ( nonnull_exprlist dynamic_cast static_cast reinterpret_cast const_cast < type_id > ( expr typeid ( expr type_id ) this functional_cast :: IDENTIFIER template_id operator_name object object_template_id unqualified_id overqualified_id ( nonnull_exprlist ) LEFT_RIGHT TYPESPEC :: ~ TYPESPEC LEFT_RIGHT ( nonnull_exprlist ) LEFT_RIGHT [ expr ] ++ --
primary  ::= ( ( notype_unqualified_id | overqualified_id ) ( '(' nonnull_exprlist ')' | LEFT_RIGHT )? | CONSTANT | boolean_literal | STRING | VAR_FUNC_NAME | ( '(' ( expr | expr_or_declarator_intern | compstmt_or_stmtexpr ) | '__builtin_va_arg' '(' expr_no_commas ',' type_id | CV_QUALIFIER '(' nonnull_exprlist | ( 'dynamic_cast' | 'static_cast' | 'reinterpret_cast' | 'const_cast' ) '<' type_id '>' '(' expr | 'typeid' '(' ( expr | type_id ) ) ')' | 'this' | functional_cast | '::' ( IDENTIFIER | template_id | operator_name ) | object ( ( object_template_id | unqualified_id | overqualified_id ) ( '(' nonnull_exprlist ')' | LEFT_RIGHT )? | ( TYPESPEC '::' )? '~' TYPESPEC LEFT_RIGHT ) ) ( '(' nonnull_exprlist ')' | LEFT_RIGHT | '[' expr ']' | '++' | '--' )*
referenced by: object unary_expr new: :: new
new      ::= '::'? 'new'
referenced by: unary_expr boolean_literal: true false
         ::= 'true'
           | 'false'
referenced by: primary nodecls: referenced by: ctor_initializer_opt object: primary . ->
object   ::= primary ( '.' | '->' )
referenced by: primary decl: __extension__ typespec initdecls typed_declspecs initdecls declmods notype_initdecls ;
decl     ::= '__extension__'* ( typespec initdecls | typed_declspecs initdecls? | declmods notype_initdecls? ) ';'
referenced by: for.init.statement simple_stmt declarator: after_type_declarator notype_declarator
         ::= after_type_declarator
           | notype_declarator
referenced by: condition explicit_instantiation fn.def1 fn_def2 initdcl initdcl0 named_parm fcast_or_absdcl: LEFT_RIGHT
         ::= LEFT_RIGHT+
referenced by: absdcl functional_cast type_id: typed_typespecs nonempty_cv_qualifiers absdcl typespec absdcl
           | typespec absdcl
referenced by: ansi_raise_identifier complex_parmlist new_type_id parm parmlist parms_comma primary regcast_or_absdcl template_arg_1 template_parm typespec unary_expr typed_declspecs: typed_typespecs typed_declspecs1
         ::= typed_typespecs
           | typed_declspecs1
referenced by: component_decl_1 component_decl_list datadef decl explicit_instantiation fn.def1 fn_def2 template_datadef typed_declspecs1: declmods typespec reserved_typespecquals reserved_declspecs typespec reserved_typespecquals reserved_declspecs referenced by: named_parm typed_declspecs reserved_declspecs: SCSPEC typespecqual_reserved SCSPEC
         ::= SCSPEC ( typespecqual_reserved | SCSPEC )*
referenced by: typed_declspecs1 declmods: nonempty_cv_qualifiers SCSPEC CV_QUALIFIER SCSPEC attributes referenced by: component_decl_1 datadef decl fn.def1 fn_def2 named_parm template_datadef typed_declspecs1 typed_typespecs: nonempty_cv_qualifiers typespec reserved_typespecquals referenced by: named_parm type_id type_specifier_seq typed_declspecs reserved_typespecquals: typespecqual_reserved attributes
         ::= ( typespecqual_reserved | attributes )+
referenced by: typed_declspecs1 typed_typespecs alignof: ALIGNOF referenced by: unary_expr typeof: TYPEOF
typeof   ::= TYPEOF
referenced by: typespec typespec: structsp TYPESPEC complete_type_name typeof SIGOF ( expr type_id )
           | TYPESPEC
           | complete_type_name
           | ( typeof | SIGOF ) '(' ( expr | type_id ) ')'
referenced by: decl explicit_instantiation functional_cast named_parm new_initializer type_id typed_declspecs1 typed_typespecs typespecqual_reserved: TYPESPEC CV_QUALIFIER structsp
         ::= TYPESPEC
           | CV_QUALIFIER
           | structsp
referenced by: reserved_declspecs reserved_typespecquals initdecls: initdcl0 , initdcl
         ::= initdcl0 ( ',' initdcl )*
referenced by: datadef decl template_datadef notype_initdecls: notype_initdcl0 , initdcl
         ::= notype_initdcl0 ( ',' initdcl )*
referenced by: datadef decl template_datadef nomods_initdecls: nomods_initdcl0 , initdcl
         ::= nomods_initdcl0 ( ',' initdcl )*
referenced by: datadef template_datadef maybeasm: asm_keyword ( STRING )
maybeasm ::= ( asm_keyword '(' STRING ')' )?
referenced by: after_type_component_declarator after_type_component_declarator0 component_decl_1 condition initdcl initdcl0 nomods_initdcl0 notype_component_declarator notype_component_declarator0 notype_initdcl0 initdcl: declarator maybeasm maybe_attribute = init referenced by: initdecls nomods_initdecls notype_initdecls initdcl0_innards: maybe_attribute = init
         ::= maybe_attribute ( '=' init )?
referenced by: initdcl0 nomods_initdcl0 notype_initdcl0 initdcl0: declarator maybeasm initdcl0_innards referenced by: initdecls notype_initdcl0: notype_declarator maybeasm initdcl0_innards referenced by: notype_initdecls nomods_initdcl0: notype_declarator maybeasm initdcl0_innards constructor_declarator maybeasm maybe_attribute referenced by: nomods_initdecls maybe_attribute: attributes
         ::= attributes?
referenced by: after_type_component_declarator after_type_component_declarator0 component_decl_1 condition initdcl initdcl0_innards nomods_initdcl0 notype_component_declarator notype_component_declarator0 structsp attributes: attribute
         ::= attribute+
referenced by: absdcl_intern after_type_declarator_intern aggr declmods expr_or_declarator_intern maybe_attribute nonempty_cv_qualifiers notype_declarator_intern reserved_typespecquals attribute: ATTRIBUTE ( ( attrib , ) )
         ::= ATTRIBUTE '(' '(' attrib ( ',' attrib )* ')' ')'
referenced by: attributes attrib: any_word ( IDENTIFIER , nonnull_exprlist nonnull_exprlist )
attrib   ::= ( any_word ( '(' ( IDENTIFIER ( ',' nonnull_exprlist )? | nonnull_exprlist ) ')' )? )?
referenced by: attribute any_word: identifier SCSPEC TYPESPEC CV_QUALIFIER
           | SCSPEC
           | TYPESPEC
           | CV_QUALIFIER
referenced by: attrib maybe_init: = init
         ::= ( '=' init )?
referenced by: after_type_component_declarator after_type_component_declarator0 component_decl_1 notype_component_declarator notype_component_declarator0 return_init init: expr_no_commas { initlist , }
init     ::= expr_no_commas
           | '{' ( initlist ','? )? '}'
referenced by: condition defarg1 initdcl initdcl0_innards initlist maybe_init new_initializer parms initlist: [ expr_no_commas ] identifier : init : identifier ,
initlist ::= ( '[' expr_no_commas ']' | identifier ':' )? init ( ',' ( identifier ':' )? init )*
referenced by: cast_expr init pending_inline: PRE_PARSED_FUNCTION_DECL maybe_return_init function_body function_try_block referenced by: structsp defarg_again: DEFARG_MARKER expr_no_commas END_OF_SAVED_INPUT referenced by: structsp structsp: class_head_defn maybe_base_class_list { component_decl_list access_specifier } maybe_attribute defarg_again pending_inline eat_saved_input enum identifier { enumlist_opt } { enumlist_opt } complex_type_name typename typename_sub class_head_decl
structsp ::= 'enum' ( identifier ( '{' enumlist_opt '}' )? | '{' enumlist_opt '}' | complex_type_name )
           | 'typename' typename_sub
           | class_head_decl
referenced by: template_datadef typespec typespecqual_reserved maybecomma: ,
         ::= ','?
referenced by: cast_expr maybecomma_warn: ,
         ::= ','?
referenced by: enumlist_opt aggr: AGGR SCSPEC TYPESPEC CV_QUALIFIER AGGR attributes
aggr     ::= AGGR ( SCSPEC | TYPESPEC | CV_QUALIFIER | AGGR | attributes )*
referenced by: class_head class_head_apparent_template class_head_decl class_head_defn template_template_parm template_type_parm class_head: aggr :: nested_name_specifier identifier
         ::= aggr '::'? nested_name_specifier? identifier
referenced by: class_head_decl class_head_defn class_head_apparent_template: aggr :: nested_name_specifier apparent_template_type
         ::= aggr ( '::'? nested_name_specifier )? apparent_template_type
referenced by: class_head_decl class_head_defn class_head_decl: class_head aggr identifier_defn class_head_apparent_template
         ::= class_head
           | aggr identifier_defn
           | class_head_apparent_template
referenced by: structsp class_head_defn: class_head class_head_apparent_template { : aggr identifier_defn { : {
         ::= ( class_head | class_head_apparent_template ) ( '{' | ':' )
           | aggr ( identifier_defn ( '{' | ':' ) | '{' )
referenced by: structsp maybe_base_class_list: : see_typename base_class see_typename ,
         ::= ( ':' see_typename ( base_class ( ',' see_typename base_class )* )? )?
referenced by: structsp base_class: VISSPEC SCSPEC see_typename see_typename base_class_1
         ::= ( ( ( VISSPEC | SCSPEC ) see_typename )+ see_typename )? base_class_1
referenced by: maybe_base_class_list base_class_1: typename_sub nonnested_type
         ::= typename_sub
           | nonnested_type
referenced by: base_class access_specifier: VISSPEC :
         ::= VISSPEC ':'
referenced by: structsp component_decl_list: __extension__ template_header component_decl_1 ; } fn_def2 : try return { template_header typed_declspecs ; bad_decl
         ::= ( ( '__extension__' | template_header )* ( component_decl_1 ( ';' | '}' ) | fn_def2 ( ':' | 'try' | 'return' | '{' ) | ( template_header typed_declspecs )? ';' | bad_decl ) )+
referenced by: structsp component_decl_1: typed_declspecs component_declarator0 , component_declarator declmods notype_component_declarator0 , notype_component_declarator component_constructor_declarator maybeasm maybe_attribute maybe_init notype_declarator constructor_declarator component_constructor_declarator maybeasm maybe_attribute maybe_init : expr_no_commas using_decl
           | ':' expr_no_commas
           | using_decl
referenced by: component_decl_list component_declarator0: after_type_component_declarator0 notype_component_declarator0
         ::= after_type_component_declarator0
           | notype_component_declarator0
referenced by: component_decl_1 component_declarator: after_type_component_declarator notype_component_declarator
         ::= after_type_component_declarator
           | notype_component_declarator
referenced by: component_decl_1 after_type_component_declarator0: after_type_declarator maybeasm maybe_attribute maybe_init tTYPENAME : expr_no_commas maybe_attribute
           | tTYPENAME ':' expr_no_commas maybe_attribute
referenced by: component_declarator0 notype_component_declarator0: notype_declarator constructor_declarator maybeasm maybe_attribute maybe_init IDENTIFIER : expr_no_commas maybe_attribute
           | IDENTIFIER? ':' expr_no_commas maybe_attribute
referenced by: component_decl_1 component_declarator0 after_type_component_declarator: after_type_declarator maybeasm maybe_attribute maybe_init tTYPENAME : expr_no_commas maybe_attribute
           | tTYPENAME ':' expr_no_commas maybe_attribute
referenced by: component_declarator notype_component_declarator: notype_declarator maybeasm maybe_attribute maybe_init IDENTIFIER : expr_no_commas maybe_attribute
           | IDENTIFIER? ':' expr_no_commas maybe_attribute
referenced by: component_decl_1 component_declarator enumlist_opt: enumerator , maybecomma_warn
         ::= ( enumerator ( ',' enumerator )* )? maybecomma_warn
referenced by: structsp enumerator: identifier = expr_no_commas
         ::= identifier ( '=' expr_no_commas )?
referenced by: enumlist_opt new_type_id: type_specifier_seq * & ptr_to_mem cv_qualifiers * & ptr_to_mem cv_qualifiers [ expr ] ( type_id ) [ expr ]
         ::= type_specifier_seq ( ( ( '*' | '&' | ptr_to_mem ) cv_qualifiers )* ( ( '*' | '&' | ptr_to_mem ) cv_qualifiers | ( '[' expr ']' )+ ) )?
           | '(' type_id ')' '[' expr ']'
referenced by: unary_expr cv_qualifiers: CV_QUALIFIER
         ::= CV_QUALIFIER*
referenced by: absdcl after_type_declarator complex_direct_notype_declarator component_constructor_declarator constructor_declarator new_type_id notype_declarator operator_name nonempty_cv_qualifiers: CV_QUALIFIER attributes
         ::= ( CV_QUALIFIER | attributes )+
referenced by: absdcl after_type_declarator complex_direct_notype_declarator declmods notype_declarator type_id type_specifier_seq typed_typespecs maybe_parmlist: ( nonnull_exprlist parmlist ) LEFT_RIGHT
         ::= '(' ( nonnull_exprlist | parmlist ) ')'
           | LEFT_RIGHT
referenced by: after_type_declarator complex_direct_notype_declarator after_type_declarator_intern: attributes after_type_declarator
         ::= attributes? after_type_declarator
referenced by: after_type_declarator after_type_declarator: * & nonempty_cv_qualifiers ptr_to_mem cv_qualifiers after_type_declarator_intern ( after_type_declarator_intern ) nested_name_specifier type_name maybe_parmlist cv_qualifiers exception_specification_opt [ expr ] referenced by: after_type_component_declarator after_type_component_declarator0 after_type_declarator_intern declarator nonnested_type: :: type_name
         ::= '::'? type_name
referenced by: base_class_1 begin_member_init complete_type_name complete_type_name: nonnested_type :: nested_type
         ::= nonnested_type
           | '::'? nested_type
referenced by: typespec nested_type: nested_name_specifier type_name
         ::= nested_name_specifier type_name
referenced by: complete_type_name complex_type_name notype_declarator_intern: attributes notype_declarator
         ::= attributes? notype_declarator
referenced by: complex_direct_notype_declarator notype_declarator notype_declarator: * & nonempty_cv_qualifiers ptr_to_mem cv_qualifiers notype_declarator_intern direct_notype_declarator
         ::= ( ( '*' | '&' ) nonempty_cv_qualifiers? | ptr_to_mem cv_qualifiers ) notype_declarator_intern
           | direct_notype_declarator
referenced by: bad_parm component_decl_1 declarator explicit_instantiation fn.def1 fn_def2 named_parm nomods_initdcl0 notype_component_declarator notype_component_declarator0 notype_declarator_intern notype_initdcl0 complex_direct_notype_declarator: ( * & * & nonempty_cv_qualifiers ptr_to_mem cv_qualifiers notype_declarator_intern complex_direct_notype_declarator ) direct_notype_declarator maybe_parmlist cv_qualifiers exception_specification_opt [ expr ] notype_qualified_id :: notype_qualified_id notype_unqualified_id nested_name_specifier notype_template_declarator
           | '(' ( '*' | '&' )* ( ( ( '*' | '&' ) nonempty_cv_qualifiers | ptr_to_mem cv_qualifiers ) notype_declarator_intern | complex_direct_notype_declarator ) ')'
           | notype_qualified_id
           | '::' ( notype_qualified_id | notype_unqualified_id )
referenced by: complex_direct_notype_declarator direct_notype_declarator qualified_id: nested_name_specifier unqualified_id object_template_id referenced by: any_id using_decl notype_qualified_id: nested_name_specifier notype_unqualified_id object_template_id referenced by: complex_direct_notype_declarator overqualified_id overqualified_id: :: notype_qualified_id
         ::= '::'? notype_qualified_id
referenced by: primary functional_cast: typespec ( nonnull_exprlist expr_or_declarator_intern ) fcast_or_absdcl
         ::= typespec ( '(' ( nonnull_exprlist | expr_or_declarator_intern ) ')' | fcast_or_absdcl )
referenced by: primary type_name: tTYPENAME SELFNAME template_type
         ::= tTYPENAME
           | SELFNAME
           | template_type
referenced by: after_type_declarator complex_type_name nested_type nonnested_type nested_name_specifier: nested_name_specifier_1 nested_name_specifier_1 template explicit_template_type IDENTIFIER PTYPENAME :: referenced by: after_type_declarator class_head class_head_apparent_template complex_direct_notype_declarator constructor_declarator nested_type notype_qualified_id ptr_to_mem qualified_id template_arg_1 nested_name_specifier_1: tTYPENAME SELFNAME NSNAME template_type ::
         ::= ( tTYPENAME | SELFNAME | NSNAME | template_type ) '::'
referenced by: nested_name_specifier typename_sub: :: typename_sub0
         ::= '::'? typename_sub0
referenced by: base_class_1 begin_member_init structsp typename_sub0: typename_sub2 typename_sub2 template explicit_template_type :: identifier template_type template explicit_template_type
         ::= typename_sub2 ( typename_sub2 | 'template'? explicit_template_type '::' )* ( identifier | template_type | 'template'? explicit_template_type )
referenced by: typename_sub typename_sub2: tTYPENAME SELFNAME template_type PTYPENAME IDENTIFIER NSNAME ::
         ::= ( tTYPENAME | SELFNAME | template_type | PTYPENAME | IDENTIFIER | NSNAME ) '::'
referenced by: typename_sub0 explicit_template_type: identifier < template_arg_list_opt template_close_bracket referenced by: nested_name_specifier typename_sub0 complex_type_name: :: type_name nested_type nested_type
         ::= '::' ( type_name | nested_type )
           | nested_type
referenced by: structsp ptr_to_mem: :: nested_name_specifier *
         ::= '::'? nested_name_specifier '*'
referenced by: absdcl after_type_declarator complex_direct_notype_declarator new_type_id notype_declarator operator_name absdcl_intern: attributes absdcl
         ::= attributes? absdcl
referenced by: absdcl absdcl: * & nonempty_cv_qualifiers ptr_to_mem cv_qualifiers absdcl_intern ( absdcl_intern ) complex_parmlist ) cv_qualifiers exception_specification_opt regcast_or_absdcl fcast_or_absdcl cv_qualifiers exception_specification_opt [ expr ] ( parmlist ) LEFT_RIGHT cv_qualifiers exception_specification_opt [ expr ] referenced by: absdcl_intern named_parm type_id maybe_label_decls: label_decl
         ::= label_decl*
referenced by: compstmtend label_decl: __label__ identifier , ;
         ::= '__label__' identifier ( ',' identifier )* ';'
referenced by: maybe_label_decls compstmt_or_stmtexpr: save_lineno { compstmtend
         ::= save_lineno '{' compstmtend
referenced by: compstmt primary compstmt: compstmt_or_stmtexpr referenced by: handler implicitly_scoped_stmt stmt try_block simple_if: if paren_cond_or_null implicitly_scoped_stmt
         ::= 'if' paren_cond_or_null implicitly_scoped_stmt
referenced by: simple_stmt implicitly_scoped_stmt: compstmt save_lineno simple_stmt
         ::= compstmt
           | save_lineno simple_stmt
referenced by: simple_if simple_stmt stmt: compstmt save_lineno simple_stmt
stmt     ::= compstmt
           | save_lineno simple_stmt
referenced by: compstmtend simple_stmt simple_stmt: decl return expr do implicitly_scoped_stmt while paren_expr_or_null break continue goto * expr identifier asm_keyword maybe_cv_qualifier ( STRING :: asm_operands : asm_clobbers : asm_operands :: asm_clobbers : asm_operands : asm_clobbers ) ; simple_if else implicitly_scoped_stmt while paren_cond_or_null for ( for.init.statement xcond ; xexpr switch ( condition ) implicitly_scoped_stmt case expr_no_commas ... expr_no_commas default : stmt label_colon stmt } try_block using_directive namespace_using_decl namespace_alias
         ::= decl
           | ( 'return'? expr? | 'do' implicitly_scoped_stmt 'while' paren_expr_or_null | 'break' | 'continue' | 'goto' ( '*' expr | identifier ) | asm_keyword maybe_cv_qualifier '(' STRING ( '::' asm_operands ( ':' asm_clobbers )? | ':' asm_operands ( '::' asm_clobbers | ':' asm_operands ( ':' asm_clobbers )? )? )? ')' ) ';'
           | simple_if ( 'else' implicitly_scoped_stmt )?
           | ( 'while' paren_cond_or_null | ( 'for' '(' for.init.statement xcond ';' xexpr | 'switch' '(' condition ) ')' ) implicitly_scoped_stmt
           | ( 'case' expr_no_commas ( '...' expr_no_commas )? | 'default' ) ':' stmt
           | label_colon ( stmt | '}' )
           | try_block
           | using_directive
           | namespace_using_decl
           | namespace_alias
referenced by: implicitly_scoped_stmt stmt function_try_block: try function_body handler_seq
         ::= 'try' function_body handler_seq
referenced by: fndef pending_inline try_block: try compstmt handler_seq
         ::= 'try' compstmt handler_seq
referenced by: simple_stmt handler_seq: handler handler
         ::= handler? handler*
referenced by: function_try_block try_block handler: catch handler_args compstmt referenced by: handler_seq type_specifier_seq: typed_typespecs nonempty_cv_qualifiers
         ::= typed_typespecs
           | nonempty_cv_qualifiers
referenced by: condition new_type_id operator_name handler_args: ( ... parm )
         ::= '(' ( '...' | parm ) ')'
referenced by: handler label_colon: IDENTIFIER PTYPENAME tTYPENAME SELFNAME :
         ::= ( IDENTIFIER | PTYPENAME | tTYPENAME | SELFNAME ) ':'
referenced by: simple_stmt for.init.statement: xexpr ; decl { compstmtend
         ::= xexpr ';'
           | decl
           | '{' compstmtend
referenced by: simple_stmt maybe_cv_qualifier: CV_QUALIFIER
         ::= CV_QUALIFIER?
referenced by: simple_stmt xexpr: expr
xexpr    ::= expr?
referenced by: expr_no_comma_rangle expr_no_commas for.init.statement simple_stmt asm_operands: asm_operand ,
         ::= ( asm_operand ( ',' asm_operand )* )?
referenced by: simple_stmt asm_operand: [ identifier ] STRING ( expr )
         ::= ( '[' identifier ']' )? STRING '(' expr ')'
referenced by: asm_operands asm_clobbers: STRING ,
         ::= STRING ( ',' STRING )*
referenced by: simple_stmt parmlist: complex_parmlist type_id referenced by: absdcl component_constructor_declarator constructor_declarator maybe_parmlist complex_parmlist: parms ... : parms_comma ... type_id ... :
         ::= parms ( '...' | ':' )?
           | parms_comma? '...'
           | type_id ( '...' | ':' )
referenced by: absdcl parmlist defarg: = defarg1
defarg   ::= '=' defarg1
referenced by: full_parm parms defarg1: DEFARG init
           | init
referenced by: defarg parms: named_parm parm defarg parms_comma full_parm bad_parm = init
parms    ::= named_parm
           | parm defarg
           | parms_comma ( full_parm | bad_parm ( '=' init )? )
referenced by: complex_parmlist parms_comma parms_comma: parms type_id ,
         ::= ( parms | type_id ) ','
referenced by: complex_parmlist parms named_parm: typed_declspecs1 declarator absdcl typed_typespecs typespec declarator declmods notype_declarator
         ::= typed_declspecs1 ( declarator | absdcl )?
           | ( typed_typespecs | typespec ) declarator
           | declmods notype_declarator
referenced by: parm parms full_parm: parm defarg
         ::= parm defarg?
referenced by: parms parm: named_parm type_id
parm     ::= named_parm
           | type_id
referenced by: full_parm handler_args parms template_parm see_typename:
         ::=
referenced by: base_class maybe_base_class_list notype_unqualified_id bad_parm: notype_declarator referenced by: parms bad_decl: IDENTIFIER template_arg_list_ignore IDENTIFIER arg_list_ignore ; referenced by: component_decl_list datadef template_arg_list_ignore: < template_arg_list_opt template_close_bracket
         ::= ( '<' template_arg_list_opt template_close_bracket )?
referenced by: bad_decl arg_list_ignore: ( nonnull_exprlist )
         ::= ( '(' nonnull_exprlist ')' )?
referenced by: bad_decl exception_specification_opt: throw ( ansi_raise_identifier , ) LEFT_RIGHT
         ::= ( 'throw' ( '(' ansi_raise_identifier ( ',' ansi_raise_identifier )* ')' | LEFT_RIGHT ) )?
referenced by: absdcl after_type_declarator complex_direct_notype_declarator component_constructor_declarator constructor_declarator ansi_raise_identifier: type_id
         ::= type_id
referenced by: exception_specification_opt unoperator:
         ::=
referenced by: operator_name operator_name: operator * / % + - & | ^ ~ , ARITHCOMPARE < > EQCOMPARE ASSIGN = << >> ++ -- && || ! ? : MIN_MAX -> ->* LEFT_RIGHT [ ] type_specifier_seq * & ptr_to_mem cv_qualifiers new delete [ ] unoperator
         ::= 'operator' ( '*' | '/' | '%' | '+' | '-' | '&' | '|' | '^' | '~' | ',' | ARITHCOMPARE | '<' | '>' | EQCOMPARE | ASSIGN | '=' | '<<' | '>>' | '++' | '--' | '&&' | '||' | '!' | '?' ':' | MIN_MAX | '->' | '->*' | LEFT_RIGHT | '[' ']' | type_specifier_seq ( ( '*' | '&' | ptr_to_mem ) cv_qualifiers )* | ( 'new' | 'delete' ) ( '[' ']' )? ) unoperator
referenced by: notype_unqualified_id object_template_id primary template_id save_lineno:
         ::=
referenced by: compstmt_or_stmtexpr function_body implicitly_scoped_stmt stmt COMPLEX: _Complex __complex __complex__
COMPLEX  ::= '_Complex'
           | '__complex'
           | '__complex__'
no referencesALIGNOF: __alignof __alignof__
ALIGNOF  ::= '__alignof'
           | '__alignof__'
referenced by: alignof ASM_KEYWORD: __asm __asm__ asm
         ::= '__asm'
           | '__asm__'
           | 'asm'
referenced by: asm_keyword ATTRIBUTE: __attribute __attribute__
         ::= '__attribute'
           | '__attribute__'
referenced by: attribute CONST: __const __const__ const
CONST    ::= '__const'
           | '__const__'
           | 'const'
no referencesIMAGPART: __imag __imag__
IMAGPART ::= '__imag'
           | '__imag__'
referenced by: unary_expr INLINE: __inline __inline__ inline
INLINE   ::= '__inline'
           | '__inline__'
           | 'inline'
no referencesREALPART: __real __real__
REALPART ::= '__real'
           | '__real__'
referenced by: unary_expr RESTRICT: __restrict __restrict__
RESTRICT ::= '__restrict'
           | '__restrict__'
no referencesSIGNED: __signed __signed__ signed
SIGNED   ::= '__signed'
           | '__signed__'
           | 'signed'
no referencesTYPEOF: __typeof __typeof__ typeof
TYPEOF   ::= '__typeof'
           | '__typeof__'
           | 'typeof'
referenced by: typeof VOLATILE: __volatile __volatile__ volatile
VOLATILE ::= '__volatile'
           | '__volatile__'
           | 'volatile'
no referencesLEFT_RIGHT: ( )
         ::= '(' ')'
referenced by: absdcl component_constructor_declarator constructor_declarator exception_specification_opt fcast_or_absdcl maybe_parmlist member_init new_initializer operator_name paren_cond_or_null paren_expr_or_null primary return_init   ... generated by RR - Railroad Diagram Generator R R