//@ 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); | |
} |