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
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
.