C23 addition of once_flag to <stdlib.h>
Jonathan Wakely
jwakely.gcc@gmail.com
Sat Nov 8 00:34:01 GMT 2025
On Sat, 8 Nov 2025 at 00:33, Jonathan Wakely <jwakely.gcc@gmail.com> wrote:
>
> 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
This is already present in the C++26 working draft:
https://eel.is/c++draft/cstdlib.syn#1.sentence-1
>
>
> >
> > 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 Libstdc++
mailing list