error[E0623]: lifetime mismatch
  --> $DIR/ret-impl-trait-one.rs:10:65
   |
LL | async fn async_ret_impl_trait3<'a, 'b>(a: &'a u8, b: &'b u8) -> impl Trait<'a> + 'b {
   |                                                      ------     ^^^^^^^^^^^^^^^^^^^
   |                                                      |          |
   |                                                      |          ...but data from `a` is held across an await point here
   |                                                      |          this `async fn` implicitly returns an `impl Future<Output = impl Trait<'a> + 'b>`
   |                                                      this parameter and the returned future are declared with different lifetimes...

error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
  --> $DIR/ret-impl-trait-one.rs:16:65
   |
LL | async fn async_ret_impl_trait1<'a, 'b>(a: &'a u8, b: &'b u8) -> impl Trait<'a> {
   |                                    --                           ^^^^^^^^^^^^^^
   |                                    |
   |                                    hidden type `(&'a u8, &'b u8)` captures the lifetime `'b` as defined here
   |
help: to declare that the `impl Trait` captures 'b, you can add an explicit `'b` lifetime bound
   |
LL | async fn async_ret_impl_trait1<'a, 'b>(a: &'a u8, b: &'b u8) -> impl Trait<'a> + 'b {
   |                                                                                ++++

error: aborting due to 2 previous errors

Some errors have detailed explanations: E0623, E0700.
For more information about an error, try `rustc --explain E0623`.
