blob: 95fdf63f893ec521674388b2cd3a0d2e7d9eaf04 [file] [log] [blame]
//@ 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() {}