Skip to content

Commit

Permalink
Clean up E0376 explanation
Browse files Browse the repository at this point in the history
  • Loading branch information
GuillaumeGomez committed Mar 1, 2020
1 parent abc3073 commit dd142b1
Showing 1 changed file with 11 additions and 10 deletions.
21 changes: 11 additions & 10 deletions src/librustc_error_codes/error_codes/E0376.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,6 @@
The type you are trying to impl `CoerceUnsized` for is not a struct.
`CoerceUnsized` can only be implemented for a struct. Unsized types are
already able to be coerced without an implementation of `CoerceUnsized`
whereas a struct containing an unsized type needs to know the unsized type
field it's containing is able to be coerced. An [unsized type][1]
is any type that the compiler doesn't know the length or alignment of at
compile time. Any struct containing an unsized type is also unsized.

[1]: https://doc.rust-lang.org/book/ch19-04-advanced-types.html#dynamically-sized-types-and-the-sized-trait
`CoerceUnsized` was implemented on something that isn't a struct.

Example of erroneous code:
Erroneous code example:

```compile_fail,E0376
#![feature(coerce_unsized)]
Expand All @@ -22,6 +14,15 @@ struct Foo<T: ?Sized> {
impl<T, U> CoerceUnsized<U> for Foo<T> {}
```

`CoerceUnsized` can only be implemented for a struct. Unsized types are
already able to be coerced without an implementation of `CoerceUnsized`
whereas a struct containing an unsized type needs to know the unsized type
field it's containing is able to be coerced. An [unsized type][1]
is any type that the compiler doesn't know the length or alignment of at
compile time. Any struct containing an unsized type is also unsized.

[1]: https://doc.rust-lang.org/book/ch19-04-advanced-types.html#dynamically-sized-types-and-the-sized-trait

The `CoerceUnsized` trait takes a struct type. Make sure the type you are
providing to `CoerceUnsized` is a struct with only the last field containing an
unsized type.
Expand Down

0 comments on commit dd142b1

Please sign in to comment.