3 use core::future::Future;
5 use core::task::{Context, Poll};
19 impl Future for Struct {
21 fn poll(self: Pin<&mut Self>, _: &mut Context<'_>) -> Poll<Self::Output> { Poll::Pending }
24 impl Future for Tuple {
26 fn poll(self: Pin<&mut Self>, _: &mut Context<'_>) -> Poll<Self::Output> { Poll::Pending }
30 type Output = Result<(), ()>;
32 fn poll(self: Pin<&mut Self>, _: &mut Context<'_>) -> Poll<Self::Output> {
37 async fn foo() -> Result<(), ()> {
41 async fn bar() -> Result<(), ()> {
42 foo()?; //~ ERROR the `?` operator can only be applied to values that implement `Try`
43 //~^ NOTE the `?` operator cannot be applied to type `impl Future<Output = Result<(), ()>>`
44 //~| HELP the trait `Try` is not implemented for `impl Future<Output = Result<(), ()>>`
45 //~| HELP consider `await`ing on the `Future`
46 //~| NOTE in this expansion of desugaring of operator `?`
47 //~| NOTE in this expansion of desugaring of operator `?`
48 //~| NOTE in this expansion of desugaring of operator `?`
52 async fn struct_() -> Struct {
56 async fn tuple() -> Tuple {
57 //~^ NOTE checked the `Output` of this `async fn`, expected opaque type
58 //~| NOTE while checking the return type of the `async fn`
59 //~| NOTE in this expansion of desugaring of `async` block or function
63 async fn baz() -> Result<(), ()> {
65 t?; //~ ERROR the `?` operator can only be applied to values that implement `Try`
66 //~^ NOTE the `?` operator cannot be applied to type `T`
67 //~| HELP the trait `Try` is not implemented for `T`
68 //~| HELP consider `await`ing on the `Future`
69 //~| NOTE in this expansion of desugaring of operator `?`
70 //~| NOTE in this expansion of desugaring of operator `?`
71 //~| NOTE in this expansion of desugaring of operator `?`
74 let _: i32 = tuple().0; //~ ERROR no field `0`
75 //~^ HELP consider `await`ing on the `Future`
76 //~| NOTE field not available in `impl Future`
78 let _: i32 = struct_().a; //~ ERROR no field `a`
79 //~^ HELP consider `await`ing on the `Future`
80 //~| NOTE field not available in `impl Future`
82 struct_().method(); //~ ERROR no method named
83 //~^ NOTE method not found in `impl Future<Output = Struct>`
84 //~| HELP consider `await`ing on the `Future`
89 match tuple() { //~ HELP consider `await`ing on the `Future`
90 //~^ NOTE this expression has type `impl Future<Output = Tuple>`
91 Tuple(_) => {} //~ ERROR mismatched types
92 //~^ NOTE expected opaque type, found struct `Tuple`
93 //~| NOTE expected opaque type `impl Future<Output = Tuple>`