Implement closure traits on `&T` when `T` implements them?

@CloudiDust This is what I mean by the O(n^2) thing:

trait NewFn {
    fn call(&self, u32);
}
impl<F: Fn(u32)> NewFn for F {
    fn call(&self, x: u32) { self(x); }
}
impl<'a, F: NewFn + ?Sized> NewFn for &'a F {
    fn call(&self, x: u32) { (**self).call(x); }
}

fn foo(f: &NewFn, n: u32) {
    if n != 0 { foo(&f, n - 1); }
    f.call(n);
}

fn main() {
    foo(&|_| {}, 40000);
}

playpen

This triggers a timeout on playpen even with -O2