https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118395
--- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> --- Making this constexpr requires major changes: size_t const __count = (_M_expected + 1) >> 1; _M_state = std::make_unique<__state_t[]>(__count); We can't allocate an array during constant initialization, so we'll need to defer the allocation until the first call to arrive(), and then make that initialization thread-safe.