stdbit-h: Work around syntax error in FreeBSD 15.1 <stdbit.h>

Bruno Haible via Gnulib discussion list <[email protected]>
Newsgroups gmane.comp.lib.gnulib.bugs
Organization GNU
Message-ID <3447216.VqM8IeB0Os@nimes>
FreeBSD 15.1 was released two days ago. It adds the <stdbit.h> header file,
see <https://www.freebsd.org/releases/15.1R/relnotes/#userland-libraries>.
But this header file is buggy: It produces syntax errors in C++ mode.

depbase=`echo test-stdbit-h-c++.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`; c++ -ferror-limit=0 -DHAVE_CONFIG_H -DEXEEXT=\"\" -DEXEEXT=\"\" -I. -I../../gltests -I..   -DGNULIB_STRICT_CHECKING=1  -DIN_GNULIB_TESTS=1  -I. -I../../gltests  -I.. -I../../gltests/..  -I../gllib -I../../gltests/../gllib -I/home/bruno/include -I/usr/local/include -Wall -D_THREAD_SAFE -Wno-error -Wno-error -g -O2 -MT test-stdbit-h-c++.o -MD -MP -MF $depbase.Tpo -c -o test-stdbit-h-c++.o ../../gltests/test-stdbit-h-c++.cc && mv -f $depbase.Tpo $depbase.Po
In file included from ../../gltests/test-stdbit-h-c++.cc:22:
In file included from ../gllib/stdbit.h:30:
/usr/include/stdbit.h:115:1: error: unknown type name '_Bool'
  115 | _Bool stdc_has_single_bit_uc(unsigned char) __pure2;
      | ^
/usr/include/stdbit.h:116:1: error: unknown type name '_Bool'
  116 | _Bool stdc_has_single_bit_us(unsigned short) __pure2;
      | ^
/usr/include/stdbit.h:117:1: error: unknown type name '_Bool'
  117 | _Bool stdc_has_single_bit_ui(unsigned int) __pure2;
      | ^
/usr/include/stdbit.h:118:1: error: unknown type name '_Bool'
  118 | _Bool stdc_has_single_bit_ul(unsigned long) __pure2;
      | ^
/usr/include/stdbit.h:119:1: error: unknown type name '_Bool'
  119 | _Bool stdc_has_single_bit_ull(unsigned long long) __pure2;
      | ^

This patch provides a workaround.


2026-06-18  Bruno Haible  <[email protected]>

	stdbit-h: Work around syntax error in FreeBSD 15.1 <stdbit.h>.
	* lib/stdbit.in.h (_Bool): Define on FreeBSD in C++ mode.
	* doc/posix-headers/stdbit.texi: Mention the FreeBSD bug.

diff --git a/doc/posix-headers/stdbit.texi b/doc/posix-headers/stdbit.texi
index 2788af8944..9a1ab3ac03 100644
--- a/doc/posix-headers/stdbit.texi
+++ b/doc/posix-headers/stdbit.texi
@@ -13,11 +13,14 @@
 @itemize
 @item
 This header file is missing on many non-C23 platforms:
-glibc 2.38, macOS 14, FreeBSD 14.0, NetBSD 10.0, OpenBSD 7.9, AIX 7.3.1, HP-UX 11.31, Solaris 11.4, Cygwin 3.5.3, mingw, MSVC 17, Android 15.
+glibc 2.38, macOS 14, FreeBSD 15.0, NetBSD 10.0, OpenBSD 7.9, AIX 7.3.1, HP-UX 11.31, Solaris 11.4, Cygwin 3.5.3, mingw, MSVC 17, Android 15.
 @item
 This header file exists but is a no-op:
 G++ 15.2.
 @item
+This header file has syntax errors in C++ mode on some platforms:
+FreeBSD 15.1.
+@item
 This header file does not define the necessary types
 with the Intel @code{icpx} C++ compiler.
 @end itemize
diff --git a/lib/stdbit.in.h b/lib/stdbit.in.h
index c7047e3297..d9a873a43a 100644
--- a/lib/stdbit.in.h
+++ b/lib/stdbit.in.h
@@ -26,6 +26,10 @@
 
 /* The include_next requires a split double-inclusion guard.  */
 #if @HAVE_STDBIT_H@
+/* The FreeBSD 15.1 <stdbit.h> uses the _Bool type.  */
+# if defined __FreeBSD__ && defined __cplusplus
+#  define _Bool bool
+# endif
 # @INCLUDE_NEXT@ @NEXT_STDBIT_H@
 #endif
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.