Error code E0637
'_ lifetime name or &T without an explicit lifetime name has been used
in an illegal place.
Erroneous code example:
#![allow(unused)] fn main() { fn underscore_lifetime<'_>(str1: &'_ str, str2: &'_ str) -> &'_ str { //^^ `'_` is a reserved lifetime name if str1.len() > str2.len() { str1 } else { str2 } } fn without_explicit_lifetime<T>() where T: Iterator<Item = &u32>, //^ `&` without an explicit lifetime name { } fn without_hrtb<T>() where T: Into<&u32>, //^ `&` without an explicit lifetime name { } }
First, '_ cannot be used as a lifetime identifier in some places
because it is a reserved for the anonymous lifetime. Second, &T
without an explicit lifetime name cannot also be used in some places.
To fix them, use a lowercase letter such as 'a, or a series
of lowercase letters such as 'foo. For more information about lifetime
identifier, see the book. For more information on using
the anonymous lifetime in Rust 2018, see the Rust 2018 blog post.
Corrected example:
#![allow(unused)] fn main() { fn underscore_lifetime<'a>(str1: &'a str, str2: &'a str) -> &'a str { if str1.len() > str2.len() { str1 } else { str2 } } fn without_explicit_lifetime<'a, T>() where T: Iterator<Item = &'a u32>, { } fn without_hrtb<T>() where T: for<'foo> Into<&'foo u32>, { } }