1 use std::ops::Deref; 2 3 struct DerefWithHelper<H, T> { 4 pub helper: H, 5 pub value: Option<T> 6 } 7 8 trait Helper<T> { helper_borrow(&self) -> &T9 fn helper_borrow(&self) -> &T; 10 } 11 12 impl<T> Helper<T> for Option<T> { helper_borrow(&self) -> &T13 fn helper_borrow(&self) -> &T { 14 self.as_ref().unwrap() 15 } 16 } 17 18 impl<T, H: Helper<T>> Deref for DerefWithHelper<H, T> { 19 type Target = T; 20 deref(&self) -> &T21 fn deref(&self) -> &T { 22 self.helper.helper_borrow() 23 } 24 } 25 26 // Test cross-crate autoderef + vtable. check<T: PartialEq>(x: T, y: T) -> bool27pub fn check<T: PartialEq>(x: T, y: T) -> bool { 28 let d: DerefWithHelper<Option<T>, T> = DerefWithHelper { helper: Some(x), value: None }; 29 d.eq(&y) 30 } 31