E0637 - Error codes index (original) (raw)
Error codes index
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>,
{
}
}