C++ 作用域运算符需要查找std命名空间而不是boost

C++ 作用域运算符需要查找std命名空间而不是boost,c++,boost,scope,cuda,thrust,C++,Boost,Scope,Cuda,Thrust,我正在将boost库的部分移植到cuda/nvcc下作为设备函数进行编译。这涉及到在迭代器、数组等方面使用推力库。我发现推力库中存在编译错误,例如: C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.1\include\thrust/iterator/iterator_traits.h(66): error : namespace "boost::std" has no member "ptrdiff_t" 由推力线触发:

我正在将boost库的部分移植到cuda/nvcc下作为设备函数进行编译。这涉及到在迭代器、数组等方面使用推力库。我发现推力库中存在编译错误,例如:

    C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.1\include\thrust/iterator/iterator_traits.h(66): error : namespace "boost::std" has no member "ptrdiff_t"
由推力线触发:

   typedef std::ptrdiff_t difference_type;
我可以通过在std lib调用之前添加scope操作符::来解决这个问题,如下所示:

   typedef ::std::ptrdiff_t difference_type;
但很明显,改变推力是不行的

有人知道我为什么会遇到这个问题吗?i、 e.为什么推力头迭代器_traits.h在名称空间boost::std而不是std中搜索std::ptrdiff_t?在我加入推力头之前,有没有办法扭转这种情况

由于移植像boost这样的大型库的性质,在这里提供一个最小的工作示例并不容易


谢谢

我只能在这里猜测,但我最好的猜测是,由于某种原因,在打开
std
命名空间之前的某个地方,有一个缺少的关闭大括号来关闭
boost
命名空间,可能是通过包含一个标准库头。这将导致命名空间
boost::std
存在,因此编译器在
std::ptrdiff_t
子命名空间中查找
boost
命名空间当前处于打开状态

例如,使用gcc编译以下源文件

#include <cstddef>

namespace foo {

// this creates a namespace ::foo::std
#include <typeinfo>

}

namespace foo {
    using difference_type = std::ptrdiff_t;
}

您也可以看到。

在推进集管之前包括推力集管?另外,您是否使用名称空间指令?我正在修改数千个boost include文件,使其与设备兼容。因此推力包含在推进器的内部深处。Boost使用了大量的using namespace指令。这是行不通的,尝试设备端口已经可以用于某些特殊功能也是徒劳的。我有希望,但我同意这是相当雄心勃勃的。谢谢你——就是这样。非常感谢!
prog.cc:11:34: error: 'ptrdiff_t' in namespace 'foo::std' does not name a type
   11 |     using difference_type = std::ptrdiff_t;
      |                                  ^~~~~~~~~