Summary
It is possible to create custom smart pointers by implementing the Deref trait. However, the standard library types are able to do things user-defined pointers can't. For example, acting as a method receiver (self etc.) or turning a concrete type implementing a custom Trait to a dyn Trait.
These limitations are of particular importance to low-level systems (e.g. Rust for Linux) and cross-language interoperability (e.g. when designing a reference to C++ objects).
We want to stabilize these features to reduce the gap between smart pointers in the standard library and user-defined ones.
These features are all interconnected and depend on one another so we're proposing a single goal that makes user-defined smart pointers on par with the ones in the standard library.
Tasks and status
Note: we have updated the body to match the 2026 goal. Your original text is preserved below.
Details
Summary
It is possible to create custom smart pointers by implementing the Deref trait. However, the standard library types are able to do things user-defined pointers can't. For example, acting as a method receiver (self etc.) or turning a concrete type implementing a custom Trait to a dyn Trait.
These limitations are of particular importance to low-level systems (e.g. Rust for Linux) and cross-language interoperability (e.g. when designing a reference to C++ objects).
We want to stabilize these features to reduce the gap between smart pointers in the standard library and user-defined ones.
These features are all interconnected and depend on one another so we're proposing a single goal that makes user-defined smart pointers on par with the ones in the standard library.
Tasks and status
Summary
It is possible to create custom smart pointers by implementing the
Dereftrait. However, the standard library types are able to do things user-defined pointers can't. For example, acting as a method receiver (selfetc.) or turning a concrete type implementing a customTraitto adyn Trait.These limitations are of particular importance to low-level systems (e.g. Rust for Linux) and cross-language interoperability (e.g. when designing a reference to C++ objects).
We want to stabilize these features to reduce the gap between smart pointers in the standard library and user-defined ones.
These features are all interconnected and depend on one another so we're proposing a single goal that makes user-defined smart pointers on par with the ones in the standard library.
Tasks and status
Note: we have updated the body to match the 2026 goal. Your original text is preserved below.
Details
Summary
It is possible to create custom smart pointers by implementing the
Dereftrait. However, the standard library types are able to do things user-defined pointers can't. For example, acting as a method receiver (selfetc.) or turning a concrete type implementing a customTraitto adyn Trait.These limitations are of particular importance to low-level systems (e.g. Rust for Linux) and cross-language interoperability (e.g. when designing a reference to C++ objects).
We want to stabilize these features to reduce the gap between smart pointers in the standard library and user-defined ones.
These features are all interconnected and depend on one another so we're proposing a single goal that makes user-defined smart pointers on par with the ones in the standard library.
Tasks and status