A struct without a field containing an unsized type cannot implement `CoerceUnsized`. 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 Example of erroneous code: ```compile_fail,E0374 #![feature(coerce_unsized)] use std::ops::CoerceUnsized; struct Foo { a: i32, } // error: Struct `Foo` has no unsized fields that need `CoerceUnsized`. impl CoerceUnsized> for Foo where T: CoerceUnsized {} ``` `CoerceUnsized` is used to coerce one struct containing an unsized type into another struct containing a different unsized type. If the struct doesn't have any fields of unsized types then you don't need explicit coercion to get the types you want. To fix this you can either not try to implement `CoerceUnsized` or you can add a field that is unsized to the struct. Example: ``` #![feature(coerce_unsized)] use std::ops::CoerceUnsized; // We don't need to impl `CoerceUnsized` here. struct Foo { a: i32, } // We add the unsized type field to the struct. struct Bar { a: i32, b: T, } // The struct has an unsized field so we can implement // `CoerceUnsized` for it. impl CoerceUnsized> for Bar where T: CoerceUnsized {} ``` Note that `CoerceUnsized` 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.