@@ -25,14 +25,17 @@ impl Foo {
25
25
These attributes do not work on typedefs, since typedefs are just aliases.
26
26
27
27
Representations like ` #[repr(u8)] ` , ` #[repr(i64)] ` are for selecting the
28
- discriminant size for enums with no data fields on any of the variants, e.g.
29
- ` enum Color {Red, Blue, Green} ` , effectively setting the size of the enum to
30
- the size of the provided type. Such an enum can be cast to a value of the same
31
- type as well. In short, ` #[repr(u8)] ` makes the enum behave like an integer
32
- with a constrained set of allowed values.
28
+ discriminant size for enums. For enums with no data fields on any of the
29
+ variants, e.g. ` enum Color {Red, Blue, Green} ` , this effectively sets the size
30
+ of the enum to the size of the provided type. Such an enum can be cast to a
31
+ value of the same type as well. In short, ` #[repr(u8)] ` makes a field-less enum
32
+ behave like an integer with a constrained set of allowed values.
33
33
34
- Only field-less enums can be cast to numerical primitives, so this attribute
35
- will not apply to structs.
34
+ For a description of how ` #[repr(C)] ` and representations like ` #[repr(u8)] `
35
+ affect the layout of enums with data fields, see [ RFC 2195] [ rfc2195 ] .
36
+
37
+ Only field-less enums can be cast to numerical primitives. Representations like
38
+ ` #[repr(u8)] ` will not apply to structs.
36
39
37
40
` #[repr(packed)] ` reduces padding to make the struct size smaller. The
38
41
representation of enums isn't strictly defined in Rust, and this attribute
@@ -42,3 +45,5 @@ won't work on enums.
42
45
types (i.e., ` u8 ` , ` i32 ` , etc) a representation that permits vectorization via
43
46
SIMD. This doesn't make much sense for enums since they don't consist of a
44
47
single list of data.
48
+
49
+ [ rfc2195 ] : https://github.com/rust-lang/rfcs/blob/master/text/2195-really-tagged-unions.md
0 commit comments