]> git.lizzy.rs Git - rust.git/blob - src/test/ui/overloaded/overloaded-autoderef-vtable.rs
Merge commit '8da837185714cefbb261e93e9846afb11c1dc60e' into sync-rustfmt-subtree
[rust.git] / src / test / ui / overloaded / overloaded-autoderef-vtable.rs
1 // run-pass
2 #![allow(dead_code)]
3
4 use std::ops::Deref;
5
6 struct DerefWithHelper<H, T> {
7     helper: H,
8     value: T
9 }
10
11 trait Helper<T> {
12     fn helper_borrow(&self) -> &T;
13 }
14
15 impl<T> Helper<T> for Option<T> {
16     fn helper_borrow(&self) -> &T {
17         self.as_ref().unwrap()
18     }
19 }
20
21 impl<T, H: Helper<T>> Deref for DerefWithHelper<H, T> {
22     type Target = T;
23
24     fn deref(&self) -> &T {
25         self.helper.helper_borrow()
26     }
27 }
28
29 struct Foo {x: isize}
30
31 impl Foo {
32     fn foo(&self) -> isize {self.x}
33 }
34
35 pub fn main() {
36     let x: DerefWithHelper<Option<Foo>, Foo> =
37         DerefWithHelper { helper: Some(Foo {x: 5}), value: Foo { x: 2 } };
38     assert_eq!(x.foo(), 5);
39 }