error[E0106]: missing lifetime specifiers --> $DIR/missing-lt-for-hrtb.rs:2:32 | LL | struct S<'a>(&'a dyn Fn(&X) -> &X); | -- ^^ expected named lifetime parameter | | | expected named lifetime parameter | = help: this function's return type contains a borrowed value, but the signature does not say which one of argument 1's 2 lifetimes it is borrowed from help: consider using the `'a` lifetime | LL | struct S<'a>(&'a dyn Fn(&X) -> &'a X<'a>); | ++ ++++ error[E0106]: missing lifetime specifiers --> $DIR/missing-lt-for-hrtb.rs:4:40 | LL | struct V<'a>(&'a dyn for<'b> Fn(&X) -> &X); | -- ^^ expected named lifetime parameter | | | expected named lifetime parameter | = help: this function's return type contains a borrowed value, but the signature does not say which one of argument 1's 2 lifetimes it is borrowed from note: these named lifetimes are available to use --> $DIR/missing-lt-for-hrtb.rs:4:10 | LL | struct V<'a>(&'a dyn for<'b> Fn(&X) -> &X); | ^^ ^^ help: consider using one of the available lifetimes here | LL | struct V<'a>(&'a dyn for<'b> Fn(&X) -> &'lifetime X<'lifetime>); | +++++++++ +++++++++++ error: lifetime may not live long enough --> $DIR/missing-lt-for-hrtb.rs:10:9 | LL | let x = S(&|x| { | -- return type of closure is &'2 X<'_> | | | has type `&'1 X<'_>` LL | println!("hi"); LL | x | ^ returning this value requires that `'1` must outlive `'2` error: lifetime may not live long enough --> $DIR/missing-lt-for-hrtb.rs:10:9 | LL | let x = S(&|x| { | -- return type of closure is &X<'4> | | | has type `&X<'3>` LL | println!("hi"); LL | x | ^ returning this value requires that `'3` must outlive `'4` error: aborting due to 4 previous errors For more information about this error, try `rustc --explain E0106`.