Temporary Name @orlp @Noratrieb @BoxyUwU

#![allow(unreachable_code)]

struct PrintOnDrop(&'static str);
impl Drop for PrintOnDrop {
    fn drop(&mut self) {
        eprint!("{}", self.0);
    }
}

fn main() {
    owo();
    uwu();
}

fn owo() {
    (
        (PrintOnDrop("1"), PrintOnDrop("2"), PrintOnDrop("3")),
        return,
    );
}

fn uwu() {
    (PrintOnDrop("1"), PrintOnDrop("2"), PrintOnDrop("3"), return);
}
Solution
123321

When structs/tuples/arrays are dropped, they drop their constituent parts (e.g. fields, tuple elements, array elements) from first to last.

On the other hand, when exiting a scope in a function body, locals and temporaries are dropped in reverse definition order. In other words, temporaries/locals are dropped in order of youngest to oldest.

In fn owo there is a fully constructed value of type (PrintOnDrop, PrintOnDrop, PrintOnDrop). When exiting the function the tuple is dropped as a whole, dropping its first element, then second, and finally its third.

In fn uwu there is never a fully constructed tuple type, instead there are three temporaries of type PrintOnDrop on the stack. When exiting the function the temporaries on the stack are dropped in reverse definition order, starting from the most recently created, PrintOnDrop("3"), to oldest created, PrintOnDrop("1").