A reference to a local variable was returned.
Erroneous code example:
#![allow(unused)]
fn main() {
fn get_dangling_reference() -> &'static i32 {
let x = 0;
&x
}
} #![allow(unused)]
fn main() {
use std::slice::Iter;
fn get_dangling_iterator<'a>() -> Iter<'a, i32> {
let v = vec![1, 2, 3];
v.iter()
}
} Local variables, function parameters and temporaries are all dropped before the end of the function body. A returned reference (or struct containing a reference) to such a dropped value would immediately be invalid. Therefore it is not allowed to return such a reference.
Consider returning a value that takes ownership of local data instead of referencing it:
#![allow(unused)]
fn main() {
use std::vec::IntoIter;
fn get_integer() -> i32 {
let x = 0;
x
}
fn get_owned_iterator() -> IntoIter<i32> {
let v = vec![1, 2, 3];
v.into_iter()
}
}
© 2010 The Rust Project Developers
Licensed under the Apache License, Version 2.0 or the MIT license, at your option.
https://doc.rust-lang.org/error_codes/E0515.html