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