bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

stdbool: Fix compilation error in C++ mode with MSVC 14


From: Bruno Haible
Subject: stdbool: Fix compilation error in C++ mode with MSVC 14
Date: Sun, 04 Sep 2022 16:25:27 +0200

A testdir fails to compile on MSVC 14, because of this error:

source='../../gltests/test-list-c++.cc' object='test-list-c++.obj' libtool=no \
DEPDIR=.deps depmode=msvc7 /bin/sh ../../build-aux/depcomp \
/home/bruno/msvc/compile cl -nologo -DHAVE_CONFIG_H -DEXEEXT=\".exe\" -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_WIN7 -I/usr/local/msvc64/include  -MD -c -o 
test-list-c++.obj `cygpath -w '../../gltests/test-list-c++.cc'`
test-list-c++.cc
C:\Program Files (x86)\Microsoft Visual Studio 
14.0\VC\include\xkeycheck.h(174): warning C4005: 'bool': macro redefinition
../gllib\stdbool.h(64): note: see previous definition of 'bool'
C:\Program Files (x86)\Microsoft Visual Studio 
14.0\VC\include\xkeycheck.h(197): warning C4005: 'false': macro redefinition
../gllib\stdbool.h(107): note: see previous definition of 'false'
C:\Program Files (x86)\Microsoft Visual Studio 
14.0\VC\include\xkeycheck.h(232): warning C4005: 'true': macro redefinition
../gllib\stdbool.h(108): note: see previous definition of 'true'
C:\Program Files (x86)\Microsoft Visual Studio 
14.0\VC\include\xkeycheck.h(250): fatal error C1189: #error:  The C++ Standard 
Library forbids macroizing keywords. Enable warning C4005 to find the forbidden 
macro.
make[4]: *** [Makefile:23393: test-list-c++.obj] Error 2

and likewise for test-map-c++.cc, test-omap-c++.cc, test-oset-c++.cc,
test-set-c++.cc. This patch fixes it.


2022-09-04  Bruno Haible  <bruno@clisp.org>

        stdbool: Fix compilation error in C++ mode with MSVC 14.
        * lib/stdbool.in.h (_Bool, bool, false, true): In C++ mode with MSVC 14,
        don't define these as macros.

diff --git a/lib/stdbool.in.h b/lib/stdbool.in.h
index 2fa46724b2..36f26560af 100644
--- a/lib/stdbool.in.h
+++ b/lib/stdbool.in.h
@@ -59,8 +59,10 @@
 /* 7.16. Boolean type and values */
 
 #ifdef __cplusplus
-# define _Bool bool
-# define bool bool
+# if !defined _MSC_VER
+#  define _Bool bool
+#  define bool bool
+# endif
 #else
 # if !defined __GNUC__
    /* If @HAVE__BOOL@:
@@ -103,8 +105,10 @@ typedef enum { _Bool_must_promote_to_int = -1, false = 0, 
true = 1 } _Bool;
 
 /* The other macros must be usable in preprocessor directives.  */
 #ifdef __cplusplus
-# define false false
-# define true true
+# if !defined _MSC_VER
+#  define false false
+#  define true true
+# endif
 #else
 # define false 0
 # define true 1






reply via email to

[Prev in Thread] Current Thread [Next in Thread]