error[E0507]: cannot move out of `x.0`, as `x` is a captured variable in an `Fn` closure
  --> $DIR/move-into-closure.rs:28:21
   |
LL |     let x = X(Y);
   |         - captured outer variable
...
LL |     consume_fn(|| {
   |                -- captured by this `Fn` closure
LL |         let X(_t) = x;
   |               --    ^
   |               |
   |               data moved here
   |               move occurs because `_t` has type `Y`, which does not implement the `Copy` trait
   |
help: consider borrowing here
   |
LL |         let X(_t) = &x;
   |                     +

error[E0507]: cannot move out of `e.0`, as `e` is a captured variable in an `Fn` closure
  --> $DIR/move-into-closure.rs:31:34
   |
LL |     let e = Either::One(X(Y));
   |         - captured outer variable
...
LL |     consume_fn(|| {
   |                -- captured by this `Fn` closure
...
LL |         if let Either::One(_t) = e { }
   |                            --    ^
   |                            |
   |                            data moved here
   |                            move occurs because `_t` has type `X`, which does not implement the `Copy` trait
   |
help: consider borrowing here
   |
LL |         if let Either::One(_t) = &e { }
   |                                  +

error[E0507]: cannot move out of `e.0`, as `e` is a captured variable in an `Fn` closure
  --> $DIR/move-into-closure.rs:34:37
   |
LL |     let e = Either::One(X(Y));
   |         - captured outer variable
...
LL |     consume_fn(|| {
   |                -- captured by this `Fn` closure
...
LL |         while let Either::One(_t) = e { }
   |                               --    ^
   |                               |
   |                               data moved here
   |                               move occurs because `_t` has type `X`, which does not implement the `Copy` trait
   |
help: consider borrowing here
   |
LL |         while let Either::One(_t) = &e { }
   |                                     +

error[E0507]: cannot move out of `e.0`, as `e` is a captured variable in an `Fn` closure
  --> $DIR/move-into-closure.rs:37:15
   |
LL |     let e = Either::One(X(Y));
   |         - captured outer variable
...
LL |     consume_fn(|| {
   |                -- captured by this `Fn` closure
...
LL |         match e {
   |               ^
...
LL |             Either::One(_t)
   |                         --
   |                         |
   |                         data moved here
   |                         move occurs because `_t` has type `X`, which does not implement the `Copy` trait
   |
help: consider borrowing here
   |
LL |         match &e {
   |               +

error[E0507]: cannot move out of `e.0`, as `e` is a captured variable in an `Fn` closure
  --> $DIR/move-into-closure.rs:43:15
   |
LL |     let e = Either::One(X(Y));
   |         - captured outer variable
...
LL |     consume_fn(|| {
   |                -- captured by this `Fn` closure
...
LL |         match e {
   |               ^
...
LL |             Either::One(_t) => (),
   |                         --
   |                         |
   |                         data moved here
   |                         move occurs because `_t` has type `X`, which does not implement the `Copy` trait
   |
help: consider borrowing here
   |
LL |         match &e {
   |               +

error[E0507]: cannot move out of `x.0`, as `x` is a captured variable in an `Fn` closure
  --> $DIR/move-into-closure.rs:51:25
   |
LL |     let x = X(Y);
   |         - captured outer variable
...
LL |     consume_fn(|| {
   |                -- captured by this `Fn` closure
...
LL |         let X(mut _t) = x;
   |               ------    ^
   |               |
   |               data moved here
   |               move occurs because `_t` has type `Y`, which does not implement the `Copy` trait
   |
help: consider borrowing here
   |
LL |         let X(mut _t) = &x;
   |                         +

error[E0507]: cannot move out of `em.0`, as `em` is a captured variable in an `Fn` closure
  --> $DIR/move-into-closure.rs:54:38
   |
LL |     let mut em = Either::One(X(Y));
   |         ------ captured outer variable
...
LL |     consume_fn(|| {
   |                -- captured by this `Fn` closure
...
LL |         if let Either::One(mut _t) = em { }
   |                            ------    ^^
   |                            |
   |                            data moved here
   |                            move occurs because `_t` has type `X`, which does not implement the `Copy` trait
   |
help: consider borrowing here
   |
LL |         if let Either::One(mut _t) = &em { }
   |                                      +

error[E0507]: cannot move out of `em.0`, as `em` is a captured variable in an `Fn` closure
  --> $DIR/move-into-closure.rs:57:41
   |
LL |     let mut em = Either::One(X(Y));
   |         ------ captured outer variable
...
LL |     consume_fn(|| {
   |                -- captured by this `Fn` closure
...
LL |         while let Either::One(mut _t) = em { }
   |                               ------    ^^
   |                               |
   |                               data moved here
   |                               move occurs because `_t` has type `X`, which does not implement the `Copy` trait
   |
help: consider borrowing here
   |
LL |         while let Either::One(mut _t) = &em { }
   |                                         +

error[E0507]: cannot move out of `em.0`, as `em` is a captured variable in an `Fn` closure
  --> $DIR/move-into-closure.rs:60:15
   |
LL |     let mut em = Either::One(X(Y));
   |         ------ captured outer variable
...
LL |     consume_fn(|| {
   |                -- captured by this `Fn` closure
...
LL |         match em {
   |               ^^
...
LL |             Either::One(mut _t)
   |                         ------
   |                         |
   |                         data moved here
   |                         move occurs because `_t` has type `X`, which does not implement the `Copy` trait
   |
help: consider borrowing here
   |
LL |         match &em {
   |               +

error[E0507]: cannot move out of `em.0`, as `em` is a captured variable in an `Fn` closure
  --> $DIR/move-into-closure.rs:66:15
   |
LL |     let mut em = Either::One(X(Y));
   |         ------ captured outer variable
...
LL |     consume_fn(|| {
   |                -- captured by this `Fn` closure
...
LL |         match em {
   |               ^^
...
LL |             Either::One(mut _t) => (),
   |                         ------
   |                         |
   |                         data moved here
   |                         move occurs because `_t` has type `X`, which does not implement the `Copy` trait
   |
help: consider borrowing here
   |
LL |         match &em {
   |               +

error[E0507]: cannot move out of `x.0`, as `x` is a captured variable in an `FnMut` closure
  --> $DIR/move-into-closure.rs:85:21
   |
LL |     let x = X(Y);
   |         - captured outer variable
...
LL |     consume_fnmut(|| {
   |                   -- captured by this `FnMut` closure
LL |         let X(_t) = x;
   |               --    ^
   |               |
   |               data moved here
   |               move occurs because `_t` has type `Y`, which does not implement the `Copy` trait
   |
help: consider borrowing here
   |
LL |         let X(_t) = &x;
   |                     +

error[E0507]: cannot move out of `e.0`, as `e` is a captured variable in an `FnMut` closure
  --> $DIR/move-into-closure.rs:88:34
   |
LL |     let e = Either::One(X(Y));
   |         - captured outer variable
...
LL |     consume_fnmut(|| {
   |                   -- captured by this `FnMut` closure
...
LL |         if let Either::One(_t) = e { }
   |                            --    ^
   |                            |
   |                            data moved here
   |                            move occurs because `_t` has type `X`, which does not implement the `Copy` trait
   |
help: consider borrowing here
   |
LL |         if let Either::One(_t) = &e { }
   |                                  +

error[E0507]: cannot move out of `e.0`, as `e` is a captured variable in an `FnMut` closure
  --> $DIR/move-into-closure.rs:91:37
   |
LL |     let e = Either::One(X(Y));
   |         - captured outer variable
...
LL |     consume_fnmut(|| {
   |                   -- captured by this `FnMut` closure
...
LL |         while let Either::One(_t) = e { }
   |                               --    ^
   |                               |
   |                               data moved here
   |                               move occurs because `_t` has type `X`, which does not implement the `Copy` trait
   |
help: consider borrowing here
   |
LL |         while let Either::One(_t) = &e { }
   |                                     +

error[E0507]: cannot move out of `e.0`, as `e` is a captured variable in an `FnMut` closure
  --> $DIR/move-into-closure.rs:94:15
   |
LL |     let e = Either::One(X(Y));
   |         - captured outer variable
...
LL |     consume_fnmut(|| {
   |                   -- captured by this `FnMut` closure
...
LL |         match e {
   |               ^
...
LL |             Either::One(_t)
   |                         --
   |                         |
   |                         data moved here
   |                         move occurs because `_t` has type `X`, which does not implement the `Copy` trait
   |
help: consider borrowing here
   |
LL |         match &e {
   |               +

error[E0507]: cannot move out of `e.0`, as `e` is a captured variable in an `FnMut` closure
  --> $DIR/move-into-closure.rs:100:15
   |
LL |     let e = Either::One(X(Y));
   |         - captured outer variable
...
LL |     consume_fnmut(|| {
   |                   -- captured by this `FnMut` closure
...
LL |         match e {
   |               ^
...
LL |             Either::One(_t) => (),
   |                         --
   |                         |
   |                         data moved here
   |                         move occurs because `_t` has type `X`, which does not implement the `Copy` trait
   |
help: consider borrowing here
   |
LL |         match &e {
   |               +

error[E0507]: cannot move out of `x.0`, as `x` is a captured variable in an `FnMut` closure
  --> $DIR/move-into-closure.rs:108:25
   |
LL |     let x = X(Y);
   |         - captured outer variable
...
LL |     consume_fnmut(|| {
   |                   -- captured by this `FnMut` closure
...
LL |         let X(mut _t) = x;
   |               ------    ^
   |               |
   |               data moved here
   |               move occurs because `_t` has type `Y`, which does not implement the `Copy` trait
   |
help: consider borrowing here
   |
LL |         let X(mut _t) = &x;
   |                         +

error[E0507]: cannot move out of `em.0`, as `em` is a captured variable in an `FnMut` closure
  --> $DIR/move-into-closure.rs:111:38
   |
LL |     let mut em = Either::One(X(Y));
   |         ------ captured outer variable
...
LL |     consume_fnmut(|| {
   |                   -- captured by this `FnMut` closure
...
LL |         if let Either::One(mut _t) = em { }
   |                            ------    ^^
   |                            |
   |                            data moved here
   |                            move occurs because `_t` has type `X`, which does not implement the `Copy` trait
   |
help: consider borrowing here
   |
LL |         if let Either::One(mut _t) = &em { }
   |                                      +

error[E0507]: cannot move out of `em.0`, as `em` is a captured variable in an `FnMut` closure
  --> $DIR/move-into-closure.rs:114:41
   |
LL |     let mut em = Either::One(X(Y));
   |         ------ captured outer variable
...
LL |     consume_fnmut(|| {
   |                   -- captured by this `FnMut` closure
...
LL |         while let Either::One(mut _t) = em { }
   |                               ------    ^^
   |                               |
   |                               data moved here
   |                               move occurs because `_t` has type `X`, which does not implement the `Copy` trait
   |
help: consider borrowing here
   |
LL |         while let Either::One(mut _t) = &em { }
   |                                         +

error[E0507]: cannot move out of `em.0`, as `em` is a captured variable in an `FnMut` closure
  --> $DIR/move-into-closure.rs:117:15
   |
LL |     let mut em = Either::One(X(Y));
   |         ------ captured outer variable
...
LL |     consume_fnmut(|| {
   |                   -- captured by this `FnMut` closure
...
LL |         match em {
   |               ^^
...
LL |             Either::One(mut _t)
   |                         ------
   |                         |
   |                         data moved here
   |                         move occurs because `_t` has type `X`, which does not implement the `Copy` trait
   |
help: consider borrowing here
   |
LL |         match &em {
   |               +

error[E0507]: cannot move out of `em.0`, as `em` is a captured variable in an `FnMut` closure
  --> $DIR/move-into-closure.rs:123:15
   |
LL |     let mut em = Either::One(X(Y));
   |         ------ captured outer variable
...
LL |     consume_fnmut(|| {
   |                   -- captured by this `FnMut` closure
...
LL |         match em {
   |               ^^
...
LL |             Either::One(mut _t) => (),
   |                         ------
   |                         |
   |                         data moved here
   |                         move occurs because `_t` has type `X`, which does not implement the `Copy` trait
   |
help: consider borrowing here
   |
LL |         match &em {
   |               +

error[E0507]: cannot move out of `em.0`, as `em` is a captured variable in an `FnMut` closure
  --> $DIR/move-into-closure.rs:130:15
   |
LL |     let mut em = Either::One(X(Y));
   |         ------ captured outer variable
...
LL |     consume_fnmut(|| {
   |                   -- captured by this `FnMut` closure
...
LL |         match em {
   |               ^^
...
LL |             Either::One(mut _t) => (),
   |                         ------
   |                         |
   |                         data moved here
   |                         move occurs because `_t` has type `X`, which does not implement the `Copy` trait
   |
help: consider borrowing here
   |
LL |         match &em {
   |               +

error: aborting due to 21 previous errors

For more information about this error, try `rustc --explain E0507`.
