Create inclusive destructor for struct/class by aggregating all the destructors in dtors[] with the destructors for all the members.
build a shim function around the compound dtor that translates a C++ destructor to a destructor with extern(D) calling convention
Create inclusive invariant for struct/class by aggregating all the invariants in invs[].
Build opAssign for a struct.
Build opEquals for struct. const bool opEquals(const S s) { ... }
Build __xopCmp for TypeInfo_Struct static bool __xopCmp(ref const S p, ref const S q) { return p.opCmp(q); }
Build __xopEquals for TypeInfo_Struct static bool __xopEquals(ref const S p, ref const S q) { return p == q; }
Build __xtoHash for non-bitwise hashing static hash_t xtoHash(ref const S p) nothrow @trusted;
Check given aggregate actually has an identity opAssign or not.
Merge function attributes pure, nothrow, @safe, @nogc, and @disable from f into s1.
We need an opEquals for the struct if any fields has an opEquals. Generate one if a user-specified one does not exist.
Define the implicit opEquals, opAssign, post blit, copy constructor and destructor for structs.