2 #![feature(generators, generator_trait)]
4 use std::future::Future;
5 use std::ops::Generator;
8 fn returns_async_block() -> impl Future<Output = ()> {
11 fn returns_generator() -> impl Generator<(), Yield = (), Return = ()> {
17 fn takes_future(_f: impl Future<Output = ()>) {}
18 fn takes_generator<ResumeTy>(_g: impl Generator<ResumeTy, Yield = (), Return = ()>) {}
22 takes_future(async_fn());
23 takes_future(returns_async_block());
24 takes_future(async {});
25 takes_generator(returns_generator());
30 // async futures are not generators:
31 takes_generator(async_fn());
32 //~^ ERROR the trait bound
33 takes_generator(returns_async_block());
34 //~^ ERROR the trait bound
35 takes_generator(async {});
36 //~^ ERROR the trait bound
38 // generators are not futures:
39 takes_future(returns_generator());
40 //~^ ERROR is not a future
42 //~^ ERROR is not a future