I believe that the key aspect of this is whether it is safe or not. It is unsafe to mutate data behind an `&` pointer, but it is safe to not do so. You can do the same in normal rust code:

```rust
let a = 2;
let b = &a;
unsafe { *(&a as *int as *mut int) = 4; }
println!("{}", *b);
```