https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78940
--- Comment #1 from Nadav Har'El <nyh at math dot technion.ac.il> --- Technically speaking, std::atomic<T>'s default constructor is not marked "constexpr" (unlike the value-taking constructor), so I'm guessing that at the time that gcc makes the decision to have these guards, it doesn't yet know that this type will not need a constructor. I don't know why the standard decided that the default constructor should not be marked "constexpr", unlike the value-taking constructors.