Unsize in core::marker - Rust
Description: Types that can be “unsized” to a dynamically-sized type.

## Unsize

# Trait Unsize

Source

    pub trait Unsize<T: PointeeSized>: PointeeSized { }

🔬This is a nightly-only experimental API. (`unsize` #18598)
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. Those implementations are:

- Arrays `[T; N]` implement `Unsize<[T]>`.
- A type implements `Unsize<dyn Trait + 'a>` if all of these conditions are met:
  - The type implements `Trait`.
  - `Trait` is dyn-compatible1.
  - The type is sized.
  - The type outlives `'a`.
- Trait objects `dyn TraitA + AutoA... + 'a` implement `Unsize<dyn TraitB + AutoB... + 'b>` if all of these conditions are met:
  - `TraitB` is a supertrait of `TraitA`.
  - `AutoB...` is a subset of `AutoA...`.
  - `'a` outlives `'b`.
- Structs `Foo<..., T1, ..., Tn, ...>` implement `Unsize<Foo<..., U1, ..., Un, ...>>` where any number of (type and const) parameters may be changed if all of these conditions are met:
  - Only the last field of `Foo` has a type involving the parameters `T1`, …, `Tn`.
  - All other parameters of the struct are equal.
  - `Field<T1, ..., Tn>: Unsize<Field<U1, ..., Un>>`, where `Field<...>` stands for the actual type of the struct’s last field.

`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.

1. Formerly known as object safe. ↩

## Implementors§