use std::fmt::Debug; use std::marker::PhantomData; #[derive(Debug)] pub struct TransactionImpl<'db> { _marker: PhantomData<&'db ()>, } #[derive(Debug)] pub struct CursorImpl<'txn> { _marker: PhantomData<&'txn ()>, } pub trait Cursor<'txn> {} pub trait Transaction<'db>: Send + Sync + Debug + Sized { type Cursor<'tx>: Cursor<'tx> where 'db: 'tx, Self: 'tx; fn cursor<'tx>(&'tx self) -> Result, ()> where 'db: 'tx; } impl<'tx> Cursor<'tx> for CursorImpl<'tx> {} impl<'db> Transaction<'db> for TransactionImpl<'db> { type Cursor<'tx> = CursorImpl<'tx>; //~ ERROR lifetime bound not satisfied fn cursor<'tx>(&'tx self) -> Result, ()> where 'db: 'tx, { loop {} } } fn main() {}