//@ check-fail // // issue: trait A {} impl A for T {} trait B {} impl B for T {} trait Trait {} struct X; impl Trait for T {} struct Y; impl Trait for T {} fn main() { let a: *const dyn A = &(); let b: *const dyn B = a as _; //~ error: casting `*const dyn A` as `*const dyn B` is invalid let x: *const dyn Trait = &(); let y: *const dyn Trait = x as _; //~ error: mismatched types _ = (b, y); } fn generic(x: *const dyn Trait, t: *const dyn Trait) { let _: *const dyn Trait = x as _; //~ error: mismatched types let _: *const dyn Trait = t as _; //~ error: mismatched types } trait Assocked { type Assoc: ?Sized; } fn change_assoc(x: *mut dyn Assocked) -> *mut dyn Assocked { x as _ //~ error: mismatched types }