首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用nvcc和c++11编译错误,需要最小的失败示例

使用nvcc和c++11编译错误,需要最小的失败示例
EN

Stack Overflow用户
提问于 2015-08-12 15:32:04
回答 1查看 578关注 0票数 1

以下代码(最初来自Boost)无法在启用C++11支持的情况下使用NVCC7.0进行编译:

代码语言:javascript
复制
#include <memory>

template<typename T>
struct result_of_always_void
{
    typedef void type;
};

template<typename F, typename Enable = void> struct cpp0x_result_of_impl {};

template<typename F,typename T0>
struct cpp0x_result_of_impl<F(T0), typename result_of_always_void< decltype(std::declval<F>()(std::declval<T0 >()))>::type >
{
    typedef decltype(std::declval<F>()(std::declval<T0 >())) type;
};


int main ()
{
    return 0;
}

我得到的错误如下:

代码语言:javascript
复制
test.cu:16:93: error: invalid use of qualified-name ‘std::allocator_traits<_Alloc>::propagate_on_container_swap’
   typedef decltype(std::declval<F>()(std::declval<T0 >())) type;
                                                                                             ^

我怀疑这是由于nvcc编译器中的一个错误,但在我提交错误之前,我想问一下,是否有可能进一步简化代码,同时仍然让它产生错误?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-12 15:46:19

这一问题似乎在cuda 7.5RC中得到了解决。请切换到更新的库达版本。

代码语言:javascript
复制
$ cat t877.cu
#include <memory>

template<typename T>
struct result_of_always_void
{
    typedef void type;
};

template<typename F, typename Enable = void> struct cpp0x_result_of_impl {};

template<typename F,typename T0>
struct cpp0x_result_of_impl<F(T0), typename result_of_always_void< decltype(std::declval<F>()(std::declval<T0 >()))>::type >
{
    typedef decltype(std::declval<F>()(std::declval<T0 >())) type;
};


int main ()
{
    return 0;
}
$ /usr/local/cuda-7.0/bin/nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2015 NVIDIA Corporation
Built on Mon_Feb_16_22:59:02_CST_2015
Cuda compilation tools, release 7.0, V7.0.27
$ /usr/local/cuda-7.0/bin/nvcc -std=c++11 t877.cu -o t877
t877.cu:14:93: error: invalid use of qualified-name âstd::allocator_traits<_Alloc>::propagate_on_container_swapâ
     typedef decltype(std::declval<F>()(std::declval<T0 >())) type;
                                                                                             ^
$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2015 NVIDIA Corporation
Built on Thu_May__7_00:35:41_CDT_2015
Cuda compilation tools, release 7.5, V7.5.6
$ nvcc -std=c++11 t877.cu -o t877
$

当然,欢迎你提交一个窃听器。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31969644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档