| #[derive(Clone)] |
| enum Either { |
| One(X), |
| Two(X), |
| } |
| |
| #[derive(Clone)] |
| struct X(Y); |
| |
| #[derive(Clone)] |
| struct Y; |
| |
| fn consume_fn<F: Fn()>(_f: F) { } |
| |
| fn consume_fnmut<F: FnMut()>(_f: F) { } |
| |
| pub fn main() { } |
| |
| fn move_into_fn() { |
| let e = Either::One(X(Y)); |
| let mut em = Either::One(X(Y)); |
| |
| let x = X(Y); |
| |
| // move into Fn |
| |
| consume_fn(|| { |
| let X(_t) = x; |
| //~^ ERROR cannot move |
| //~| HELP consider borrowing here |
| if let Either::One(_t) = e { } |
| //~^ ERROR cannot move |
| //~| HELP consider borrowing here |
| while let Either::One(_t) = e { } |
| //~^ ERROR cannot move |
| //~| HELP consider borrowing here |
| match e { |
| //~^ ERROR cannot move |
| //~| HELP consider borrowing here |
| Either::One(_t) |
| | Either::Two(_t) => (), |
| } |
| match e { |
| //~^ ERROR cannot move |
| //~| HELP consider borrowing here |
| Either::One(_t) => (), |
| Either::Two(ref _t) => (), |
| // FIXME: should suggest removing `ref` too |
| } |
| |
| let X(mut _t) = x; |
| //~^ ERROR cannot move |
| //~| HELP consider borrowing here |
| if let Either::One(mut _t) = em { } |
| //~^ ERROR cannot move |
| //~| HELP consider borrowing here |
| while let Either::One(mut _t) = em { } |
| //~^ ERROR cannot move |
| //~| HELP consider borrowing here |
| match em { |
| //~^ ERROR cannot move |
| //~| HELP consider borrowing here |
| Either::One(mut _t) |
| | Either::Two(mut _t) => (), |
| } |
| match em { |
| //~^ ERROR cannot move |
| //~| HELP consider borrowing here |
| Either::One(mut _t) => (), |
| Either::Two(ref _t) => (), |
| // FIXME: should suggest removing `ref` too |
| } |
| }); |
| } |
| |
| fn move_into_fnmut() { |
| let e = Either::One(X(Y)); |
| let mut em = Either::One(X(Y)); |
| |
| let x = X(Y); |
| |
| // move into FnMut |
| |
| consume_fnmut(|| { |
| let X(_t) = x; |
| //~^ ERROR cannot move |
| //~| HELP consider borrowing here |
| if let Either::One(_t) = e { } |
| //~^ ERROR cannot move |
| //~| HELP consider borrowing here |
| while let Either::One(_t) = e { } |
| //~^ ERROR cannot move |
| //~| HELP consider borrowing here |
| match e { |
| //~^ ERROR cannot move |
| //~| HELP consider borrowing here |
| Either::One(_t) |
| | Either::Two(_t) => (), |
| } |
| match e { |
| //~^ ERROR cannot move |
| //~| HELP consider borrowing here |
| Either::One(_t) => (), |
| Either::Two(ref _t) => (), |
| // FIXME: should suggest removing `ref` too |
| } |
| |
| let X(mut _t) = x; |
| //~^ ERROR cannot move |
| //~| HELP consider borrowing here |
| if let Either::One(mut _t) = em { } |
| //~^ ERROR cannot move |
| //~| HELP consider borrowing here |
| while let Either::One(mut _t) = em { } |
| //~^ ERROR cannot move |
| //~| HELP consider borrowing here |
| match em { |
| //~^ ERROR cannot move |
| //~| HELP consider borrowing here |
| Either::One(mut _t) |
| | Either::Two(mut _t) => (), |
| } |
| match em { |
| //~^ ERROR cannot move |
| //~| HELP consider borrowing here |
| Either::One(mut _t) => (), |
| Either::Two(ref _t) => (), |
| // FIXME: should suggest removing `ref` too |
| } |
| match em { |
| //~^ ERROR cannot move |
| //~| HELP consider borrowing here |
| Either::One(mut _t) => (), |
| Either::Two(ref mut _t) => (), |
| // FIXME: should suggest removing `ref` too |
| } |
| }); |
| } |