blob: 3ba187d5ad0bc47c9ed6cf92f56e811388ba4b8e [file] [view]
r[type.union]
# Union types
r[type.union.intro]
A *union type* is a nominal, heterogeneous C-like union, denoted by the name of a [`union` item][item].
r[type.union.access]
Unions have no notion of an "active field". Instead, every union access transmutes parts of the content of the union to the type of the accessed field.
r[type.union.safety]
Since transmutes can cause unexpected or undefined behaviour, `unsafe` is required to read from a union field.
r[type.union.constraint]
Union field types are also restricted to a subset of types which ensures that they never need dropping. See the [item] documentation for further details.
r[type.union.layout]
The memory layout of a `union` is undefined by default (in particular, fields do *not* have to be at offset 0), but the `#[repr(...)]` attribute can be used to fix a layout.
[`Copy`]: ../special-types-and-traits.md#copy
[item]: ../items/unions.md