Update E0517 message to reflect RFC 2195.

This commit is contained in:
Zachary S 2024-08-07 13:04:43 -05:00
parent 8d0066922b
commit 7869400e58

View File

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