I think a new keyword, something like `stable`, is needed for specifying that 
an argument passed to a trait function is guaranteed to be logically unchanged 
after the function call. For example:

trait Foo {
    fn foo(stable self);
}

impl Foo for int {
    fn foo(&self) {} // OK
}

impl Foo for uint {
    fn foo(self) {} // OK
}

impl Foo for Box<int> {
    fn foo(stable self) {} // OK (implicitly clones self)
}


fn main() {
    let x: Box<int> = box 42;
    x.foo(); // `x` is implicitly cloned
    x.foo(); // OK
}

_______________________________________________
Rust-dev mailing list
[email protected]
https://mail.mozilla.org/listinfo/rust-dev

Reply via email to