Trait std::marker::Sized 1.0.0
[−]
[src]
pub trait Sized { }
Types with a constant size known at compile time.
All type parameters have an implicit bound of Sized
. The special syntax
?Sized
can be used to remove this bound if it's not appropriate.
struct Foo<T>(T); struct Bar<T: ?Sized>(T); // struct FooUse(Foo<[i32]>); // error: Sized is not implemented for [i32] struct BarUse(Bar<[i32]>); // OK
The one exception is the implicit Self
type of a trait, which does not
get an implicit Sized
bound. This is because a Sized
bound prevents
the trait from being used to form a trait object:
trait Foo { } trait Bar: Sized { } struct Impl; impl Foo for Impl { } impl Bar for Impl { } let x: &Foo = &Impl; // OK // let y: &Bar = &Impl; // error: the trait `Bar` cannot // be made into an object