Error code E0307
The self
parameter in a method has an invalid "receiver type".
Erroneous code example:
ⓘ
Methods take a special first parameter, of which there are three variants:
self
, &self
, and &mut self
. These are syntactic sugar for
self: Self
, self: &Self
, and self: &mut Self
respectively.
The type Self
acts as an alias to the type of the current trait
implementer, or "receiver type". Besides the already mentioned Self
,
&Self
and &mut Self
valid receiver types, the following are also valid:
self: Box<Self>
, self: Rc<Self>
, self: Arc<Self>
, and self: Pin<P>
(where P is one of the previous types except Self
). Note that Self
can
also be the underlying implementing type, like Foo
in the following
example:
This error will be emitted by the compiler when using an invalid receiver type, like in the following example:
ⓘ
The nightly feature Arbitrary self types extends the accepted
set of receiver types to also include any type that implements the
Receiver
trait and can follow its chain of Target
types to Self
.
There's a blanket implementation of Receiver
for T: Deref
, so any
type which dereferences to Self
can be used.