| #![feature(trait_upcasting)] |
| |
| trait Foo { |
| fn a(&self) -> i32 { |
| 10 |
| } |
| |
| fn z(&self) -> i32 { |
| 11 |
| } |
| |
| fn y(&self) -> i32 { |
| 12 |
| } |
| } |
| |
| trait Bar { |
| fn b(&self) -> i32 { |
| 20 |
| } |
| |
| fn w(&self) -> i32 { |
| 21 |
| } |
| } |
| |
| trait Baz { |
| fn c(&self) -> i32 { |
| 30 |
| } |
| } |
| |
| impl Foo for i32 { |
| fn a(&self) -> i32 { |
| 100 |
| } |
| } |
| |
| impl Bar for i32 { |
| fn b(&self) -> i32 { |
| 200 |
| } |
| } |
| |
| impl Baz for i32 { |
| fn c(&self) -> i32 { |
| 300 |
| } |
| } |
| |
| fn main() { |
| let baz: &dyn Baz = &1; |
| let _: &dyn std::fmt::Debug = baz; |
| //~^ ERROR mismatched types [E0308] |
| let _: &dyn Send = baz; |
| //~^ ERROR mismatched types [E0308] |
| let _: &dyn Sync = baz; |
| //~^ ERROR mismatched types [E0308] |
| |
| let bar: &dyn Bar = baz; |
| //~^ ERROR mismatched types [E0308] |
| let _: &dyn std::fmt::Debug = bar; |
| //~^ ERROR mismatched types [E0308] |
| let _: &dyn Send = bar; |
| //~^ ERROR mismatched types [E0308] |
| let _: &dyn Sync = bar; |
| //~^ ERROR mismatched types [E0308] |
| |
| let foo: &dyn Foo = baz; |
| //~^ ERROR mismatched types [E0308] |
| let _: &dyn std::fmt::Debug = foo; |
| //~^ ERROR mismatched types [E0308] |
| let _: &dyn Send = foo; |
| //~^ ERROR mismatched types [E0308] |
| let _: &dyn Sync = foo; |
| //~^ ERROR mismatched types [E0308] |
| |
| let foo: &dyn Foo = bar; |
| //~^ ERROR mismatched types [E0308] |
| let _: &dyn std::fmt::Debug = foo; |
| //~^ ERROR mismatched types [E0308] |
| let _: &dyn Send = foo; |
| //~^ ERROR mismatched types [E0308] |
| let _: &dyn Sync = foo; |
| //~^ ERROR mismatched types [E0308] |
| } |