#![feature(trait_upcasting)] | |
#![feature(trait_alias)] | |
// Although we *elaborate* `T: Alias` to `i32: B`, we should | |
// not consider `B` to be a supertrait of the type. | |
trait Alias = A where i32: B; | |
trait A {} | |
trait B { | |
fn test(&self); | |
} | |
trait C: Alias {} | |
impl A for () {} | |
impl C for () {} | |
impl B for i32 { | |
fn test(&self) { | |
println!("hi {self}"); | |
} | |
} | |
fn test(x: &dyn C) -> &dyn B { | |
x | |
//~^ ERROR mismatched types | |
} | |
fn main() { | |
let x: &dyn C = &(); | |
} |