#include #include #include #include enum A { A_A1, A_A2, A_A3, /** * Must be last for serialization purposes */ A_Sentinel, }; typedef uint8_t A; enum B { B_B1, B_B2, B_B3, /** * Must be last for serialization purposes */ B_Sentinel, }; typedef uint8_t B; enum C_Tag { C_C1, C_C2, C_C3, /** * Must be last for serialization purposes */ C_Sentinel, }; typedef uint8_t C_Tag; typedef struct { C_Tag tag; uint32_t a; } C_C1_Body; typedef struct { C_Tag tag; uint32_t b; } C_C2_Body; typedef union { C_Tag tag; C_C1_Body c1; C_C2_Body c2; } C; void root(A a, B b, C c);