#include #include #include #include #include struct Foo { enum class Tag { A, }; struct A_Body { float _0[20]; }; Tag tag; union { A_Body a; }; static Foo A(const float (&_0)[20]) { Foo result; for (int i = 0; i < 20; i++) { ::new (&result.a._0[i]) (float)(_0[i]); } result.tag = Tag::A; return result; } bool IsA() const { return tag == Tag::A; } }; extern "C" { void root(Foo a); } // extern "C"