C++ and bool constants (was Re: [NOVICE] gcc 3.0.1) - Mailing list pgsql-hackers

From Tom Lane
Subject C++ and bool constants (was Re: [NOVICE] gcc 3.0.1)
Date
Msg-id 17492.998808120@sss.pgh.pa.us
Whole thread Raw
Responses Re: C++ and bool constants (was Re: [NOVICE] gcc 3.0.1)
List pgsql-hackers
Leandro Fanzone <leandro@hasar.com> writes:
> I have compiled PostgreSQL 7.1.2 with gcc 3.0.1, and have the following
> problem: if I include first libpq++.h before iostream, id est:
> #include <libpq++.h>
> #include <iostream>
> the compiler complains:

> This is because somewhere in PostgreSQL you have the following code:

> #ifndef true
> #define true ((bool)1)
> #endif

Yeah.  c.h has

#ifndef __cplusplus
#ifndef bool
typedef char bool;
#endif     /* ndef bool */
#endif     /* not C++ */

#ifndef true
#define true    ((bool) 1)
#endif

#ifndef false
#define false    ((bool) 0)
#endif

It's been like that for quite some time, but it's always struck me as
bizarre: if we're willing to trust a C++ compiler to provide type
bool, why would we not trust it to provide the literals true and false
as well?  ISTM the code should read

#ifndef __cplusplus

#ifndef bool
typedef char bool;
#endif

#ifndef true
#define true    ((bool) 1)
#endif

#ifndef false
#define false    ((bool) 0)
#endif

#endif     /* not C++ */

Does anyone have an objection to this?
        regards, tom lane


pgsql-hackers by date:

Previous
From: "Gowey, Geoffrey"
Date:
Subject: RE: version 1 C-Language Functions documentation and ex ample
Next
From: Peter Eisentraut
Date:
Subject: Re: Re: [PATCHES] Makefile.PL for Pg.so