//@ edition:2021 fn foo(b: bool) -> impl std::fmt::Debug { if b { return vec![42] } [].into_iter().collect() } fn bar(b: bool) -> impl std::fmt::Debug { if b { return [].into_iter().collect() } vec![42] } fn bak(b: bool) -> impl std::fmt::Debug { if b { return std::iter::empty().collect() } vec![42] } fn baa(b: bool) -> impl std::fmt::Debug { if b { return [42].into_iter().collect() } vec![] } fn muh() -> Result<(), impl std::fmt::Debug> { Err("whoops")?; Ok(()) //~^ ERROR type annotations needed } fn muh2() -> Result<(), impl std::fmt::Debug> { return Err(From::from("foo")); //~^ ERROR cannot call associated function on trait Ok(()) } fn muh3() -> Result<(), impl std::fmt::Debug> { Err(From::from("foo")) //~^ ERROR cannot call associated function on trait } fn main() {}