A reference has a longer lifetime than the data it references. Erroneous code example: ```compile_fail,E0491 struct Foo<'a> { x: fn(&'a i32), } trait Trait<'a, 'b> { type Out; } impl<'a, 'b> Trait<'a, 'b> for usize { type Out = &'a Foo<'b>; // error! } ``` Here, the problem is that the compiler cannot be sure that the `'b` lifetime will live longer than `'a`, which should be mandatory in order to be sure that `Trait::Out` will always have a reference pointing to an existing type. So in this case, we just need to tell the compiler than `'b` must outlive `'a`: ``` struct Foo<'a> { x: fn(&'a i32), } trait Trait<'a, 'b> { type Out; } impl<'a, 'b: 'a> Trait<'a, 'b> for usize { // we added the lifetime enforcement type Out = &'a Foo<'b>; // it now works! } ```