//@ known-bug: #117392 pub trait BorrowComposite { type Ref<'a> where Self: 'a; } impl BorrowComposite for () { type Ref<'a> = (); } pub trait Component { type Output; } impl Component for () { type Output = (); } struct Delay { _make: Make, } impl< Args: BorrowComposite, Make: for<'a> FnMut(Args::Ref<'a>) -> C, C: Component, > Component for Delay { type Output = C::Output; } pub fn delay< Args: BorrowComposite, Make: for<'a> FnMut(Args::Ref<'a>) -> C, C: Component, >( make: Make, ) -> impl Component { Delay { _make: make } } pub fn crash() -> impl Component<(), Output = ()> { delay(|()| delay(|()| ())) } pub fn main() {}