about summary refs log tree commit diff
path: root/tests/ui/borrowck/unconstrained-closure-lifetime-generic.rs
blob: 4fdf5470feac6b789d305ddad9c7a7ddaa873ace (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// Regression test for #122704
use std::any::Any;

pub struct Foo {
    bar: Box<dyn for<'a> Fn(&'a usize) -> Box<dyn Any + 'a>>,
}

impl Foo {
    pub fn ack<I>(&mut self, f: impl for<'a> Fn(&'a usize) -> Box<I>) {
        self.bar = Box::new(|baz| Box::new(f(baz)));
        //~^ ERROR the parameter type `impl for<'a> Fn(&'a usize) -> Box<I>` may not live long enough
        //~| ERROR the parameter type `impl for<'a> Fn(&'a usize) -> Box<I>` may not live long enough
        //~| ERROR the parameter type `impl for<'a> Fn(&'a usize) -> Box<I>` may not live long enough
        //~| ERROR the parameter type `impl for<'a> Fn(&'a usize) -> Box<I>` may not live long enough
        //~| ERROR the parameter type `I` may not live long enough
        //~| ERROR the parameter type `I` may not live long enough
        //~| ERROR the parameter type `I` may not live long enough
        //~| ERROR `f` does not live long enough
    }
}

fn main() {}