I learned all of this from Jim Blandy and Jason Orendorff’s book, Programming Rust.

Consider an enum with a single variant that holds a shared reference to str:

enum OperatingSystem<'a> {
    Unix(&'a str)
}

This lifetime is read as “OperatingSystem::Unix can live for any given lifetime ‘a”. That is, OperatingSystem::Unix may live until its referent is dropped.

The following lifetime is permissible since edition is dropped after OperatingSystem::Unix:

fn main() {
    let edition = String::from("7th edition");
    let os = OperatingSystem::Unix(&edition);

    match os {
        OperatingSystem::Unix(e) => println!("Unix -- {}", e),
    }
}

Conversely, the following will fail to compile since OperatingSystem::Unix outlives edition:

fn main() {
    let os: OperatingSystem;
    {
        let edition = String::from("7th edition");
        os = OperatingSystem::Unix(&edition);
    }

    match os {
        OperatingSystem::Unix(e) => println!("Unix -- {}", e),
    }
}