Can we just have `Volatile<T>` with `priv data: T`, using the same technique as `VolatileInt` `VolatileBool`? (And then they would just be `Volatile<int>` and `Volatile<bool>`, etc.)

I guess having `VolatilePtr<T>` too would be ok for external pointers, but...