1
Fork 0

Clean up E0375 explanation

This commit is contained in:
Guillaume Gomez 2020-02-29 12:18:46 +01:00
parent abc3073c92
commit 6fba47f66f

View file

@ -1,12 +1,7 @@
A struct with more than one field containing an unsized type cannot implement `CoerceUnsized` was implemented on a struct which contains more than one field
`CoerceUnsized`. This only occurs when you are trying to coerce one of the with an unsized type.
types in your struct to another type in the struct. In this case we try to
impl `CoerceUnsized` from `T` to `U` which are both types that the struct
takes. 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.
Example of erroneous code: Erroneous code example:
```compile_fail,E0375 ```compile_fail,E0375
#![feature(coerce_unsized)] #![feature(coerce_unsized)]
@ -22,6 +17,14 @@ struct Foo<T: ?Sized, U: ?Sized> {
impl<T, U> CoerceUnsized<Foo<U, T>> for Foo<T, U> {} impl<T, U> CoerceUnsized<Foo<U, T>> for Foo<T, U> {}
``` ```
A struct with more than one field containing an unsized type cannot implement
`CoerceUnsized`. This only occurs when you are trying to coerce one of the
types in your struct to another type in the struct. In this case we try to
impl `CoerceUnsized` from `T` to `U` which are both types that the struct
takes. 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.
`CoerceUnsized` only allows for coercion from a structure with a single `CoerceUnsized` only allows for coercion from a structure with a single
unsized type field to another struct with a single unsized type field. unsized type field to another struct with a single unsized type field.
In fact Rust only allows for a struct to have one unsized type in a struct In fact Rust only allows for a struct to have one unsized type in a struct