我正在尝试使用-std=c++03
编译库,但由于未定义nullptr_t
,编译失败。
如何使用硬编码宏保证C ++ 03而不是C ++ 11编译?
提前致谢。
答案 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