Ideally we'd just do this when we need it, but the ostream derivation will be controlled by both global config and per-structure config, so it's hard to know exactly when we need it and when we don't.
54 lines
691 B
C++
54 lines
691 B
C++
#include <cstdarg>
|
|
#include <cstdint>
|
|
#include <cstdlib>
|
|
#include <ostream>
|
|
#include <new>
|
|
|
|
enum class A : uint8_t {
|
|
A_A1,
|
|
A_A2,
|
|
A_A3,
|
|
/// Must be last for serialization purposes
|
|
A_Sentinel,
|
|
};
|
|
|
|
enum class B : uint8_t {
|
|
B_B1,
|
|
B_B2,
|
|
B_B3,
|
|
/// Must be last for serialization purposes
|
|
B_Sentinel,
|
|
};
|
|
|
|
union C {
|
|
enum class Tag : uint8_t {
|
|
C_C1,
|
|
C_C2,
|
|
C_C3,
|
|
/// Must be last for serialization purposes
|
|
C_Sentinel,
|
|
};
|
|
|
|
struct C_C1_Body {
|
|
Tag tag;
|
|
uint32_t a;
|
|
};
|
|
|
|
struct C_C2_Body {
|
|
Tag tag;
|
|
uint32_t b;
|
|
};
|
|
|
|
struct {
|
|
Tag tag;
|
|
};
|
|
C_C1_Body c1;
|
|
C_C2_Body c2;
|
|
};
|
|
|
|
extern "C" {
|
|
|
|
void root(A a, B b, C c);
|
|
|
|
} // extern "C"
|