我正在尝试使用 编译库-std=c++03
,但编译失败,因为nullptr_t
未定义。
如何使用硬编码宏保证 C++03 而不是 C++11 编译?
提前致谢。
标准中唯一的版本检测是宏的值__cplusplus
:201103
对于 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 之前的版本配置它(如果可能的话)。
不幸的是,我不知道任何适用于所有编译器的宏。对于 g++ 和 clang 有一个名为的宏__GXX_EXPERIMENTAL_CXX0X__
,它只在 c++11 中定义,所以你可以这样做
#ifndef __GXX_EXPERIMENTAL_CXX0X__
// Do some c++03 specific code
#endif