error[E0277]: the `?` operator can only be applied to values that implement `Try`
  --> $DIR/issue-61076.rs:42:5
   |
LL |     foo()?;
   |     ^^^^^^ the `?` operator cannot be applied to type `impl Future<Output = Result<(), ()>>`
   |
   = help: the trait `Try` is not implemented for `impl Future<Output = Result<(), ()>>`
help: consider `await`ing on the `Future`
   |
LL |     foo().await?;
   |          ++++++

error[E0277]: the `?` operator can only be applied to values that implement `Try`
  --> $DIR/issue-61076.rs:65:5
   |
LL |     t?;
   |     ^^ the `?` operator cannot be applied to type `T`
   |
   = help: the trait `Try` is not implemented for `T`
help: consider `await`ing on the `Future`
   |
LL |     t.await?;
   |      ++++++

error[E0609]: no field `0` on type `impl Future<Output = Tuple>`
  --> $DIR/issue-61076.rs:74:26
   |
LL |     let _: i32 = tuple().0;
   |                          ^ field not available in `impl Future`, but it is available in its `Output`
   |
help: consider `await`ing on the `Future` and access the field of its `Output`
   |
LL |     let _: i32 = tuple().await.0;
   |                         ++++++

error[E0609]: no field `a` on type `impl Future<Output = Struct>`
  --> $DIR/issue-61076.rs:78:28
   |
LL |     let _: i32 = struct_().a;
   |                            ^ field not available in `impl Future`, but it is available in its `Output`
   |
help: consider `await`ing on the `Future` and access the field of its `Output`
   |
LL |     let _: i32 = struct_().await.a;
   |                           ++++++

error[E0599]: no method named `method` found for opaque type `impl Future<Output = Struct>` in the current scope
  --> $DIR/issue-61076.rs:82:15
   |
LL |     struct_().method();
   |               ^^^^^^ method not found in `impl Future<Output = Struct>`
   |
help: consider `await`ing on the `Future` and calling the method on its `Output`
   |
LL |     struct_().await.method();
   |               ++++++

error[E0308]: mismatched types
  --> $DIR/issue-61076.rs:90:9
   |
LL |         Tuple(_) => {}
   |         ^^^^^^^^ expected opaque type, found struct `Tuple`
   |
note: while checking the return type of the `async fn`
  --> $DIR/issue-61076.rs:56:21
   |
LL | async fn tuple() -> Tuple {
   |                     ^^^^^ checked the `Output` of this `async fn`, expected opaque type
   = note: expected opaque type `impl Future<Output = Tuple>`
                   found struct `Tuple`
help: consider `await`ing on the `Future`
   |
LL |     match tuple().await {
   |                  ++++++

error: aborting due to 6 previous errors

Some errors have detailed explanations: E0277, E0308, E0599, E0609.
For more information about an error, try `rustc --explain E0277`.
