error[E0521]: borrowed data escapes outside of method --> $DIR/ice-on-non-ref-sig-ty.rs:13:9 | LL | impl<'a> W<'a> for &'static () { | -- lifetime `'a` defined here LL | fn g(self, x: &'a T) -> &'static T { | ---- - `x` is a reference that is only valid in the method body | | | `self` declared here, outside of the method body LL | f(&self, x) | ^^^^^^^^^^^ | | | `x` escapes the method body here | argument requires that `'a` must outlive `'static` error[E0597]: `self` does not live long enough --> $DIR/ice-on-non-ref-sig-ty.rs:13:11 | LL | impl<'a> W<'a> for &'static () { | ------- has lifetime `'static` LL | fn g(self, x: &'a T) -> &'static T { | ------- also has lifetime `'static` LL | f(&self, x) | ^^^^^ `self` would have to be valid for `'static`... ... LL | } | - ...but `self` will be dropped here, when the function `g` returns | = help: use data from the highlighted arguments which match the `'static` lifetime of the return type = note: functions cannot return a borrow to data owned within the function's scope, functions can only return borrows to data passed as arguments = note: to learn more, visit error: aborting due to 2 previous errors Some errors have detailed explanations: E0521, E0597. For more information about an error, try `rustc --explain E0521`.