Boost logo

Boost :

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


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk