【发布时间】:2013-07-10 15:07:33
【问题描述】:
我有一段代码在 std::vector<double> cats 上运行,并且正在执行以下操作:
std::find_if(cats.begin(), cats.end(), std::isnan<double>);
这在 4.3 之前的 gcc 下编译,但不再使用 gcc 4.7.2 编译。我收到这样的错误:
error: no matching function for call to 'find_if(std::vector<double>::iterator, std::vector<double::iterator, <unresolved overloaded function type>)'
我怎样才能让它在较新的 gcc 下编译?而且最好也在旧的gcc下?当然,无需摆脱 stl 并手动编写循环。如果两者都做不到,那么新的 gcc 就足够了,我会将这两个实现都留在那里,并带有 #define。
【问题讨论】:
-
std::isnan<double>??在 C++11 标准中,isnan是一个非模板函数。在 C99 中它是一个宏。 -
我确实读过,但它以某种方式编译
-
它曾经是 GCC 早期版本中的模板。在 GCC 4.7 中有三个重载和一个整数类型的模板