I have a custom data type that in practice can be either float
or double
. On every OS except OSX, I am able to successfully build this C++11 template:
#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;
}
However, clang 6.0 (3.5 LLVM) reports an ambiguous function call. If I change abs
to fabs
, the error is resolved on OSX, but now an identical error shows up on my Linux clang, gcc, and Visual Studio.
Error on Visual Studio with fabs:
349 error C2668: 'fabs' : ambiguous call to overloaded function
UPDATE
This example compiled on our OS X systems, although in the nearly identical project it does not. The solution was including <cstdlib>
explicitly in the source, rather than back in another header. The reason is unclear, but seems to be xcode/clang not following our header includes properly.