Error code E0732

An enum with a discriminant must specify a #[repr(inttype)].

Erroneous code example:

enum Enum { // error! Unit = 1, Tuple() = 2, Struct{} = 3, } fn main() {}

A #[repr(inttype)] must be provided on an enum if it has a non-unit variant with a discriminant, or where there are both unit variants with discriminants and non-unit variants. This restriction ensures that there is a well-defined way to extract a variant's discriminant from a value; for instance:

#[repr(u8)] enum Enum { Unit = 3, Tuple(u16) = 2, Struct { a: u8, b: u16, } = 1, } fn discriminant(v : &Enum) -> u8 { unsafe { *(v as *const Enum as *const u8) } } fn main() { assert_eq!(3, discriminant(&Enum::Unit)); assert_eq!(2, discriminant(&Enum::Tuple(5))); assert_eq!(1, discriminant(&Enum::Struct{a: 7, b: 11})); }