C++ and bool constants (was Re: [NOVICE] gcc 3.0.1)

Поиск
Список
Период
Сортировка
От Tom Lane
Тема C++ and bool constants (was Re: [NOVICE] gcc 3.0.1)
Дата
Msg-id 17492.998808120@sss.pgh.pa.us
обсуждение исходный текст
Ответы Re: C++ and bool constants (was Re: [NOVICE] gcc 3.0.1)  (Bruce Momjian <pgman@candle.pha.pa.us>)
Список 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 по дате отправления:

Предыдущее
От: "Gowey, Geoffrey"
Дата:
Сообщение: RE: version 1 C-Language Functions documentation and ex ample
Следующее
От: Peter Eisentraut
Дата:
Сообщение: Re: Re: [PATCHES] Makefile.PL for Pg.so