tow*_*owi 32 c++ gcc standards-compliance c++-standard-library c++11
Gnu C++编译器似乎定义__cplusplus为1
#include <iostream> 
int main() {
  std::cout << __cplusplus << std::endl;
}
这1在标准c ++模式下以gcc 打印,在C++ 0x模式下打印,使用gcc 4.3.4和gcc 4.7.0.
C++ 11 FDIS在"16.8预定义宏名[cpp.predefined]"中说
编译C++转换单元时,名称
__cplusplus定义为值201103L.(脚注:本标准的未来版本将以更大的值替换此宏的值.不合格的编译器应使用最多五位小数的值.)
旧的std C++ 03也有类似的规则.
GCC是否将此设置为1,因为它"不符合"?
通过阅读该列表,我认为__cplusplus如果我有一个支持C++ 11的编译器,我可以使用以便携方式检查.但是使用g ++这似乎不起作用.我知道...EXPERIMENTAL...宏,但很好奇为什么g ++以__cplusplus这种方式定义.
我最初的问题是在不同的空指针变体之间切换.像这样的东西:
#if __cplusplus > 201100L
#  define MYNULL nullptr
#else
#  define MYNULL NULL
#endif
是否有一种简单且合理的便携式方式来实现这样的开关?
Kus*_*nda 30
这是在一个月前修复的(对于gcc 4.7.0).错误报告提供了一个有趣的读物:http://gcc.gnu.org/bugzilla/show_bug.cgi?id = 1773