#![allow(dead_code, deprecated, unused_variables, unused_mut)] #![feature(derive_coerce_pointee)] use std::marker::CoercePointee; use std::ops::Deref; #[derive(CoercePointee)] #[repr(transparent)] struct MySmartPointer(Box); impl Deref for MySmartPointer { type Target = T; fn deref(&self) -> &T { &self.0 } } trait MyTrait {} impl MyTrait for i32 {} fn main() { let ptr: MySmartPointer = MySmartPointer(Box::new(4)); let ptr: MySmartPointer = ptr; }