mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 14:55:26 +00:00
47 lines
1.2 KiB
Rust
47 lines
1.2 KiB
Rust
// This is a test for the new temporary lifetime behaviour as implemented for RFC 3606.
|
|
// In essence, with #3606 we can write the following variable initialisation without
|
|
// a borrow checking error because the temporary lifetime is automatically extended.
|
|
// ```rust
|
|
// let x = if condition() {
|
|
// &something()
|
|
// } else {
|
|
// &something_else()
|
|
// };
|
|
// ```
|
|
// More details can be found in https://github.com/rust-lang/rfcs/pull/3606
|
|
|
|
//@ run-pass
|
|
//@ check-run-results
|
|
//@ revisions: edition2021 edition2024
|
|
//@ [edition2021] edition: 2021
|
|
//@ [edition2024] edition: 2024
|
|
//@ [edition2024] compile-flags: -Z unstable-options
|
|
|
|
fn temp() -> (String, i32) {
|
|
(String::from("Hello"), 1)
|
|
}
|
|
|
|
fn main() {
|
|
let a = &temp();
|
|
let b = [(&temp(),)];
|
|
let c = &temp().0;
|
|
let d = &temp().0[..];
|
|
let e = {
|
|
let _ = 123;
|
|
&(*temp().0)[..]
|
|
};
|
|
let f = if true { &temp() } else { &temp() };
|
|
let g = match true {
|
|
true => &temp(),
|
|
false => {
|
|
let _ = 123;
|
|
&temp()
|
|
}
|
|
};
|
|
let h = match temp() {
|
|
// The {} moves the value, making a new temporary.
|
|
owned_non_temporary => &{ owned_non_temporary },
|
|
};
|
|
println!("{a:?} {b:?} {c:?} {d:?} {e:?} {f:?} {g:?} {h:?}");
|
|
}
|