Both existing answers are incorrect, and most comments too.
<cstdatomic> not a header defined in any standard.
It was defined in old C ++ 0x drafts, but not in the final C ++ 11 standard, only <atomic> is. Therefore, it was included as part of the experimental support for C ++ 0x GCC 4.4, but was then renamed for subsequent releases when it was renamed to C ++ 0x drafts (which was done in 2009, N2992 ).
You should not use <cstdatomic> if you are not stuck with GCC 4.4 and enjoy using the incomplete and buggy version of C ++ 11 atomicity. (I have no idea why Kubuntu GCC 4.6 includes a header, it is not in upstream versions of GCC 4.6 It must be a Ubuntu or Kubuntu or Linaro patch.)
<atomic> is the standard C ++ 11 header you can rely on for any reasonably appropriate C ++ 11 implementation.
<stdatomic.h> is the title of C11, but the C ++ 11 library is based on the C99 library, therefore it does not include <stdatomic.h> and does not match its corresponding <cstdatomic> .
Jonathan wakely
source share