• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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) -> bool27 pub 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