intprops, stdbit-h: Fix syntax error on MSVC in C++ mode

Bruno Haible via Gnulib discussion list <[email protected]>
Newsgroups gmane.comp.lib.gnulib.bugs
Organization GNU
Message-ID <1995648.GKX7oQKdZx@nimes>
Building a testdir created through

  $ ./gnulib-tool --create-testdir --dir=../testdir4 --with-c++-tests stdckdint-h

on MSVC, I get this syntax error:

/cygdrive/d/a/ci-scratch/ci-scratch/compile cl -nologo -DHAVE_CONFIG_H -I. -I../../gltests -I..  -DGNULIB_STRICT_CHECKING=1 -DIN_GNULIB_TESTS=1 -I. -I../../gltests -I.. -I../../gltests/.. -I../gllib -I../../gltests/../gllib -D_WIN32_WINNT=_WIN32_WINNT_WINXP -I/usr/local/msvc64/include -DCONTINUE_AFTER_ASSERT  -MD -c -o test-stdckdint-h-c++.obj `cygpath -w '../../gltests/test-stdckdint-h-c++.cc'`
test-stdckdint-h-c++.cc
D:\a\ci-scratch\ci-scratch\testdir57\gltests\test-stdckdint-h-c++.cc(33): error C3861: '__typeof__': identifier not found
D:\a\ci-scratch\ci-scratch\testdir57\gltests\test-stdckdint-h-c++.cc(33): error C2059: syntax error: 'constant'
make[4]: *** [Makefile:1802: test-stdckdint-h-c++.obj] Error 2

This patch fixes it.


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

	intprops, stdbit-h: Fix error on MSVC in C++ mode (regr. 2024-12-19).
	* lib/intprops-internal.h (_GL_HAVE___TYPEOF__): Set to 0 on MSVC in
	C++ mode.
	* lib/stdbit.in.h (_GL_STDBIT_TYPEOF_CAST): Don't use __typeof__ on MSVC
	in C++ mode.

diff --git a/lib/intprops-internal.h b/lib/intprops-internal.h
index 1fb3b79901..4055173dc8 100644
--- a/lib/intprops-internal.h
+++ b/lib/intprops-internal.h
@@ -106,7 +106,7 @@
      || (defined __clang_major__ && 4 <= __clang_major__) \
      || (defined __IBMC__ && 1210 <= __IBMC__ && defined __IBM__TYPEOF__) \
      || (defined __SUNPRO_C && 0x5110 <= __SUNPRO_C && !__STDC__) \
-     || (defined _MSC_VER && 1939 <= _MSC_VER))
+     || (defined _MSC_VER && 1939 <= _MSC_VER && !defined __cplusplus))
 # define _GL_HAVE___TYPEOF__ 1
 #else
 # define _GL_HAVE___TYPEOF__ 0
diff --git a/lib/stdbit.in.h b/lib/stdbit.in.h
index 92749487fa..c7047e3297 100644
--- a/lib/stdbit.in.h
+++ b/lib/stdbit.in.h
@@ -175,7 +175,7 @@ _GL_INLINE_HEADER_BEGIN
      || (defined __clang_major__ && 4 <= __clang_major__) \
      || (defined __IBMC__ && 1210 <= __IBMC__ && defined __IBM__TYPEOF__) \
      || (defined __SUNPRO_C && 0x5110 <= __SUNPRO_C && !__STDC__) \
-     || (defined _MSC_VER && 1939 <= _MSC_VER))
+     || (defined _MSC_VER && 1939 <= _MSC_VER && !defined __cplusplus))
 # define _GL_STDBIT_TYPEOF_CAST(a, b) ((__typeof__ (a)) (b))
 #elif 202311 <= __STDC_VERSION__
 # define _GL_STDBIT_TYPEOF_CAST(a, b) ((typeof (a)) (b))
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.