1 #include <stdarg.h>
2 #include <stdbool.h>
3 #include <stdint.h>
4 #include <stdlib.h>
5 
6 struct A {
7   int32_t namespace_;
8   float float_;
9 };
10 
11 struct B {
12   int32_t namespace_;
13   float float_;
14 };
15 
16 enum C_Tag
17 #ifdef __cplusplus
18   : uint8_t
19 #endif // __cplusplus
20  {
21   D,
22 };
23 #ifndef __cplusplus
24 typedef uint8_t C_Tag;
25 #endif // __cplusplus
26 
27 struct D_Body {
28   int32_t namespace_;
29   float float_;
30 };
31 
32 struct C {
33   C_Tag tag;
34   union {
35     struct D_Body d;
36   };
37 };
38 
39 enum E_Tag
40 #ifdef __cplusplus
41   : uint8_t
42 #endif // __cplusplus
43  {
44   Double,
45   Float,
46 };
47 #ifndef __cplusplus
48 typedef uint8_t E_Tag;
49 #endif // __cplusplus
50 
51 struct E {
52   E_Tag tag;
53   union {
54     struct {
55       double double_;
56     };
57     struct {
58       float float_;
59     };
60   };
61 };
62 
63 enum F_Tag
64 #ifdef __cplusplus
65   : uint8_t
66 #endif // __cplusplus
67  {
68   double_,
69   float_,
70 };
71 #ifndef __cplusplus
72 typedef uint8_t F_Tag;
73 #endif // __cplusplus
74 
75 struct F {
76   F_Tag tag;
77   union {
78     struct {
79       double double_;
80     };
81     struct {
82       float float_;
83     };
84   };
85 };
86 
87 #ifdef __cplusplus
88 extern "C" {
89 #endif // __cplusplus
90 
91 void root(struct A a,
92           struct B b,
93           struct C c,
94           struct E e,
95           struct F f,
96           int32_t namespace_,
97           float float_);
98 
99 #ifdef __cplusplus
100 } // extern "C"
101 #endif // __cplusplus
102