| //@ run-pass | |
| // Test equality constraints on associated types in a where clause. | |
| pub trait Foo { | |
| type A; | |
| fn boo(&self) -> <Self as Foo>::A; | |
| } | |
| #[derive(PartialEq)] | |
| pub struct Bar; | |
| impl Foo for isize { | |
| type A = usize; | |
| fn boo(&self) -> usize { 42 } | |
| } | |
| impl Foo for char { | |
| type A = Bar; | |
| fn boo(&self) -> Bar { Bar } | |
| } | |
| fn foo_bar<I: Foo<A=Bar>>(x: I) -> Bar { | |
| x.boo() | |
| } | |
| fn foo_uint<I: Foo<A=usize>>(x: I) -> usize { | |
| x.boo() | |
| } | |
| pub fn main() { | |
| let a = 42; | |
| foo_uint(a); | |
| let a = 'a'; | |
| foo_bar(a); | |
| } |