arbitrary_enum_discriminant

The tracking issue for this feature is: #60553


The arbitrary_enum_discriminant feature permits tuple-like and struct-like enum variants with #[repr(<int-type>)] to have explicit discriminants.

Examples

#![allow(unused)] #![feature(arbitrary_enum_discriminant)] fn main() { #[allow(dead_code)] #[repr(u8)] enum Enum { Unit = 3, Tuple(u16) = 2, Struct { a: u8, b: u16, } = 1, } impl Enum { fn tag(&self) -> u8 { unsafe { *(self as *const Self as *const u8) } } } assert_eq!(3, Enum::Unit.tag()); assert_eq!(2, Enum::Tuple(5).tag()); assert_eq!(1, Enum::Struct{a: 7, b: 11}.tag()); }