Module rustc_trait_selection::traits::object_safety [−][src]
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
Selfexcept 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.