| //@ 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>(T); | |
| impl<T> core::ops::Receiver for SmartPtr<T> { | |
| type Target = T; | |
| } | |
| impl<T> SmartPtr<T> { | |
| 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); | |
| } |