https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82528
Martin Sebor <msebor at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |msebor at gcc dot gnu.org
--- Comment #2 from Martin Sebor <msebor at gcc dot gnu.org> ---
Yes, I also thought of bug 82272. The challenge with having the macros true
and false expand to some built-ins (like __true and __false) is that it would
be at odds with the C requirements that they be suitable for use in #if
preprocessing directives and expand to the integer constants 1 and 0. At a
minimum, the preprocessor would need to be made aware of these built-ins. The
more esoteric problems stemming from having them expand to non-literals is in
preprocessor tricks like:
#include <stdbool.h>
#define CAT(a, b) a ## b
#define CONCAT(a, b) CAT (a, b)
int i = CONCAT(1, true);
It's not clear that the standard actually requires the above to expand to '11'
(as opposed to causing an error if true were defined to (1), i.e., 1 in
parentheses) so maybe this is a non-issue. As H. Peter Anvin suggests in the
related bug, it might be helpful to get this clarified and perhaps even
tightened up for C2X.