gcc 3.0.1
От | Leandro Fanzone |
---|---|
Тема | gcc 3.0.1 |
Дата | |
Msg-id | 3B86B523.CA3F17A6@hasar.com обсуждение исходный текст |
Список | pgsql-novice |
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: In file included from /usr/include/g++-v3/bits/locale_facets.tcc:38, from /usr/include/g++-v3/bits/std_locale.h:41, from /usr/include/g++-v3/bits/ostream.tcc:32, from /usr/include/g++-v3/bits/std_ostream.h:278, from /usr/include/g++-v3/bits/std_iostream.h:40, from /usr/include/g++-v3/iostream:31, from p.cc:3: /usr/include/g++-v3/bits/std_limits.h:286:5: missing binary operator /usr/include/g++-v3/bits/std_limits.h:483:5: missing binary operator This is because somewhere in PostgreSQL you have the following code: #ifndef true #define true ((bool)1) #endif and it seems that in gcc 3.0.1, "true" is not defined, or that "true" is a reserved word doesn't mean that is defined, or that the offending lines below they don't exist in std_limit.h, I don't know as I no longer have the old compiler. The workaround is to include first iostream, and then libpq++. The offending lines in std_limits.h are the following: #ifdef __CHAR_UNSIGNED__ #define __glibcpp_plain_char_is_signed false #else #define __glibcpp_plain_char_is_signed true #endif end somewhere below this one: #if __glibcpp_plain_char_is_signed #endif which is preprocessed to: #if true #endif when the #include<iostream> is before libpq++ and: #if ((bool)1) #endif otherwise. This last statement is invalid for the compiler. Leandro Fanzone
В списке pgsql-novice по дате отправления: