arbitrary_self_types_pointers
The tracking issue for this feature is: [#44874]
This extends the arbitrary self types feature to allow methods to
receive self
by pointer. For example:
#![feature(arbitrary_self_types_pointers)] struct A; impl A { fn m(self: *const Self) {} } fn main() { let a = A; let a_ptr: *const A = &a as *const A; a_ptr.m(); }
In general this is not advised: it's thought to be better practice to wrap
raw pointers in a newtype wrapper which implements the core::ops::Receiver
trait, then you need "only" the arbitrary_self_types
feature. For example:
#![feature(arbitrary_self_types)] #![allow(dead_code)] struct A; impl A { fn m(self: Wrapper<Self>) {} // can extract the pointer and do // what it needs } struct Wrapper<T>(*const T); impl<T> core::ops::Receiver for Wrapper<T> { type Target = T; } fn main() { let a = A; let a_ptr: *const A = &a as *const A; let a_wrapper = Wrapper(a_ptr); a_wrapper.m(); }