error[E0106]: missing lifetime specifier
  --> $DIR/impl-trait-missing-lifetime.rs:9:54
   |
LL | fn g(mut x: impl Iterator<Item = &'_ ()>) -> 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<Item = &'_ ()>) -> Option<&'static ()> { x.next() }
   |                                                      ~~~~~~~
help: consider introducing a named lifetime parameter
   |
LL | fn g<'a>(mut x: impl Iterator<Item = &'a ()>) -> Option<&'a ()> { x.next() }
   |     ++++                             ~~~                ~~~
help: alternatively, you might want to return an owned value
   |
LL - fn g(mut x: impl Iterator<Item = &'_ ()>) -> Option<&'_ ()> { x.next() }
LL + fn g(mut x: impl Iterator<Item = &'_ ()>) -> Option<()> { x.next() }
   |

error[E0106]: missing lifetime specifier
  --> $DIR/impl-trait-missing-lifetime.rs:17:60
   |
LL | async fn i(mut x: impl Iterator<Item = &'_ ()>) -> 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<Item = &'_ ()>) -> Option<&'static ()> { x.next() }
   |                                                            ~~~~~~~
help: consider introducing a named lifetime parameter
   |
LL | async fn i<'a>(mut x: impl Iterator<Item = &'a ()>) -> Option<&'a ()> { x.next() }
   |           ++++                             ~~~                ~~~
help: alternatively, you might want to return an owned value
   |
LL - async fn i(mut x: impl Iterator<Item = &'_ ()>) -> Option<&'_ ()> { x.next() }
LL + async fn i(mut x: impl Iterator<Item = &'_ ()>) -> 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<Item = &'_ ()>) -> Option<&'_ ()> { x.next() }
   | -----------------------------------------------------------------   ^^^^^^^^ returning this value requires that `'1` must outlive `'static`
   | |
   | return type `impl Future<Output = Option<&'static ()>>` 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<Item = &'_ ()>) -> 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`.
