相关疑难解决方法(0)

对abs的暧昧呼唤

我有一个自定义数据类型,实际上可以是floatdouble.在除OSX之外的每个操作系统上,我都能够成功构建此C++ 11模板:

#include <cmath>
#include <cstdlib>
#include <cstdint>

template< class REAL_T >
inline REAL_T inhouse_abs(REAL_T i_val)
{
    return std::abs((REAL_T)i_val);
}

int main()
{
    int32_t ui = 2;
    inhouse_abs(ui);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,clang 6.0(3.5 LLVM)报告了一个模糊的函数调用.如果我abs改为fabs,则在OSX上解决了错误,但现在我的Linux clang,gcc和Visual Studio上出现了相同的错误.

使用fabs的Visual Studio出错:

349 error C2668: 'fabs' : ambiguous call to overloaded function
Run Code Online (Sandbox Code Playgroud)

UPDATE

这个例子在我们的OS X系统上编译,尽管在几乎相同的项目中它没有.解决方案<cstdlib>明确包含在源代码中,而不是包含在另一个头文件中.原因尚不清楚,但似乎是xcode/clang没有跟随我们的标题包括正确.

c++ macos cmath c++11

10
推荐指数
1
解决办法
2万
查看次数

标签 统计

c++ ×1

c++11 ×1

cmath ×1

macos ×1