【发布时间】:2015-07-17 01:15:51
【问题描述】:
我有一个自定义数据类型,实际上可以是float 或double。在除 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;
}
但是,clang 6.0 (3.5 LLVM) 报告了一个模棱两可的函数调用。如果我将abs 更改为fabs,则该错误在 OSX 上得到解决,但现在我的 Linux clang、gcc 和 Visual Studio 上出现了相同的错误。
带有晶圆厂的 Visual Studio 出错:
349 error C2668: 'fabs' : ambiguous call to overloaded function
更新
这个示例在我们的 OS X 系统上编译,尽管在几乎相同的项目中它没有。解决方案是在源代码中显式包含<cstdlib>,而不是在另一个标题中包含。原因尚不清楚,但似乎是 xcode/clang 未正确遵循我们的标头包含。
【问题讨论】:
-
你有实际的错误文本吗?
-
@Collin 添加了 Visual Studio 错误。需要一分钟才能找到 clang 模拟。
-
@ShafikYaghmour 在该行生成错误,无需任何调用。
-
那么你包括什么标题等等......
-
已更新示例。