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