error[E0515]: cannot return reference to local variable `var`
error[E0515]: cannot return value referencing local variable `var`
error[E0515]: cannot return reference to function parameter `arg`
error[E0515]: cannot return value referencing function parameter `arg`
error[E0515]: cannot return reference to temporary value
error[E0515]: cannot return value referencing temporary value
関数が参照型を戻す場合、参照先は関数からの復帰後も有効でなければならない。
そのため、ローカル変数、関数の引数、一時値、これらは戻り値に包含できない。
以下では、戻り値がローカル変数への参照である。
fn test() -> &'static i32 {
let var = 0;
&var
}
error[E0515]: cannot return reference to local variable `var` --> src\lib.rs:3:5 | 3 | &var | ^^^^ returns a reference to data owned by the current function
以下では、戻り値がローカル変数への参照を包含している。
fn test() -> Box<&'static i32> {
let var = 0;
Box::new(&var)
}
error[E0515]: cannot return value referencing local variable `var` --> src\lib.rs:3:5 | 3 | Box::new(&var) | ^^^^^^^^^----^ | | | | | `var` is borrowed here | returns a value referencing data owned by the current function
以下では、戻り値が引数への参照である。
fn test(arg: i32) -> &'static i32 {
&arg
}
error[E0515]: cannot return reference to function parameter `arg` --> src\lib.rs:2:5 | 2 | &arg | ^^^^ returns a reference to data owned by the current function
以下では、戻り値が引数への参照を包含している。
fn test(arg: i32) -> Box<&'static i32> {
Box::new(&arg)
}
error[E0515]: cannot return value referencing function parameter `arg` --> src\lib.rs:2:5 | 2 | Box::new(&arg) | ^^^^^^^^^----^ | | | | | `arg` is borrowed here | returns a value referencing data owned by the current function
以下では、戻り値に一時値への参照である。
fn test(arg: i32) -> &'static i32 {
&(arg + 1)
}
error[E0515]: cannot return reference to temporary value --> src\lib.rs:2:5 | 2 | &(arg + 1) | ^--------- | || | |temporary value created here | returns a reference to data owned by the current function
以下では、戻り値が一時値への参照を包含している。
fn test(arg: i32) -> Box<&'static i32> {
Box::new(&(arg + 1))
}
error[E0515]: cannot return value referencing temporary value --> src\lib.rs:2:5 | 2 | Box::new(&(arg + 1)) | ^^^^^^^^^^---------^ | | | | | temporary value created here | returns a value referencing data owned by the current function