#![feature(box_patterns)] use std::ops::Add; #[derive(Clone)] struct Foo(Box); impl Add for Foo { type Output = Foo; fn add(self, f: Foo) -> Foo { let Foo(box i) = self; let Foo(box j) = f; Foo(Box::new(i + j)) } } fn main() { let x = Foo(Box::new(3)); let _y = {x} + x.clone(); // the `{x}` forces a move to occur //~^ ERROR borrow of moved value: `x` }