These interfaces don't quite make sense to me. You store `T` but you get back a `*T`. It looks like you can only store things that are word-sized or the transmute would be invalid.

These are supposed to be safe bindings, so I think an interface like this may make more sense:

```rust
impl<T> VolatilePtr<T> {
    pub fn new(ptr: ~T) -> VolatilePtr<T> { ... }
    pub fn store(&mut self, ptr: ~T) { ... }
    pub fn take(&mut self, ptr: ~T) -> Option<~T> { ... }
}
```