I have given up on trying to achieve clean compilation at the highest warning levels. Getting clean compilation with default warning levels already is a challenge in a cross-platform environment with multiple different compilers, but compilation at -Wall level is IMO simply not worth it (unless maybe for people with too much time and nothing else to do...).
Now, for the reason why AtomicCounter is implemented the way it is: it's there simply to make the class easier to use as a replacement for an int-type counter. Example:
is much easier to read than: