]> git.lizzy.rs Git - rust.git/blob - src/librustc_error_codes/error_codes/E0732.md
Rollup merge of #62514 - stephaneyfx:box-ffi, r=nikomatsakis
[rust.git] / src / librustc_error_codes / error_codes / E0732.md
1 An `enum` with a discriminant must specify a `#[repr(inttype)]`.
2
3 A `#[repr(inttype)]` must be provided on an `enum` if it has a non-unit
4 variant with a discriminant, or where there are both unit variants with
5 discriminants and non-unit variants. This restriction ensures that there
6 is a well-defined way to extract a variant's discriminant from a value;
7 for instance:
8
9 ```
10 #![feature(arbitrary_enum_discriminant)]
11
12 #[repr(u8)]
13 enum Enum {
14     Unit = 3,
15     Tuple(u16) = 2,
16     Struct {
17         a: u8,
18         b: u16,
19     } = 1,
20 }
21
22 fn discriminant(v : &Enum) -> u8 {
23     unsafe { *(v as *const Enum as *const u8) }
24 }
25
26 assert_eq!(3, discriminant(&Enum::Unit));
27 assert_eq!(2, discriminant(&Enum::Tuple(5)));
28 assert_eq!(1, discriminant(&Enum::Struct{a: 7, b: 11}));
29 ```