mirror of
https://github.com/rust-lang/rust.git
synced 2025-10-03 02:40:40 +00:00

`non_local_bounds` would only find non local bounds that strictly bound a given region, but it's possible that a local region is equated to 'static when showing a type referencing a locally bound lifetime, such as `dyn Any + 'a` in the tests added, is well-formed. In this case we should return 'static.
23 lines
949 B
Rust
23 lines
949 B
Rust
// 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() {}
|