检测是否在 NVCC 中启用了 c++11

Detect if c++11 is enabled in NVCC

我想检测 .cu 文件是否在启用 C++11 支持的情况下编译。目前我有以下内容:

#if CUDART_VERSION < 7050
  #define C11SUPPORTED 0
#else
  #define C11SUPPORTED 1
#endif

但是这不起作用,因为即使支持 C++11,它也不会启用,除非通过 -std=c++11 开关。传递 -std=c++11 时是否可能还定义了其他内容?

更新

nvcc --compiler-options -dM -E -x cu - < /dev/null | grep "__cplus"

returns

#define __cplusplus 201402L

我使用的是NVCC V9.1.85版本。检查 __cplusplus 是否有效,即使对于较旧的 NVCC 版本?

如果 nvcc 符合标准,您应该可以像这样检查 __cplusplus 的值

#if __cplusplus >= 201103
#define C11SUPPORTED 1
#else
#define C11SUPPORTED 0
#endif

检查 __cplusplus 的值应该适用于 任何 C++ 编译器,至少从 C++98 开始。