//@ compile-flags: -Znext-solver //@ 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( #[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( #[coroutine] |_: A| { let _: A = yield B; C }, ) }