Error code E0732
An enum
with a discriminant must specify a #[repr(inttype)]
.
Erroneous code example:
#![feature(arbitrary_enum_discriminant)] 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:
#![feature(arbitrary_enum_discriminant)] #[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})); }