| #![feature(coroutines, coroutine_trait, stmt_expr_attributes)] |
| fn returns_async_block() -> impl Future<Output = ()> { |
| fn returns_coroutine() -> impl Coroutine<(), Yield = (), Return = ()> { |
| fn takes_future(_f: impl Future<Output = ()>) {} |
| fn takes_coroutine<ResumeTy>(_g: impl Coroutine<ResumeTy, Yield = (), Return = ()>) {} |
| takes_future(async_fn()); |
| takes_future(returns_async_block()); |
| takes_coroutine(returns_coroutine()); |
| // async futures are not coroutines: |
| takes_coroutine(async_fn()); |
| //~^ ERROR the trait bound |
| takes_coroutine(returns_async_block()); |
| //~^ ERROR the trait bound |
| takes_coroutine(async {}); |
| //~^ ERROR the trait bound |
| // coroutines are not futures: |
| takes_future(returns_coroutine()); |
| //~^ ERROR is not a future |
| //~^ ERROR is not a future |