// compile-flags: -Ztrait-solver=next // edition: 2021 // revisions: pass fail //[pass] check-pass #![feature(coroutine_trait, coroutines)] use std::ops::Coroutine; struct A; struct B; struct C; fn needs_coroutine(_: impl Coroutine) {} #[cfg(fail)] fn main() { needs_coroutine(|| { //[fail]~^ ERROR Coroutine` is not satisfied //[fail]~| ERROR as Coroutine>::Yield == B` //[fail]~| ERROR as Coroutine>::Return == C` yield (); }); } #[cfg(pass)] fn main() { needs_coroutine(|_: A| { let _: A = yield B; C }) }