Cuda生成的VC+;上的Boost错误+;解决方案(错误C2675)

Cuda生成的VC+;上的Boost错误+;解决方案(错误C2675),boost,cuda,compiler-errors,Boost,Cuda,Compiler Errors,我在VisualStudio中创建了一个CUDA5项目(VC++),我想使用BoostChronoAPI。当我包括boost/chrono.hpp时,我有以下错误: Error 89 error C2675: unary '-' : 'T' does not define this operator or a conversion to a type acceptable to the predefined operator D:\StandaloneApp\Library\Vc\boo

我在VisualStudio中创建了一个CUDA5项目(VC++),我想使用BoostChronoAPI。当我包括
boost/chrono.hpp
时,我有以下错误:

Error   89  error C2675: unary '-' : 'T' does not define this operator or a conversion to a
 type acceptable to the predefined operator D:\StandaloneApp\Library\Vc\boost_1_52_0\boost\ratio\detail\mpl\abs.hpp
68  1   ThrustCompareSoaAndAos
第68行周围的代码块:

#if defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC_2)
namespace aux {
template< typename T, T n > struct abs_wknd
{
    BOOST_STATIC_CONSTANT(T, value = (n < 0 ? -n : n));
    typedef integral_c<T,value> type; // line 68
};
}
#endif
#如果已定义(BOOST_MPL_CFG_NO_NESTED_VALUE_算术_2)
名称空间辅助{
模板struct abs\u wknd
{
BOOST_静态_常数(T,值=(n<0?-n:n));
typedef integral_c type;//第68行
};
}
#恩迪夫
什么原因导致此错误?

我更改了行: BOOST_静态_常数(T,值=(n<0?-n:n)); 到 BOOST_静态_常数(T,值=(n<0?(n*-1):n))

这符合要求。

我更改了行: BOOST_静态_常数(T,值=(n<0?-n:n)); 到 BOOST_静态_常数(T,值=(n<0?(n*-1):n))


这符合要求。

您能在第68行附近发布代码吗?这是否包含在.cu文件中?@alrikai:[这不是我的问题,但我有相同的问题。]是的,这是在使用nvcc编译.cu时发生的。同样的代码在Linux上可以很好地编译。@shinjin它在Linux上编译很有趣,上次我使用boost和CUDA登录时,您必须将任何boost内容隔离到cpp文件中,然后使用主机编译器和nvcc分别编译您的cpp文件,然后将两者联系起来,以防止nvcc被某些boost结构卡住。它在linux上运行的事实让我感到惊讶,但我猜nvcc在模板支持方面取得了进展。你能在第68行附近发布代码吗?这是从.cu文件中包含的吗?@alrikai:[这不是我的问题,但我有同样的问题。]是的,这是在使用nvcc编译.cu时发生的。同样的代码在Linux上可以很好地编译。@shinjin它在Linux上编译很有趣,上次我使用boost和CUDA登录时,您必须将任何boost内容隔离到cpp文件中,然后使用主机编译器和nvcc分别编译您的cpp文件,然后将两者联系起来,以防止nvcc被某些boost结构卡住。它在linux上运行的事实让我感到惊讶,但我想nvcc在模板支持方面正在取得进展