]> git.proxmox.com Git - rustc.git/blame - src/librustc_error_codes/error_codes/E0732.md
New upstream version 1.47.0+dfsg1
[rustc.git] / src / librustc_error_codes / error_codes / E0732.md
CommitLineData
60c5eb7d
XL
1An `enum` with a discriminant must specify a `#[repr(inttype)]`.
2
f9f354fc
XL
3Erroneous code example:
4
5```compile_fail,E0732
6#![feature(arbitrary_enum_discriminant)]
7
8enum Enum { // error!
9 Unit = 1,
10 Tuple() = 2,
11 Struct{} = 3,
12}
13# fn main() {}
14```
15
60c5eb7d
XL
16A `#[repr(inttype)]` must be provided on an `enum` if it has a non-unit
17variant with a discriminant, or where there are both unit variants with
18discriminants and non-unit variants. This restriction ensures that there
19is a well-defined way to extract a variant's discriminant from a value;
20for instance:
21
22```
23#![feature(arbitrary_enum_discriminant)]
24
25#[repr(u8)]
26enum Enum {
27 Unit = 3,
28 Tuple(u16) = 2,
29 Struct {
30 a: u8,
31 b: u16,
32 } = 1,
33}
34
35fn discriminant(v : &Enum) -> u8 {
36 unsafe { *(v as *const Enum as *const u8) }
37}
38
f9f354fc
XL
39fn main() {
40 assert_eq!(3, discriminant(&Enum::Unit));
41 assert_eq!(2, discriminant(&Enum::Tuple(5)));
42 assert_eq!(1, discriminant(&Enum::Struct{a: 7, b: 11}));
43}
60c5eb7d 44```