1/*
2where from: base = matching base; head = other header
3what kind:  ordy = ordinary struct; tmpl = template struct
4definition: decl = incomplete declaration; defn = full definition
5how used:   not = not used; ref = by ref; ptr = through pointer;
6            fld = as field; var = as variable
7from where: base = from base; head = other header
8*/
9
10struct gstruct_head_ordy_decl_not;
11struct gstruct_head_ordy_defn_not { int field_head_ordy_defn_not; };
12
13struct gstruct_head_ordy_decl_ref_head;
14struct gstruct_head_ordy_defn_ref_head { int field_head_ordy_defn_ref_head; };
15struct gstruct_head_ordy_defn_ptr_head { int field_head_ordy_defn_ptr_head; };
16struct gstruct_head_ordy_defn_fld_head { int field_head_ordy_defn_fld_head; };
17struct gstruct_head_ordy_defn_var_head {
18    gstruct_head_ordy_decl_ref_head *field_head_ordy_defn_var_head_inc;
19    gstruct_head_ordy_defn_ref_head *field_head_ordy_defn_var_head_ref;
20    gstruct_head_ordy_defn_ptr_head *field_head_ordy_defn_var_head_ptr;
21    gstruct_head_ordy_defn_fld_head  field_head_ordy_defn_var_head_fld;
22};
23extern struct gstruct_head_ordy_defn_var_head head_var1;
24
25struct gstruct_head_ordy_decl_ref_base;
26struct gstruct_head_ordy_defn_ref_base { int field_head_ordy_defn_ref_base; };
27struct gstruct_head_ordy_defn_ptr_base { int field_head_ordy_defn_ptr_base; };
28struct gstruct_head_ordy_defn_fld_base { int field_head_ordy_defn_fld_base; };
29struct gstruct_head_ordy_defn_var_base { int field_head_ordy_defn_var_base; };
30
31template< typename T > struct gstruct_head_tmpl_decl_not;
32template< typename T > struct gstruct_head_tmpl_defn_not
33{ T field_head_tmpl_defn_not; };
34
35template< typename T > struct gstruct_head_tmpl_decl_ref_head;
36template< typename T > struct gstruct_head_tmpl_defn_ref_head
37{ T field_head_tmpl_defn_ref_head; };
38template< typename T > struct gstruct_head_tmpl_defn_ptr_head
39{ T field_head_tmpl_defn_ptr_head; };
40template< typename T > struct gstruct_head_tmpl_defn_fld_head
41{ T field_head_tmpl_defn_fld_head; };
42template< typename T > struct gstruct_head_tmpl_defn_var_head {
43    gstruct_head_tmpl_decl_ref_head< T > *field_head_tmpl_defn_var_head_inc;
44    gstruct_head_tmpl_defn_ref_head< T > *field_head_tmpl_defn_var_head_ref;
45    gstruct_head_tmpl_defn_ptr_head< T > *field_head_tmpl_defn_var_head_ptr;
46    gstruct_head_tmpl_defn_fld_head< T >  field_head_tmpl_defn_var_head_fld;
47};
48extern gstruct_head_tmpl_defn_var_head< int > head_var5;
49
50template< typename T > struct gstruct_head_tmpl_decl_ref_base;
51template< typename T > struct gstruct_head_tmpl_defn_ref_base
52{ T field_head_tmpl_defn_ref_base; };
53template< typename T > struct gstruct_head_tmpl_defn_ptr_base
54{ T field_head_tmpl_defn_ptr_base; };
55template< typename T > struct gstruct_head_tmpl_defn_fld_base
56{ T field_head_tmpl_defn_fld_base; };
57template< typename T > struct gstruct_head_tmpl_defn_var_base
58{ T field_head_tmpl_defn_var_base; };
59
60inline int head_function() {
61    return 0
62+ head_var1.field_head_ordy_defn_var_head_ptr->field_head_ordy_defn_ptr_head
63+ head_var1.field_head_ordy_defn_var_head_fld.field_head_ordy_defn_fld_head
64+ head_var5.field_head_tmpl_defn_var_head_ptr->field_head_tmpl_defn_ptr_head
65+ head_var5.field_head_tmpl_defn_var_head_fld.field_head_tmpl_defn_fld_head
66;
67}
68