trait Trait {} impl Trait for () {} fn foo() -> impl Trait { //~^ WARN function cannot return without recursing [unconditional_recursion] let a: T = foo::(); loop {} let _: T = foo::(); //~^ ERROR concrete type differs from previous defining opaque type use } fn main() {}