https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114171
--- Comment #4 from Iain Buclaw <ibuclaw at gdcproject dot org> --- Removed druntime dependency. --- import gcc.builtins; struct Token { string label; } struct BreakStatement { ulong pad; Token label; } pragma(inline, false) auto newclass() { void *p = __builtin_malloc(BreakStatement.sizeof); __builtin_memset(p, 0, BreakStatement.sizeof); return cast(BreakStatement*) p; } int main () { auto bn = newclass(); return bn.label is Token.init; } --- Roughly the equivalent C++ --- struct Token { struct { __SIZE_TYPE__ length; const char *ptr; } label; }; struct BreakStatement { __UINT64_TYPE__ pad; Token label; }; __attribute__((noinline)) BreakStatement *newclass() { void *p = __builtin_malloc(sizeof(BreakStatement)); __builtin_memset(p, 0, sizeof(BreakStatement)); return (BreakStatement*) p; } int main () { auto bn = newclass(); auto init = Token(); return *(__uint128_t*)&bn->label == *(__uint128_t*)&init; } ---