]>
Commit | Line | Data |
---|---|---|
b7449926 | 1 | // run-pass |
1a4d82fc JJ |
2 | // Test equality constraints on associated types in a where clause. |
3 | ||
c34b1796 | 4 | |
1a4d82fc JJ |
5 | pub trait Foo { |
6 | type A; | |
7 | fn boo(&self) -> <Self as Foo>::A; | |
8 | } | |
9 | ||
62682a34 | 10 | #[derive(PartialEq, Debug)] |
c34b1796 | 11 | pub struct Bar; |
1a4d82fc | 12 | |
c34b1796 AL |
13 | impl Foo for isize { |
14 | type A = usize; | |
15 | fn boo(&self) -> usize { 42 } | |
1a4d82fc JJ |
16 | } |
17 | ||
18 | impl Foo for Bar { | |
c34b1796 AL |
19 | type A = isize; |
20 | fn boo(&self) -> isize { 43 } | |
1a4d82fc JJ |
21 | } |
22 | ||
23 | impl Foo for char { | |
24 | type A = Bar; | |
25 | fn boo(&self) -> Bar { Bar } | |
26 | } | |
27 | ||
28 | fn foo1<I: Foo<A=Bar>>(x: I) -> Bar { | |
29 | x.boo() | |
30 | } | |
31 | ||
32 | fn foo2<I: Foo>(x: I) -> <I as Foo>::A { | |
33 | x.boo() | |
34 | } | |
35 | ||
36 | pub fn main() { | |
85aaf69f | 37 | let a = 42; |
62682a34 | 38 | assert_eq!(foo2(a), 42); |
1a4d82fc JJ |
39 | |
40 | let a = Bar; | |
62682a34 | 41 | assert_eq!(foo2(a), 43); |
1a4d82fc JJ |
42 | |
43 | let a = 'a'; | |
44 | foo1(a); | |
62682a34 | 45 | assert_eq!(foo2(a), Bar); |
1a4d82fc | 46 | } |