it's a case of in a record, each member is at same address.
It translates same as record + case of.
Example:
typedef union
{
void* m_ptr;
dLong m_int;
dFloat m_float;
} NewtonMaterialData;
This translates to:
TNewtonMaterialData = packed record
case integer of
1: (
m_ptr: Pointer;
);
2: (
m_int: int64;
);
3: (
m_float: dfloat;
);
end;
PNewtonMaterialData = ^TNewtonMaterialData;
the size of c++ union - translated record is size of biggest member.