| trait Trait { |
| fn xyz() -> bool; |
| } |
| |
| impl Trait for dyn Send + Sync { |
| fn xyz() -> bool { false } |
| } |
| |
| impl Trait for dyn Sync + Send { |
| //~^ ERROR conflicting implementations |
| fn xyz() -> bool { true } |
| } |
| |
| trait Trait2 { |
| fn uvw() -> bool; |
| } |
| |
| impl Trait2 for dyn Send + Sync { |
| fn uvw() -> bool { false } |
| } |
| |
| impl Trait2 for dyn Sync + Send + Sync { |
| //~^ ERROR conflicting implementations |
| fn uvw() -> bool { true } |
| } |
| |
| struct Foo<T: ?Sized>(T); |
| impl Foo<dyn Send + Sync> { |
| fn abc() -> bool { //~ ERROR duplicate definitions with name `abc` |
| false |
| } |
| } |
| |
| impl Foo<dyn Sync + Send> { |
| fn abc() -> bool { |
| true |
| } |
| } |
| |
| fn main() { |
| assert_eq!(<dyn Send + Sync>::xyz(), false); |
| assert_eq!(<dyn Sync + Send>::xyz(), true); |
| assert_eq!(<dyn Send + Sync>::uvw(), false); |
| assert_eq!(<dyn Sync + Send+ Sync>::uvw(), true); |
| assert_eq!(<Foo<dyn Send + Sync>>::abc(), false); |
| //~^ ERROR: multiple applicable items in scope |
| assert_eq!(<Foo<dyn Sync + Send>>::abc(), true); |
| //~^ ERROR: multiple applicable items in scope |
| } |