什么是C ++ 03宏?

时间:2013-07-23 19:53:00

标签: c++ c macros c++03

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

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

提前致谢。

2 个答案:

答案 0 :(得分:6)

标准中唯一的版本检测是宏__cplusplus的值:{+ 1}}用于C ++ 11(ISO / IEC14882-2011§16.8/ 1)和{{1}对于C ++ 98(ISO / IEC14882-1998§16.8/ 1)。 C ++ 03显然不值得拥有自己的数字,并且也使用201103(ISO / IEC14882-2003§16.8/ 1)。如果这对您来说似乎不适合作为特征检测手段,you're not alone

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

答案 1 :(得分:1)

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

#ifndef __GXX_EXPERIMENTAL_CXX0X__
  // Do some c++03 specific code
#endif