| //@ run-pass | |
| // Test that the right implementation is called through a trait | |
| // object when supertraits include multiple references to the | |
| // same trait, with different type parameters. | |
| trait A: PartialEq<Foo> + PartialEq<Bar> { } | |
| struct Foo; | |
| struct Bar; | |
| struct Aimpl; | |
| impl PartialEq<Foo> for Aimpl { | |
| fn eq(&self, _rhs: &Foo) -> bool { | |
| true | |
| } | |
| } | |
| impl PartialEq<Bar> for Aimpl { | |
| fn eq(&self, _rhs: &Bar) -> bool { | |
| false | |
| } | |
| } | |
| impl A for Aimpl { } | |
| fn main() { | |
| let a = &Aimpl as &dyn A; | |
| assert!(*a == Foo); | |
| } |