]>
Commit | Line | Data |
---|---|---|
29967ef6 XL |
1 | // check-pass |
2 | ||
3 | trait Mirror { | |
4 | type Other; | |
5 | } | |
6 | ||
7 | #[derive(Debug)] | |
8 | struct Even(usize); | |
9 | struct Odd; | |
10 | ||
11 | impl Mirror for Even { | |
12 | type Other = Odd; | |
13 | } | |
14 | ||
15 | impl Mirror for Odd { | |
16 | type Other = Even; | |
17 | } | |
18 | ||
19 | trait Dyn<T: Mirror>: AsRef<<T as Mirror>::Other> {} | |
20 | ||
21 | impl Dyn<Odd> for Even {} | |
22 | ||
23 | impl AsRef<Even> for Even { | |
24 | fn as_ref(&self) -> &Even { | |
25 | self | |
26 | } | |
27 | } | |
28 | ||
29 | fn code<T: Mirror>(d: &dyn Dyn<T>) -> &T::Other { | |
30 | d.as_ref() | |
31 | } | |
32 | ||
33 | fn main() { | |
34 | println!("{:?}", code(&Even(22))); | |
35 | } |