2020-05-06 05:43:56 -05:00
|
|
|
// edition:2018
|
|
|
|
|
2020-05-14 10:07:46 -05:00
|
|
|
use core::future::Future;
|
|
|
|
use core::pin::Pin;
|
|
|
|
use core::task::{Context, Poll};
|
|
|
|
|
|
|
|
struct T;
|
|
|
|
|
2020-08-16 07:25:22 -05:00
|
|
|
struct Tuple(i32);
|
2020-05-30 09:57:12 -05:00
|
|
|
|
|
|
|
struct Struct {
|
|
|
|
a: i32
|
|
|
|
}
|
|
|
|
|
2020-08-20 02:34:08 -05:00
|
|
|
impl Struct {
|
|
|
|
fn method(&self) {}
|
|
|
|
}
|
|
|
|
|
2020-08-16 07:25:22 -05:00
|
|
|
impl Future for Struct {
|
|
|
|
type Output = Struct;
|
|
|
|
fn poll(self: Pin<&mut Self>, _: &mut Context<'_>) -> Poll<Self::Output> { Poll::Pending }
|
|
|
|
}
|
|
|
|
|
|
|
|
impl Future for Tuple {
|
|
|
|
type Output = Tuple;
|
|
|
|
fn poll(self: Pin<&mut Self>, _: &mut Context<'_>) -> Poll<Self::Output> { Poll::Pending }
|
2020-05-30 09:57:12 -05:00
|
|
|
}
|
|
|
|
|
2020-05-14 10:07:46 -05:00
|
|
|
impl Future for T {
|
|
|
|
type Output = Result<(), ()>;
|
|
|
|
|
|
|
|
fn poll(self: Pin<&mut Self>, _: &mut Context<'_>) -> Poll<Self::Output> {
|
|
|
|
Poll::Pending
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-05-06 05:43:56 -05:00
|
|
|
async fn foo() -> Result<(), ()> {
|
|
|
|
Ok(())
|
|
|
|
}
|
|
|
|
|
|
|
|
async fn bar() -> Result<(), ()> {
|
2020-09-02 02:40:56 -05:00
|
|
|
foo()?; //~ ERROR the `?` operator can only be applied to values that implement `Try`
|
2021-11-16 18:16:23 -06:00
|
|
|
//~^ NOTE the `?` operator cannot be applied to type `impl Future<Output = Result<(), ()>>`
|
|
|
|
//~| HELP the trait `Try` is not implemented for `impl Future<Output = Result<(), ()>>`
|
2020-10-23 12:54:34 -05:00
|
|
|
//~| HELP consider `await`ing on the `Future`
|
|
|
|
//~| NOTE in this expansion of desugaring of operator `?`
|
|
|
|
//~| NOTE in this expansion of desugaring of operator `?`
|
|
|
|
//~| NOTE in this expansion of desugaring of operator `?`
|
2020-05-06 05:43:56 -05:00
|
|
|
Ok(())
|
|
|
|
}
|
|
|
|
|
2020-08-16 07:25:22 -05:00
|
|
|
async fn struct_() -> Struct {
|
|
|
|
Struct { a: 1 }
|
|
|
|
}
|
|
|
|
|
|
|
|
async fn tuple() -> Tuple {
|
|
|
|
Tuple(1i32)
|
|
|
|
}
|
|
|
|
|
2020-05-14 10:07:46 -05:00
|
|
|
async fn baz() -> Result<(), ()> {
|
|
|
|
let t = T;
|
2020-09-02 02:40:56 -05:00
|
|
|
t?; //~ ERROR the `?` operator can only be applied to values that implement `Try`
|
2020-10-23 12:54:34 -05:00
|
|
|
//~^ NOTE the `?` operator cannot be applied to type `T`
|
|
|
|
//~| HELP the trait `Try` is not implemented for `T`
|
|
|
|
//~| HELP consider `await`ing on the `Future`
|
|
|
|
//~| NOTE in this expansion of desugaring of operator `?`
|
|
|
|
//~| NOTE in this expansion of desugaring of operator `?`
|
|
|
|
//~| NOTE in this expansion of desugaring of operator `?`
|
|
|
|
|
2020-05-30 09:57:12 -05:00
|
|
|
|
2020-08-16 07:25:22 -05:00
|
|
|
let _: i32 = tuple().0; //~ ERROR no field `0`
|
2020-10-23 12:54:34 -05:00
|
|
|
//~^ HELP consider `await`ing on the `Future`
|
|
|
|
//~| NOTE field not available in `impl Future`
|
2020-05-30 09:57:12 -05:00
|
|
|
|
2020-08-16 07:25:22 -05:00
|
|
|
let _: i32 = struct_().a; //~ ERROR no field `a`
|
2020-10-23 12:54:34 -05:00
|
|
|
//~^ HELP consider `await`ing on the `Future`
|
|
|
|
//~| NOTE field not available in `impl Future`
|
2020-05-30 09:57:12 -05:00
|
|
|
|
2020-08-20 02:34:08 -05:00
|
|
|
struct_().method(); //~ ERROR no method named
|
2021-11-16 18:16:23 -06:00
|
|
|
//~^ NOTE method not found in `impl Future<Output = Struct>`
|
2020-10-23 12:54:34 -05:00
|
|
|
//~| HELP consider `await`ing on the `Future`
|
2020-05-14 10:07:46 -05:00
|
|
|
Ok(())
|
|
|
|
}
|
|
|
|
|
2020-08-20 05:42:08 -05:00
|
|
|
async fn match_() {
|
2020-10-23 12:54:34 -05:00
|
|
|
match tuple() { //~ HELP consider `await`ing on the `Future`
|
2021-12-15 17:16:21 -06:00
|
|
|
//~^ NOTE this expression has type `impl Future<Output = Tuple>`
|
2020-08-20 05:42:08 -05:00
|
|
|
Tuple(_) => {} //~ ERROR mismatched types
|
2023-02-10 12:03:54 -06:00
|
|
|
//~^ NOTE expected future, found `Tuple`
|
2021-11-16 18:16:23 -06:00
|
|
|
//~| NOTE expected opaque type `impl Future<Output = Tuple>`
|
2020-08-20 05:42:08 -05:00
|
|
|
}
|
|
|
|
}
|
2020-05-30 09:57:12 -05:00
|
|
|
|
2020-05-06 05:43:56 -05:00
|
|
|
fn main() {}
|