Ok thanks. I'll implemented your suggestions.

1. How would the operation (load, get_ref, etc...) fail? Is it just surrounding the transmute invalidation?
2. Is there a standard way to detect if the `load`, `get_ref`, or `get_mut` operations don't succeed? i.e., the transmute has been invalidated or something.

Also, did you want me to extend the ability to work with straight values? For example:

```rust
struct Go { x: int }
VolatilePtr::new(55);
VolatilePtr::new([1,2,3]);
VolatilePtr::new(Go { x: 10 });
...
```