use std::marker::PhantomData; pub struct NfaBuilder<'brand> { brand: PhantomData<&'brand mut &'brand mut ()>, } impl NfaBuilder<'_> { pub fn with) -> R>(f: F) -> R { Brand::with(|brand| { f(Self { brand: brand.lt }) //~^ ERROR lifetime may not live long enough //~| ERROR lifetime may not live long enough }) } } #[derive(Clone, Copy)] pub struct Brand<'brand> { lt: PhantomData<&'brand mut &'brand mut ()>, } impl Brand<'_> { pub fn with) -> R>(f: F) -> R { f(Self { lt: PhantomData }) } } fn main() {}