operator void *(void) const volatile {return load();}
void * operator=(void * v) volatile {store(v); return v;}
operator bool(void) const volatile {return load();}
bool operator=(bool v) volatile {store(v); return v;}
void update(id<string>& type,array<self>& atoms) { update(type,atoms.flatten<term>().me()); }
T * operator=(T * v) volatile {store(v); return v;}
self& operator =(auto value) { set(value); return *this; }
self& operator =(self& value) { set(value); return *this; }
atom(auto value) { set(value); }
atom(self& value) { set(value); }
operator T() { return get(); }