我正在尝试在使用 CUDA 8.0 和 clang 3.8 的 Ubuntu 系统上编译一个使用 CUDA 的库。
该库在多个 *.cu
文件中包含 Eigen
header ,其中显然包含 cmath
header ,导致 CUDA header 中出现歧义。
/usr/local/cuda-8.0/include/cuda_fp16.h(3068): error: more than one instance of overloaded function "isinf" matches the argument list:
function "std::isinf(float)"
function "isinf(float)"
argument types are: (float)
CUDA 定义了它自己的 __device__ __RETURN_TYPE isinf ( float a )
,我希望 std::isinf
必须显式调用而不是产生冲突.
任何有关这方面的线索将不胜感激。
最佳答案
我记得,这实际上是一个 Clang 问题。使用 Clang 3.8 和 gcc 6 标准库头文件以 C++11 模式编译将触发该问题。如果切换到支持的 gcc 5 版本,或者不指定 C++11 支持,问题就会消失。
关于c++ - 不止一个重载函数实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50558411/