error[E0106]: missing lifetime specifier --> $DIR/impl-trait-missing-lifetime.rs:9:54 | LL | fn g(mut x: impl Iterator) -> Option<&'_ ()> { x.next() } | ^^ expected named lifetime parameter | = help: this function's return type contains a borrowed value, but there is no value for it to be borrowed from help: consider using the `'static` lifetime, but this is uncommon unless you're returning a borrowed value from a `const` or a `static`, or if you will only have owned values | LL | fn g(mut x: impl Iterator) -> Option<&'static ()> { x.next() } | ~~~~~~~ help: consider introducing a named lifetime parameter | LL | fn g<'a>(mut x: impl Iterator) -> Option<&'a ()> { x.next() } | ++++ ~~~ ~~~ help: alternatively, you might want to return an owned value | LL - fn g(mut x: impl Iterator) -> Option<&'_ ()> { x.next() } LL + fn g(mut x: impl Iterator) -> Option<()> { x.next() } | error[E0106]: missing lifetime specifier --> $DIR/impl-trait-missing-lifetime.rs:17:60 | LL | async fn i(mut x: impl Iterator) -> Option<&'_ ()> { x.next() } | ^^ expected named lifetime parameter | = help: this function's return type contains a borrowed value, but there is no value for it to be borrowed from help: consider using the `'static` lifetime, but this is uncommon unless you're returning a borrowed value from a `const` or a `static`, or if you will only have owned values | LL | async fn i(mut x: impl Iterator) -> Option<&'static ()> { x.next() } | ~~~~~~~ help: consider introducing a named lifetime parameter | LL | async fn i<'a>(mut x: impl Iterator) -> Option<&'a ()> { x.next() } | ++++ ~~~ ~~~ help: alternatively, you might want to return an owned value | LL - async fn i(mut x: impl Iterator) -> Option<&'_ ()> { x.next() } LL + async fn i(mut x: impl Iterator) -> Option<()> { x.next() } | error: lifetime may not live long enough --> $DIR/impl-trait-missing-lifetime.rs:17:69 | LL | async fn i(mut x: impl Iterator) -> Option<&'_ ()> { x.next() } | ----------------------------------------------------------------- ^^^^^^^^ returning this value requires that `'1` must outlive `'static` | | | return type `impl Future>` contains a lifetime `'1` error: lifetime may not live long enough --> $DIR/impl-trait-missing-lifetime.rs:9:63 | LL | fn g(mut x: impl Iterator) -> Option<&'_ ()> { x.next() } | ----- has type `x` ^^^^^^^^ returning this value requires that `'1` must outlive `'static` error: aborting due to 4 previous errors For more information about this error, try `rustc --explain E0106`.