#![feature(trait_alias)] struct B; struct C; trait Tr {} impl Tr for B {} impl Tr for C {} trait Tr2<S> = Into<S>; fn foo2<T: Tr2<()>>() {} fn foo() -> impl Tr { let x = foo2::<_>(); match true { true => B, false => C, //~^ `match` arms have incompatible types } } fn main() {}