我在 Fedora 26 系统上使用 GCC 5.4.0 和 Boost 1.67.0(这不是系统的默认编译器)。如果我编译以下内容a.cpp:
#include <boost/any.hpp>
使用命令行:
g++ a.cpp -c -o a.o --std=c++11 -D__CORRECT_ISO_CPP11_MATH_H_PROTO -I/path/to/boost/include
我收到以下错误:
... blah blah blah ...
/path/to/boost/include/boost/container_hash/detail/hash_float.hpp:212:36: error: no matching function for call to ‘fpclassify(float&)’
switch (std::fpclassify(v))
... blah blah blah ...
如果我不定义_CORRECT_ISO_CPP11_MATH_H_PROTO编译结束,则没有错误。
这在我以前的 Boost 版本中没有发生过。例如 1.62.0。为什么现在会发生?
注意:这似乎发生在某些 GCC 6.x 版本中:GCC 6.1 (Godbolt) 和 6.2,但不适用于 6.3 和更高版本。谢谢@贾斯汀。此外,clang v3.5 及更高版本(未经广泛测试)不会发生这种情况。