C23 addition of once_flag to <stdlib.h>

Jonathan Wakely jwakely.gcc@gmail.com
Sat Nov 8 00:33:05 GMT 2025


On Fri, 7 Nov 2025 at 13:44, Florian Weimer <fweimer@redhat.com> wrote:
>
> We made this change recently in glibc:
>
> commit a7ddbf456d97ac8d1aa7afd735e196a1488bd874
> Author: Joseph Myers <josmyers@redhat.com>
> Date:   Wed Oct 1 15:15:15 2025 +0000
>
>     Add once_flag, ONCE_FLAG_INIT and call_once to stdlib.h for C23
>
>     C23 adds once_flag, ONCE_FLAG_INIT and call_once to stdlib.h (in C11
>     they were only in threads.h, in C23 they are in both headers; this
>     change came from N2840).  Implement this change, with a
>     bits/types/once_flag.h header for the common type and initializer
>     definitions.
>
>     Note that there's an omnibus bug (bug 33001) that covers more than
>     just these missing definitions.
>
>     This doesn't seem a significant enough feature to be worth mentioning
>     in NEWS.
>
>     ISO C is not concerned with whether functions are in libc or
>     libpthread, but POSIX links this to what header they are declared in,
>     so functions declared in stdlib.h are supposed to be in libc.
>     However, the current edition of POSIX is based on C17; hopefully Hurd
>     glibc will have completed the merge of libpthread into libc (in
>     particular, moving call_once) well before a future edition of POSIX
>     based on C23 (or a later version of ISO C) is released.
>
>     Tested for x86_64 and x86.
>
> C++ has its own definition of std::once_flag in <mutex>.  The type is
> different.  There are additional requirements for the C++ type, and we
> were not aware of them when we defined once_flag (in <thread.h>) for
> glibc.  Certainly we did not expect once_flag to end up in <stdlib.h>.
>
> The question is what happens once C++ adopts C23 and adds std::once_flag
> to <cstdlib>.  Should we use the C type for this, or the C++ type?  This
> is a difficult choice.  It affects mangling.

My paper to rebase C++26 on C explicitly excluded once_flag, so please
guard the definition in stdlib.h with #ifndef __cplusplus


>
> Currently, my preferred outcome would be a DR against C and removal of
> once_flag from <stdlib.h>.
>
> Any other ideas?
>
> Thanks,
> Florian
>


More information about the Libc-alpha mailing list