//@ run-pass struct A { a: Box } impl A { fn get(&self) -> i32 { *self.a } } fn foo(n: i32) -> i32 { let x = A { a: Box::new(n) }; let y = match x { A { a: v } if *v == 42 => v, _ => Box::new(0), }; *y } fn bar(n: i32) -> i32 { let x = A { a: Box::new(n) }; let y = match x { A { a: v } if x.get() == 42 => v, _ => Box::new(0), }; *y } fn baz(n: i32) -> i32 { let x = A { a: Box::new(n) }; let y = match x { A { a: v } if *v.clone() == 42 => v, _ => Box::new(0), }; *y } fn main() { assert_eq!(foo(107), 0); assert_eq!(foo(42), 42); assert_eq!(bar(107), 0); assert_eq!(bar(42), 42); assert_eq!(baz(107), 0); assert_eq!(baz(42), 42); }