Rust errors / Attributes, macros and features
Rust compiler error · checked with rustc 1.99.0
Rust error E0732: `#[repr(inttype)]` must be specified for enums with explicit discriminants and non-unit variants
What it meansAn enum with a discriminant must specify a #[repr(inttype)].
What rustc prints
error[E0732]: `#[repr(inttype)]` must be specified for enums with explicit discriminants and non-unit variants
--> main.rs:1:1
|
1 | enum Enum { // error!
| ^^^^^^^^^
2 | Unit = 1,
3 | Tuple() = 2,
| - explicit discriminant on non-unit variant specified hereReal output of rustc 1.99.0 compiling the official example below (2021 edition). Your names and line numbers will differ; the first line is the part to match.
The compiler team's explanation
An enum with a discriminant must specify a #[repr(inttype)].
Erroneous code example:
enum Enum { // error!
Unit = 1,
Tuple() = 2,
Struct{} = 3,
}
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}));
}From rustc --explain E0732 (1.99.0), part of the Rust project, MIT or Apache-2.0. Official page.
Related errors
Up next
Often hit nextE0658: is unstableA related error from the same family.Read it next →Did this answer your question?