#![feature(coroutines, coroutine_trait)] use std::ops::{Coroutine, CoroutineState}; fn foo() -> impl Coroutine { //~^ ERROR cannot resolve opaque type //~| NOTE recursive opaque type //~| NOTE in this expansion of desugaring of || { let mut gen = Box::pin(foo()); //~^ NOTE coroutine captures itself here let mut r = gen.as_mut().resume(()); while let CoroutineState::Yielded(v) = r { yield v; r = gen.as_mut().resume(()); } } } fn main() { foo(); }