1 #![feature(trait_upcasting)] 2 #![allow(incomplete_features)] 3 4 trait Foo { a(&self) -> i325 fn a(&self) -> i32 { 6 10 7 } 8 z(&self) -> i329 fn z(&self) -> i32 { 10 11 11 } 12 y(&self) -> i3213 fn y(&self) -> i32 { 14 12 15 } 16 } 17 18 trait Bar { b(&self) -> i3219 fn b(&self) -> i32 { 20 20 21 } 22 w(&self) -> i3223 fn w(&self) -> i32 { 24 21 25 } 26 } 27 28 trait Baz { c(&self) -> i3229 fn c(&self) -> i32 { 30 30 31 } 32 } 33 34 impl Foo for i32 { a(&self) -> i3235 fn a(&self) -> i32 { 36 100 37 } 38 } 39 40 impl Bar for i32 { b(&self) -> i3241 fn b(&self) -> i32 { 42 200 43 } 44 } 45 46 impl Baz for i32 { c(&self) -> i3247 fn c(&self) -> i32 { 48 300 49 } 50 } 51 main()52fn main() { 53 let baz: &dyn Baz = &1; 54 let _: &dyn std::fmt::Debug = baz; 55 //~^ ERROR mismatched types [E0308] 56 let _: &dyn Send = baz; 57 //~^ ERROR mismatched types [E0308] 58 let _: &dyn Sync = baz; 59 //~^ ERROR mismatched types [E0308] 60 61 let bar: &dyn Bar = baz; 62 //~^ ERROR mismatched types [E0308] 63 let _: &dyn std::fmt::Debug = bar; 64 //~^ ERROR mismatched types [E0308] 65 let _: &dyn Send = bar; 66 //~^ ERROR mismatched types [E0308] 67 let _: &dyn Sync = bar; 68 //~^ ERROR mismatched types [E0308] 69 70 let foo: &dyn Foo = baz; 71 //~^ ERROR mismatched types [E0308] 72 let _: &dyn std::fmt::Debug = foo; 73 //~^ ERROR mismatched types [E0308] 74 let _: &dyn Send = foo; 75 //~^ ERROR mismatched types [E0308] 76 let _: &dyn Sync = foo; 77 //~^ ERROR mismatched types [E0308] 78 79 let foo: &dyn Foo = bar; 80 //~^ ERROR mismatched types [E0308] 81 let _: &dyn std::fmt::Debug = foo; 82 //~^ ERROR mismatched types [E0308] 83 let _: &dyn Send = foo; 84 //~^ ERROR mismatched types [E0308] 85 let _: &dyn Sync = foo; 86 //~^ ERROR mismatched types [E0308] 87 } 88