// Tests that `as` casts from enums to numeric types succeed // only if the enum type is "unit-only" or "fieldless" as // described here: https://doc.rust-lang.org/reference/items/enumerations.html#casting pub enum UnitOnly { Foo, Bar, Baz, } pub enum Fieldless { Tuple(), Struct{}, Unit, } pub enum NotUnitOnlyOrFieldless { Foo, Bar(u8), Baz } fn main() { let unit_only = UnitOnly::Foo; let _ = unit_only as isize; let _ = unit_only as i32; let _ = unit_only as usize; let _ = unit_only as u32; let fieldless = Fieldless::Struct{}; let _ = fieldless as isize; let _ = fieldless as i32; let _ = fieldless as usize; let _ = fieldless as u32; let not_unit_only_or_fieldless = NotUnitOnlyOrFieldless::Foo; let _ = not_unit_only_or_fieldless as isize; //~ ERROR non-primitive cast: `NotUnitOnlyOrFieldless` as `isize` let _ = not_unit_only_or_fieldless as i32; //~ ERROR non-primitive cast: `NotUnitOnlyOrFieldless` as `i32` let _ = not_unit_only_or_fieldless as usize; //~ ERROR non-primitive cast: `NotUnitOnlyOrFieldless` as `usize` let _ = not_unit_only_or_fieldless as u32; //~ ERROR non-primitive cast: `NotUnitOnlyOrFieldless` as `u32` }