| // rustfmt-edition: 2018 |
| |
| #![feature(ergonomic_clones)] |
| |
| mod closure_syntax { |
| fn ergonomic_clone_closure_no_captures() -> i32 { |
| let cl = use || { |
| 1 |
| }; |
| cl() |
| } |
| |
| fn ergonomic_clone_closure_move() -> String { |
| let s = String::from("hi"); |
| |
| let cl = use || { |
| s |
| }; |
| cl() |
| } |
| |
| fn ergonomic_clone_closure_use_cloned() -> Foo { |
| let f = Foo; |
| |
| let f1 = use || { |
| f |
| }; |
| |
| let f2 = use || { |
| f |
| }; |
| |
| f |
| } |
| |
| fn ergonomic_clone_closure_copy() -> i32 { |
| let i = 1; |
| |
| let i1 = use || { |
| i |
| }; |
| |
| let i2 = use || { |
| i |
| }; |
| |
| i |
| } |
| |
| fn nested() { |
| let a = Box::new(Foo); |
| foo(use || { foo(use || { work(a) }) }); |
| let x = use || { use || { Foo } }; |
| let _y = x(); |
| } |
| |
| fn with_binders() { |
| for<'a> use || -> () {}; |
| } |
| } |
| |
| mod dotuse { |
| fn basic_test(x: i32) -> i32 { |
| x.use |
| .use |
| .abs() |
| } |
| |
| fn do_not_move_test(x: Foo) -> Foo { |
| let s = x.use; |
| x |
| } |
| } |