#include #include #include #include struct A { int32_t namespace_; float float_; }; struct B { int32_t namespace_; float float_; }; enum C_Tag #ifdef __cplusplus : uint8_t #endif // __cplusplus { D, }; #ifndef __cplusplus typedef uint8_t C_Tag; #endif // __cplusplus struct D_Body { int32_t namespace_; float float_; }; struct C { C_Tag tag; union { struct D_Body d; }; }; enum E_Tag #ifdef __cplusplus : uint8_t #endif // __cplusplus { Double, Float, }; #ifndef __cplusplus typedef uint8_t E_Tag; #endif // __cplusplus struct E { E_Tag tag; union { struct { double double_; }; struct { float float_; }; }; }; enum F_Tag #ifdef __cplusplus : uint8_t #endif // __cplusplus { double_, float_, }; #ifndef __cplusplus typedef uint8_t F_Tag; #endif // __cplusplus struct F { F_Tag tag; union { struct { double double_; }; struct { float float_; }; }; }; #ifdef __cplusplus extern "C" { #endif // __cplusplus void root(struct A a, struct B b, struct C c, struct E e, struct F f, int32_t namespace_, float float_); #ifdef __cplusplus } // extern "C" #endif // __cplusplus