# Error code E0375

`CoerceUnsized` or `DispatchFromDyn` was implemented on a struct which contains more than one field that is being unsized.

Erroneous code example:

    #![allow(unused)]
    #![feature(coerce_unsized)]
    fn main() {
    use std::ops::CoerceUnsized;

    struct Foo<T: ?Sized, U: ?Sized> {
        a: i32,
        b: T,
        c: U,
    }

    // error: Struct `Foo` has more than one unsized field.
    impl<T, U> CoerceUnsized<Foo<U, T>> for Foo<T, U> {}
    }

`CoerceUnsized` is used to coerce structs that have a field that can be unsized, like a custom `MyBox<T>` being unsized to `MyBox<dyn Trait>`. `DispatchFromDyn` is used to dispatch from `MyBox<dyn Trait>` to `MyBox<Self>` in a dyn-compatible trait.

If the struct has multiple fields that must be unsized, then the compiler has no way to generate a valid implementation of `CoerceUnsized` or `DispatchFromDyn`.

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.