error[E0382]: use of moved value: `x` --> $DIR/issue-34721.rs:27:9 | LL | pub fn baz(x: T) -> T { | - move occurs because `x` has type `T`, which does not implement the `Copy` trait LL | if 0 == 1 { LL | bar::bar(x.zero()) | ------ `x` moved due to this method call LL | } else { LL | x.zero() | ------ `x` moved due to this method call LL | }; LL | x.zero() | ^ value used here after move | note: `Foo::zero` takes ownership of the receiver `self`, which moves `x` --> $DIR/issue-34721.rs:4:13 | LL | fn zero(self) -> Self; | ^^^^ help: consider further restricting this bound | LL | pub fn baz(x: T) -> T { | ++++++ error: aborting due to 1 previous error For more information about this error, try `rustc --explain E0382`.