| //@ run-pass | |
| struct X { | |
| a: isize | |
| } | |
| trait Changer : Sized { | |
| fn change(mut self) -> Self { | |
| self.set_to(55); | |
| self | |
| } | |
| fn change_again(mut self: Box<Self>) -> Box<Self> { | |
| self.set_to(45); | |
| self | |
| } | |
| fn set_to(&mut self, a: isize); | |
| } | |
| impl Changer for X { | |
| fn set_to(&mut self, a: isize) { | |
| self.a = a; | |
| } | |
| } | |
| pub fn main() { | |
| let x = X { a: 32 }; | |
| let new_x = x.change(); | |
| assert_eq!(new_x.a, 55); | |
| let x: Box<_> = Box::new(new_x); | |
| let new_x = x.change_again(); | |
| assert_eq!(new_x.a, 45); | |
| } |