From bbc000da249fb2f9000ad0ec1c17a53387656fb1 Mon Sep 17 00:00:00 2001 From: Bruno Haible <bruno@clisp.org> Date: Sun, 18 Sep 2022 18:45:39 +0200 Subject: [PATCH] stdbool: Ensure that 'true' can be used in the preprocessor. * lib/stdbool.in.h (true): Redefine if it does not evaluate to 1 in the preprocessor. --- ChangeLog | 6 ++++++ lib/stdbool.in.h | 7 +++++++ 2 files changed, 13 insertions(+) diff --git a/ChangeLog b/ChangeLog index d38fa2dc41..9fc4414496 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2022-09-18 Bruno Haible <bruno@clisp.org> + + stdbool: Ensure that 'true' can be used in the preprocessor. + * lib/stdbool.in.h (true): Redefine if it does not evaluate to 1 in the + preprocessor. + 2022-09-18 Bruno Haible <bruno@clisp.org> signal: Fix a C++ compilation error due to sched_yield on OpenBSD 6.0. diff --git a/lib/stdbool.in.h b/lib/stdbool.in.h index b1613d4f02..125de5a25e 100644 --- a/lib/stdbool.in.h +++ b/lib/stdbool.in.h @@ -126,6 +126,13 @@ typedef enum { _Bool_must_promote_to_int = -1, false = 0, true = 1 } _Bool; # define false false # define true true # endif +/* In Sun C++ 5.11 (Solaris Studio 12.2) and older, 'true' as a preprocessor + expression evaluates to 0, not 1. Fix this by overriding 'true'. Note that + the replacement has to be of type 'bool'. */ +# if defined __SUNPRO_CC && true != 1 +# undef true +# define true (!false) +# endif #else # define false 0 # define true 1 -- 2.39.5