//! Test for #145784 as it relates to format arguments: arguments to macros such as `println!` //! should obey normal temporary scoping rules. //@ revisions: e2021 e2024 //@ [e2021] check-pass //@ [e2021] edition: 2021 //@ [e2024] edition: 2024 fn temp() {} fn main() { // In Rust 2024, block tail expressions are temporary scopes, so the result of `temp()` is // dropped after evaluating `&temp()`. println!("{:?}", { &temp() }); //[e2024]~^ ERROR: temporary value dropped while borrowed [E0716] // In Rust 1.89, `format_args!` extended the lifetime of all extending expressions in its // arguments when provided with two or more arguments. This caused the result of `temp()` to // outlive the result of the block, making this compile. println!("{:?}{:?}", { &temp() }, ()); //[e2024]~^ ERROR: temporary value dropped while borrowed [E0716] }