2018-08-30 12:18:55 +00:00
|
|
|
// run-pass
|
2015-07-04 02:46:54 +00:00
|
|
|
// 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() {
|
2019-05-28 18:47:21 +00:00
|
|
|
let a = &Aimpl as &dyn A;
|
2015-07-04 02:46:54 +00:00
|
|
|
|
|
|
|
assert!(*a == Foo);
|
|
|
|
}
|