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)
|
Список | 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 по дате отправления: