0

我正在尝试使用 编译库-std=c++03,但编译失败,因为nullptr_t未定义。

如何使用硬编码宏保证 C++03 而不是 C++11 编译?

提前致谢。

4

2 回答 2

7

标准中唯一的版本检测是宏的值__cplusplus201103对于 C++11 (ISO/IEC 14882-2011 §16.8/1) 和199711对于 C++98 (ISO/IEC 14882-1998 §16.8/1) . C++03 显然不值得拥有自己的编号和用途199711(ISO/IEC 14882-2003 §16.8/1)。如果这对您来说似乎不足以作为特征检测的一种方式,那么您并不孤单

在任何情况下,您可能都需要查阅相关库的文档,以确定如何为 C++11 之前的版本配置它(如果可能的话)。

于 2013-07-23T20:00:43.303 回答
2

不幸的是,我不知道任何适用于所有编译器的宏。对于 g++ 和 clang 有一个名为的宏__GXX_EXPERIMENTAL_CXX0X__,它只在 c++11 中定义,所以你可以这样做

#ifndef __GXX_EXPERIMENTAL_CXX0X__
  // Do some c++03 specific code
#endif
于 2013-07-23T20:00:18.187 回答