Trait core::marker::Unsize[][src]

pub trait Unsize<T: ?Sized> { }
🔬 This is a nightly-only experimental API. (unsize #27732)
Expand description

Types that can be “unsized” to a dynamically-sized type.

For example, the sized array type [i8; 2] implements Unsize<[i8]> and Unsize<dyn fmt::Debug>.

All implementations of Unsize are provided automatically by the compiler.

Unsize is implemented for:

  • [T; N] is Unsize<[T]>
  • T is Unsize<dyn Trait> when T: Trait
  • Foo<..., T, ...> is Unsize<Foo<..., U, ...>> if:
    • T: Unsize<U>
    • Foo is a struct
    • Only the last field of Foo has a type involving T
    • T is not part of the type of any other fields
    • Bar<T>: Unsize<Bar<U>>, if the last field of Foo has type Bar<T>

Unsize is used along with ops::CoerceUnsized to allow “user-defined” containers such as Rc to contain dynamically-sized types. See the DST coercion RFC and the nomicon entry on coercion for more details.