On this page
Trait std::marker::Unsize
pub trait Unsize<T>
where
T: ?Sized,{ }
🔬This is a nightly-only experimental API. (
unsize
#18598)
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]
implementUnsize<[T]>
. - A type implements
Unsize<dyn Trait + 'a>
if all of these conditions are met:- The type implements
Trait
. Trait
is object safe.- The type is sized.
- The type outlives
'a
.
- The type implements
- Structs
Foo<..., T1, ..., Tn, ...>
implementUnsize<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 parametersT1
, …,Tn
. - All other parameters of the struct are equal.
Field<T1, ..., Tn>: Unsize<Field<U1, ..., Un>>
, whereField<...>
stands for the actual type of the struct’s last field.
- Only the last field of
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.
Implementors
© 2010 The Rust Project Developers
Licensed under the Apache License, Version 2.0 or the MIT license, at your option.
https://doc.rust-lang.org/std/marker/trait.Unsize.html