Module rustc_trait_selection::traits::object_safety
source · [−]Expand description
“Object safety” refers to the ability for a trait to be converted to an object. In general, traits may only be converted to an object if all of their methods meet certain criteria. In particular, they must:
- have a suitable receiver from which we can extract a vtable and coerce to a “thin” version that doesn’t contain the vtable;
- not reference the erased type
Self
except for in this receiver; - not have generic type parameters.
Enums
Reasons a method might not be object-safe.
Functions
Returns the object safety violations that affect
astconv – currently,
Self
in supertraits. This is needed
because object_safety_violations
can’t be used during
type collection.We say a method is vtable safe if it can be invoked on a trait
object. Note that object-safe traits can have some
non-vtable-safe methods, so long as they require
Self: Sized
or
otherwise ensure that they cannot be used when Self = Trait
.Lint object-unsafe trait.
Returns
Some(_)
if this method makes the containing trait not object safe.Creates the object type for the current trait. For example,
if the current trait is
Deref
, then this will be
dyn Deref<Target = Self::Target> + 'static
.Performs a type substitution to produce the version of
receiver_ty
when Self = self_ty
.
For example, for receiver_ty = Rc<Self>
and self_ty = Foo
, returns Rc<Foo>
.Checks the method’s receiver (the
self
argument) can be dispatched on when Self
is a
trait object. We require that DispatchableFromDyn
be implemented for the receiver type
in the following way:Returns
Some(_)
if this method cannot be called on a trait
object; this does not necessarily imply that the enclosing trait
is not object safe, because the method might have a where clause
Self:Sized
.