File tree Expand file tree Collapse file tree 2 files changed +23
-15
lines changed Expand file tree Collapse file tree 2 files changed +23
-15
lines changed Original file line number Diff line number Diff line change @@ -40,10 +40,21 @@ fn fn_once_closure_with_multiple_args() -> i64 {
40
40
}
41
41
}
42
42
43
- fn boxed ( f : Box < dyn FnOnce ( ) -> i32 > ) -> i32 {
43
+ fn boxed_fn_once ( f : Box < dyn FnOnce ( ) -> i32 > ) -> i32 {
44
44
f ( )
45
45
}
46
46
47
+ fn box_dyn ( ) {
48
+ let x: Box < dyn Fn ( i32 ) -> i32 > = Box :: new ( |x| x * 2 ) ;
49
+ assert_eq ! ( x( 21 ) , 42 ) ;
50
+ let mut i = 5 ;
51
+ {
52
+ let mut x: Box < dyn FnMut ( ) > = Box :: new ( || i *= 2 ) ;
53
+ x ( ) ; x ( ) ;
54
+ }
55
+ assert_eq ! ( i, 20 ) ;
56
+ }
57
+
47
58
fn fn_item_as_closure_trait_object ( ) {
48
59
fn foo ( ) { }
49
60
let f: & dyn Fn ( ) = & foo;
@@ -96,8 +107,9 @@ fn main() {
96
107
assert_eq ! ( crazy_closure( ) , ( 84 , 10 , 10 ) ) ;
97
108
assert_eq ! ( closure_arg_adjustment_problem( ) , 3 ) ;
98
109
assert_eq ! ( fn_once_closure_with_multiple_args( ) , 6 ) ;
99
- assert_eq ! ( boxed ( Box :: new( { let x = 13 ; move || x} ) ) , 13 ) ;
110
+ assert_eq ! ( boxed_fn_once ( Box :: new( { let x = 13 ; move || x} ) ) , 13 ) ;
100
111
112
+ box_dyn ( ) ;
101
113
fn_item_as_closure_trait_object ( ) ;
102
114
fn_item_with_args_as_closure_trait_object ( ) ;
103
115
fn_item_with_multiple_args_as_closure_trait_object ( ) ;
Original file line number Diff line number Diff line change 1
1
#![ feature( unsized_locals) ]
2
2
3
- fn ref_dyn ( ) {
3
+ fn ref_box_dyn ( ) {
4
4
struct Struct ( i32 ) ;
5
5
6
6
trait Trait {
@@ -17,22 +17,19 @@ fn ref_dyn() {
17
17
18
18
let y: & dyn Trait = & Struct ( 42 ) ;
19
19
y. method ( ) ;
20
+
20
21
let x: Foo < Struct > = Foo ( Struct ( 42 ) ) ;
21
22
let y: & Foo < dyn Trait > = & x;
22
23
y. 0 . method ( ) ;
23
- }
24
24
25
- fn box_dyn ( ) {
26
- let x: Box < dyn Fn ( i32 ) -> i32 > = Box :: new ( |x| x * 2 ) ;
27
- assert_eq ! ( x( 21 ) , 42 ) ;
28
- let mut i = 5 ;
29
- {
30
- let mut x: Box < dyn FnMut ( ) > = Box :: new ( || i *= 2 ) ;
31
- x ( ) ; x ( ) ;
32
- }
33
- assert_eq ! ( i, 20 ) ;
25
+ let y: Box < dyn Trait > = Box :: new ( Struct ( 42 ) ) ;
26
+ y. method ( ) ;
27
+
28
+ let y = & y;
29
+ y. method ( ) ;
34
30
}
35
31
32
+
36
33
fn box_box_trait ( ) {
37
34
struct DroppableStruct ;
38
35
@@ -130,8 +127,7 @@ fn unsized_dyn_autoderef() {
130
127
}
131
128
132
129
fn main ( ) {
133
- ref_dyn ( ) ;
134
- box_dyn ( ) ;
130
+ ref_box_dyn ( ) ;
135
131
box_box_trait ( ) ;
136
132
137
133
// "exotic" receivers
You can’t perform that action at this time.
0 commit comments