`CoerceUnsized` or `DispatchFromDyn` may only be implemented between structs of the same type. Example of erroneous code: ```compile_fail,E0377 #![feature(coerce_unsized)] use std::ops::CoerceUnsized; pub struct Foo { field_with_unsized_type: T, } pub struct Bar { field_with_unsized_type: T, } // error: the trait `CoerceUnsized` may only be implemented for a coercion // between structures with the same definition impl CoerceUnsized> for Foo where T: CoerceUnsized {} ``` `CoerceUnsized` is used to coerce structs that have a field that can be unsized, like a custom `MyBox` being unsized to `MyBox`. `DispatchFromDyn` is used to dispatch from `MyBox` to `MyBox` in a dyn-compatible trait. The compiler cannot support coercions between structs of different types, so a valid implementation of `CoerceUnsized` or `DispatchFromDyn` should be implemented between the same struct with different generic parameters. Note that `CoerceUnsized` and `DispatchFromDyn` is mainly used by smart pointers like `Box`, `Rc` and `Arc` to be able to mark that they can coerce unsized types that they are pointing at.