From: Aaron W. LaFramboise (aaronrabiddog51_at_[hidden])
Date: 2004-07-25 23:29:35


These three lines near the end of boost/type_traits/is_convertable.hpp:

TT_AUX_IS_CONVERTIBLE_FROM_FLOAT_CV_SPEC(float)
TT_AUX_IS_CONVERTIBLE_FROM_FLOAT_CV_SPEC(double)
TT_AUX_IS_CONVERTIBLE_FROM_FLOAT_CV_SPEC(long double)

don't compile on GCC 3.4.1 when -pedantic is specified.

This is actually sort of strange, because it compiles without warnings
when -std=c++98 -Wall -W are specified, and -pedantic itself is not
supposed to generate errors, only warnings. So, there is probably at
least a GCC bug here. Does anyone have any idea what this is about?

$ g++ -pedantic -I../boost -c stuff.cpp
In file included from stuff.cpp:1:
../boost/boost/type_traits/is_convertible.hpp:274: error: long, short,
signed or unsigned used invalidly for `type name'
../boost/boost/type_traits/is_convertible.hpp:274: error: long, short,
signed or unsigned used invalidly for `type name'
../boost/boost/type_traits/is_convertible.hpp:274: error: redefinition
of `struct boost::is_convertible<float, int64_t>'
../boost/boost/type_traits/is_convertible.hpp:274: error: previous
definition of `struct boost::is_convertible<float, int64_t>'
../boost/boost/type_traits/is_convertible.hpp:274: error: long, short,
signed or unsigned used invalidly for `type name'
../boost/boost/type_traits/is_convertible.hpp:274: error: long, short,
signed or unsigned used invalidly for `type name'
../boost/boost/type_traits/is_convertible.hpp:274: error: redefinition
of `struct boost::is_convertible<const float, int64_t>'
../boost/boost/type_traits/is_convertible.hpp:274: error: previous
definition of `struct boost::is_convertible<const float, int64_t>'
../boost/boost/type_traits/is_convertible.hpp:274: error: long, short,
signed or unsigned used invalidly for `type name'
../boost/boost/type_traits/is_convertible.hpp:274: error: long, short,
signed or unsigned used invalidly for `type name'
../boost/boost/type_traits/is_convertible.hpp:274: error: redefinition
of `struct boost::is_convertible<volatile float, int64_t>'
../boost/boost/type_traits/is_convertible.hpp:274: error: previous
definition of `struct boost::is_convertible<volatile float, int64_t>'
../boost/boost/type_traits/is_convertible.hpp:274: error: long, short,
signed or unsigned used invalidly for `type name'
../boost/boost/type_traits/is_convertible.hpp:274: error: long, short,
signed or unsigned used invalidly for `type name'
../boost/boost/type_traits/is_convertible.hpp:274: error: redefinition
of `struct boost::is_convertible<const volatile float, int64_t>'
../boost/boost/type_traits/is_convertible.hpp:274: error: previous
definition of `struct boost::is_convertible<const volatile float, int64_t>'
../boost/boost/type_traits/is_convertible.hpp:275: error: long, short,
signed or unsigned used invalidly for `type name'
../boost/boost/type_traits/is_convertible.hpp:275: error: long, short,
signed or unsigned used invalidly for `type name'
../boost/boost/type_traits/is_convertible.hpp:275: error: redefinition
of `struct boost::is_convertible<double, int64_t>'
../boost/boost/type_traits/is_convertible.hpp:275: error: previous
definition of `struct boost::is_convertible<double, int64_t>'
../boost/boost/type_traits/is_convertible.hpp:275: error: long, short,
signed or unsigned used invalidly for `type name'
../boost/boost/type_traits/is_convertible.hpp:275: error: long, short,
signed or unsigned used invalidly for `type name'
../boost/boost/type_traits/is_convertible.hpp:275: error: redefinition
of `struct boost::is_convertible<const double, int64_t>'
../boost/boost/type_traits/is_convertible.hpp:275: error: previous
definition of `struct boost::is_convertible<const double, int64_t>'
../boost/boost/type_traits/is_convertible.hpp:275: error: long, short,
signed or unsigned used invalidly for `type name'
../boost/boost/type_traits/is_convertible.hpp:275: error: long, short,
signed or unsigned used invalidly for `type name'
../boost/boost/type_traits/is_convertible.hpp:275: error: redefinition
of `struct boost::is_convertible<volatile double, int64_t>'
../boost/boost/type_traits/is_convertible.hpp:275: error: previous
definition of `struct boost::is_convertible<volatile double, int64_t>'
../boost/boost/type_traits/is_convertible.hpp:275: error: long, short,
signed or unsigned used invalidly for `type name'
../boost/boost/type_traits/is_convertible.hpp:275: error: long, short,
signed or unsigned used invalidly for `type name'
../boost/boost/type_traits/is_convertible.hpp:275: error: redefinition
of `struct boost::is_convertible<const volatile double, int64_t>'
../boost/boost/type_traits/is_convertible.hpp:275: error: previous
definition of `struct boost::is_convertible<const volatile double, int64_t>'
../boost/boost/type_traits/is_convertible.hpp:276: error: long, short,
signed or unsigned used invalidly for `type name'
../boost/boost/type_traits/is_convertible.hpp:276: error: long, short,
signed or unsigned used invalidly for `type name'
../boost/boost/type_traits/is_convertible.hpp:276: error: redefinition
of `struct boost::is_convertible<long double, int64_t>'
../boost/boost/type_traits/is_convertible.hpp:276: error: previous
definition of `struct boost::is_convertible<long double, int64_t>'
../boost/boost/type_traits/is_convertible.hpp:276: error: long, short,
signed or unsigned used invalidly for `type name'
../boost/boost/type_traits/is_convertible.hpp:276: error: long, short,
signed or unsigned used invalidly for `type name'
../boost/boost/type_traits/is_convertible.hpp:276: error: redefinition
of `struct boost::is_convertible<const long double, int64_t>'
../boost/boost/type_traits/is_convertible.hpp:276: error: previous
definition of `struct boost::is_convertible<const long double, int64_t>'
../boost/boost/type_traits/is_convertible.hpp:276: error: long, short,
signed or unsigned used invalidly for `type name'
../boost/boost/type_traits/is_convertible.hpp:276: error: long, short,
signed or unsigned used invalidly for `type name'
../boost/boost/type_traits/is_convertible.hpp:276: error: redefinition
of `struct boost::is_convertible<volatile long double, int64_t>'
../boost/boost/type_traits/is_convertible.hpp:276: error: previous
definition of `struct boost::is_convertible<volatile long double, int64_t>'
../boost/boost/type_traits/is_convertible.hpp:276: error: long, short,
signed or unsigned used invalidly for `type name'
../boost/boost/type_traits/is_convertible.hpp:276: error: long, short,
signed or unsigned used invalidly for `type name'
../boost/boost/type_traits/is_convertible.hpp:276: error: redefinition
of `struct boost::is_convertible<const volatile long double, int64_t>'
../boost/boost/type_traits/is_convertible.hpp:276: error: previous
definition of `struct boost::is_convertible<const volatile long double,
int64_t>'

Pentium 4 on Windows XP Pro
gcc 3.4.1 on mingw32
binutils 2.15
mingwrt 3.3

Thanks for your attention,

Aaron W. LaFramboise