Note that this may change anytime and might already have changed:
The function call ABI puts all structures bigger than a pointer behind a reference, same goes for RVO which triggers for everything bigger than a pointer. Struct layout currently is the same as C’s, for enums it’s a tagged union with an integer at the beginning that is big enough to cover all the variants (most of the time it’s a u8
).