#![feature(type_alias_impl_trait)] //@ edition:2021 use std::future::Future; struct Connection { } trait Transaction { } struct TestTransaction<'conn> { conn: &'conn Connection } impl<'conn> Transaction for TestTransaction<'conn> { } struct Context { } type TransactionResult = Result; type TransactionFuture<'__, O> = impl '__ + Future>; //~^ ERROR unconstrained opaque type fn execute_transaction_fut<'f, F, O>( //~^ ERROR: item does not constrain f: F, ) -> impl FnOnce(&mut dyn Transaction) -> TransactionFuture<'_, O> where F: FnOnce(&mut dyn Transaction) -> TransactionFuture<'_, O> + 'f { f //~^ ERROR expected generic lifetime parameter, found `'_` } impl Context { async fn do_transaction( //~^ ERROR: item does not constrain &self, f: impl FnOnce(&mut dyn Transaction) -> TransactionFuture<'_, O> ) -> TransactionResult { //~^ ERROR expected generic lifetime parameter, found `'_` //~| ERROR: item does not constrain let mut conn = Connection {}; let mut transaction = TestTransaction { conn: &mut conn }; f(&mut transaction).await } } fn main() {}