//@ edition: 2018 //@ run-pass #![feature(arbitrary_self_types)] // tests that the referent type of a reference must be known to call methods on it struct SmartPtr(T); impl core::ops::Receiver for SmartPtr { type Target = T; } impl SmartPtr { fn foo(&self) -> usize { 3 } } fn main() { let val = 1_u32; let ptr = SmartPtr(val); // Ensure calls to outer methods work even if inner methods can't be // resolved due to the type variable assert_eq!((ptr as SmartPtr<_>).foo(), 3); }