Trait std::marker::Unsize

#[lang = "unsize"]
pub trait Unsize<T> where    T: ?Sized, { }
🔬 This is a nightly-only experimental API. (unsize #27732)

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

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

All implementations of Unsize are provided automatically by the compiler.

Unsize is implemented for:

  • [T; N] is Unsize<[T]>
  • T is Unsize<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::Rc to contain dynamically-sized types. See the DST coercion RFC and the nomicon entry on coercion for more details.


© 2010 The Rust Project Developers
Licensed under the Apache License, Version 2.0 or the MIT license, at your option.