
Chris Thomasson wrote:
Here is how I define rules for my atomic<T>:
Can't use any constructors, destructors, base classes, virtual functions, or anything else that violates POD requirements.
Can't use any operators
Hmm, what is your rationale for this choice? I would have expected that you will need the POD requirements only for type T, not for atomic<T>.
Atomic operation API must have static interface that operates on pointers to T as the destination of any operation. Usage is like:
So, why then wrap as a class at all? Why not simply templated global functions? What I think is more important than making atomic<T> a POD, is making atomic<T> fail to compile if 1) sizeof(T) != sizeof(atomic_t) 2) alignment of T != required alignment of atomic_t Where atomic_t is a type that is atomic on the given platform/compiler. Roland