struct JSONValue { TaggedUnion payload; } struct TaggedUnion { size_t[2] m_data; int m_kind; JSONValue opIndex(size_t i) { return JSONValue(); } } void yap(lazy JSONValue arg) { arg(); } struct Foo { int a; string name; } Foo makeFoo() { JSONValue root; yap(root.payload[0] .payload[0] .payload[0]); Foo foo; return foo; } void main() { auto foo = makeFoo(); }