3 #![feature(box_syntax)]
5 struct DroppableStruct;
7 DroppableVariant1, DroppableVariant2
10 static mut DROPPED: bool = false;
12 impl Drop for DroppableStruct {
14 unsafe { DROPPED = true; }
17 impl Drop for DroppableEnum {
19 unsafe { DROPPED = true; }
23 trait MyTrait { fn dummy(&self) { } }
24 impl MyTrait for Box<DroppableStruct> {}
25 impl MyTrait for Box<DroppableEnum> {}
27 struct Whatever { w: Box<dyn MyTrait+'static> }
29 fn new(w: Box<dyn MyTrait+'static>) -> Whatever {
36 let f: Box<_> = box DroppableStruct;
37 let _a = Whatever::new(box f as Box<dyn MyTrait>);
39 assert!(unsafe { DROPPED });
40 unsafe { DROPPED = false; }
42 let f: Box<_> = box DroppableEnum::DroppableVariant1;
43 let _a = Whatever::new(box f as Box<dyn MyTrait>);
45 assert!(unsafe { DROPPED });