A discriminated union is
a type composed of a discriminant followed by a type selected from a set of
prearranged types according to the value of the discriminant. The type of
discriminant is either int
, unsigned int
, or an
enumerated type, such as bool
. The component types are called “arms”
of the union, and are preceded by the value of the discriminant that implies
their encoding.
Discriminated unions are declared as follows.
union switch (discriminant-declaration) { case discriminant-value-A: arm-declaration-A; case discriminant-value-B: arm-declaration-B; ... default: default-declaration; } identifier;
Each case keyword is followed by a legal value of the discriminant. The default arm is optional. If the arm is not specified, then a valid encoding of the union cannot take on unspecified discriminant values. The size of the implied arm is always a multiple of 4 bytes.
The discriminated union is encoded as its discriminant followed by the encoding of the implied arm.