... I think this should take `*mut T`, otherwise it *requires* the piece of data to be allocated on the heap, e.g. the following would not work.

```rust
extern { static mut foo: SomeType; }
unsafe fn get_foo() -> VolatilePtr<SomeType> { VolatilePtr::new(&mut foo) } 
```