Boost 1.40.0 compilation error while building with Intel compiler


Reference Number : DPD200139942


Version : 11.1


Product : 
Intel® C++ Compiler Professional Edition for Linux 11.1
Boost 1.40.0


Operating System : 
Linux* Fedora 11

Problem Description : 

Building Boost using the cmake branch leads to the error listed below. My build system is:
Fedora 11 x64
Intel® compiler 11.1.059
glibc 2.10.1
gcc 4.4.1

[ 4%] Building CXX object libs/regex/src/CMakeFiles/boost_regex-mt-shared.dir/cregex.cpp.o
/usr/include/c++/4.4.1/cmath(500): error: identifier "__builtin_fpclassify" is undefined
return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL,
^
detected during:
instantiation of "__gnu_cxx::__enable_if<std::__is_arithmetic<_Tp>::__value, int>::__type std::fpclassify(_Tp) [with _Tp=float]" at line 65 of "/home/chris/build/third_party/Boost/src/boost/functional/hash/detail/hash_float.hpp"
instantiation of "size_t={unsigned int} boost::hash_detail::float_hash_value(T) [with T=float]" at line 282 of "/home/chris/build/third_party/Boost/src/boost/functional/hash/hash.hpp"

/usr/include/c++/4.4.1/cmath(500): error: identifier "__builtin_fpclassify" is undefined
return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL,
^
detected during:
instantiation of "__gnu_cxx::__enable_if<std::__is_arithmetic<_Tp>::__value, int>::__type std::fpclassify(_Tp) [with _Tp=long double]" at line 65 of "/home/chris/build/third_party/Boost/src/boost/functional/hash/detail/hash_float.hpp"
instantiation of "size_t={unsigned int} boost::hash_detail::float_hash_value(T) [with T=long double]" at line 292 of "/home/chris/build/third_party/Boost/src/boost/functional/hash/hash.hpp"

More information :

gcc 4.4.1 support __builtin_fpclassify but icc does not support it yet.
http://gcc.gnu.org/onlinedocs/gcc-4.4.1/gcc/Other-Builtins.html

Built-in Function: int __builtin_fpclassify (int, int, int, int, int, ...)

This built-in implements the C99 fpclassify functionality. The first five int arguments should be the target library's notion of the possible FP classes and are used for return values. They must be constant values and they must appear in this order: FP_NAN, FP_INFINITE, FP_NORMAL, FP_SUBNORMAL and FP_ZERO. The ellipsis is for exactly one floating point value to classify. GCC treats the last argument as type-generic, which means it does not do default promotion from float to double.


Resolution Status : 
This is a known issue that is resolved in the latest update.


[DISCLAIMER: The information on this web site is intended for hardware system manufacturers and software developers. Intel does not warrant the accuracy, completeness or utility of any information on this site. Intel may make changes to the information or the site at any time without notice. Intel makes no commitment to update the information at this site. ALL INFORMATION PROVIDED ON THIS WEBSITE IS PROVIDED "as is" without any express, implied, or statutory warranty of any kind including but not limited to warranties of merchantability, non-infringement of intellectual property, or fitness for any particular purpose. Independent companies manufacture the third-party products that are mentioned on this site. Intel is not responsible for the quality or performance of third-party products and makes no representation or warranty regarding such products. The third-party supplier remains solely responsible for the design, manufacture, sale and functionality of its products. Intel and the Intel logo are trademarks or registered trademarks of Intel Corporation or its subsidiaries in the United States and other countries. *Other names and brands may be claimed as the property of others.]
For more complete information about compiler optimizations, see our Optimization Notice.