return reinterpret_cast<a>( reinterpret_cast<Address>(p) + d);
}
+template< typename T >
+T access_once(T const &a)
+{ return static_cast<T const volatile &>(a); }
+
template< typename T >
class Static_object
{
{ _v = o._v; return *static_cast<Target*>(this); }
Value value() const { return _v; }
+ Value value() const volatile { return _v; }
void set_value(Value v) { _v = v; }
bool operator < (Target const &o) const { return _v < o._v; }
explicit Page_addr(Address a) : B(a) {}
+ Page_addr(Page_addr const volatile &o) : B(o.value()) {}
+ Page_addr(Page_addr const &o) : B(o.value()) {}
+
+
Page_addr() {}