I don't think this one needs to be volatile: it's only moving the pointer around, not *writing* to the pointer (which is what is volatile).

If both the pointer and it's data are volatile, then that would be `Volatile<VolatilePtr<T>>`.

That said, I wonder if we actually need `VolatilePtr` and can just use `*mut Volatile<T>`?