@@ -262,97 +262,6 @@ match PrintOnDrop("Matched value in final expression") {
262262}
263263```
264264
265- #### Changes to temporary scopes by Edition 2024
266-
267- Edition 2024 introduces two changes to the language regarding temporary scopes.
268- First, temporary values generated from evaluating the pattern-matching condition
269- of ` if let ` will be dropped earlier in general.
270-
271- ``` rust,edition2024
272- struct Droppy(u8);
273- impl Droppy {
274- fn get(&self) -> Option<&u8> {
275- Some(&self.0)
276- }
277- }
278- impl Drop for Droppy {
279- fn drop(&mut self) {
280- println!("drop({})", self.0);
281- }
282- }
283-
284- fn call(x: &u8, y: u8, z: &u8) {
285- println!("call with {x} {y} {z}");
286- }
287-
288- let x1 = 0;
289- let x2 = 3;
290-
291- call(
292- if let Some(x) = Droppy(0).get() {
293- println!("if let consequence");
294- &x1
295- } else {
296- &x2
297- },
298- {
299- let y = Droppy(1);
300- *y.get().unwrap()
301- },
302- Droppy(2).get().unwrap()
303- );
304- println!("call ended");
305- ```
306-
307- This program will print the following.
308-
309- ``` text
310- if let consequence
311- drop(0)
312- drop(1)
313- call with 0 1 2
314- drop(2)
315- call ended
316- ```
317-
318- In other words, ` Droppy(0) ` is dropped before ` Droppy(1) ` because its temporary scope is
319- limited by Edition 2024 to the proper end of the ` if let ` expression.
320-
321- Second, temporary values generated from evaluating the tail expression of a block
322- or a function body will be dropped earlier than the local variable bindings.
323- The following example demonstrates the Edition 2024 order of events that values
324- and local variables are dropped.
325-
326- ``` rust,edition2024
327- struct Droppy(u8);
328- impl Droppy {
329- fn get(&self) -> Option<&u8> {
330- Some(&self.0)
331- }
332- }
333- impl Drop for Droppy {
334- fn drop(&mut self) {
335- println!("drop({})", self.0);
336- }
337- }
338-
339- fn call() -> u8 {
340- let x = Droppy(0);
341- *x.get() + *Droppy(1).get()
342- }
343-
344- call();
345- ```
346-
347- The print-out from this program will be the following.
348-
349- ``` text
350- drop(1)
351- drop(0)
352- ```
353-
354- In other words, ` Droppy(1) ` is dropped earlier than ` x ` .
355-
356265### Operands
357266
358267r[ destructors.scope.operands]
0 commit comments