Error code E0495

Note: this error code is no longer emitted by the compiler.

A lifetime cannot be determined in the given situation.

Erroneous code example:

#![allow(unused)]
fn main() {
fn transmute_lifetime<'a, 'b, T>(t: &'a (T,)) -> &'b T {
    match (&t,) { // error!
        ((u,),) => u,
    }
}

let y = Box::new((42,));
let x = transmute_lifetime(&y);
}

In this code, you have two ways to solve this issue:

  1. Enforce that 'a lives at least as long as 'b.
  2. Use the same lifetime requirement for both input and output values.

So for the first solution, you can do it by replacing 'a with 'a: 'b:

#![allow(unused)]
fn main() {
fn transmute_lifetime<'a: 'b, 'b, T>(t: &'a (T,)) -> &'b T {
    match (&t,) { // ok!
        ((u,),) => u,
    }
}
}

In the second you can do it by simply removing 'b so they both use 'a:

#![allow(unused)]
fn main() {
fn transmute_lifetime<'a, T>(t: &'a (T,)) -> &'a T {
    match (&t,) { // ok!
        ((u,),) => u,
    }
}
}