Currently, we can't write programs like this:
fn main() {
let mut x = ~1;
for int::range(0, 10) {|i|
let z <- x;
x = ~(*z * i);
}
}
At first glance this looks like it should be safe, since any time we move out of x, we also put something back in it. If this really is safe, we should allow it. If this isn't safe, could someone post an example that breaks?