Error code E0261

An undeclared lifetime was used.

Erroneous code example:

#![allow(unused)]
fn main() {
// error, use of undeclared lifetime name `'a`
fn foo(x: &'a str) { }

struct Foo {
    // error, use of undeclared lifetime name `'a`
    x: &'a str,
}
}

These can be fixed by declaring lifetime parameters:

#![allow(unused)]
fn main() {
struct Foo<'a> {
    x: &'a str,
}

fn foo<'a>(x: &'a str) {}
}

Impl blocks declare lifetime parameters separately. You need to add lifetime parameters to an impl block if you're implementing a type that has a lifetime parameter of its own. For example:

#![allow(unused)]
fn main() {
struct Foo<'a> {
    x: &'a str,
}

// error,  use of undeclared lifetime name `'a`
impl Foo<'a> {
    fn foo<'a>(x: &'a str) {}
}
}

This is fixed by declaring the impl block like this:

#![allow(unused)]
fn main() {
struct Foo<'a> {
    x: &'a str,
}

// correct
impl<'a> Foo<'a> {
    fn foo(x: &'a str) {}
}
}