blob: 37d7cfa6fb7a37aa20ebc991c91bc06812e20acd (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
// edition:2018
#![feature(generators, generator_trait)]
use std::future::Future;
use std::ops::Generator;
async fn async_fn() {}
fn returns_async_block() -> impl Future<Output = ()> {
async {}
}
fn returns_generator() -> impl Generator<(), Yield = (), Return = ()> {
|| {
let _: () = yield ();
}
}
fn takes_future(_f: impl Future<Output = ()>) {}
fn takes_generator<ResumeTy>(_g: impl Generator<ResumeTy, Yield = (), Return = ()>) {}
fn main() {
// okay:
takes_future(async_fn());
takes_future(returns_async_block());
takes_future(async {});
takes_generator(returns_generator());
takes_generator(|| {
let _: () = yield ();
});
// async futures are not generators:
takes_generator(async_fn());
//~^ ERROR the trait bound
takes_generator(returns_async_block());
//~^ ERROR the trait bound
takes_generator(async {});
//~^ ERROR the trait bound
// generators are not futures:
takes_future(returns_generator());
//~^ ERROR is not a future
takes_future(|ctx| {
//~^ ERROR is not a future
ctx = yield ();
});
}
|