当编译器符合Cpp0x时,是否有官方或非官方的#defines? 更好的是,对于特定的Cpp0x功能(〜#cpp0xlambda,#cpp0xrvalue等)?
(网上没有发现任何相关内容)
答案 0 :(得分:14)
对于C ++ 03,根据16.8 / 1(预定义的宏名称):
编译C ++翻译单元时,名称
__cplusplus
被定义为值199711L。
根据16.8 / 1(预定义宏名称)的C ++ 0x draft n2857:
编译C ++翻译单元时,名称
__cplusplus
定义为值[tbd]。
答案 1 :(得分:9)
__cplusplus
在C ++ 0x中,宏
__cplusplus
将被设置为与当前199711L
不同(大于)的值。
答案 2 :(得分:2)
官方规范包含__cplusplus
预处理器宏的值,但正如其他人指出的那样,这表明规范中的所有都已实现。更重要的是,没有当前的编译器(我知道)设置适当的值。规格很好,但任何规格的完全未实现的位应该被认为是暂定的;规范与广泛支持的交集是真正的“标准”。
一个相关的问题是“我怎么能判断是否至少启用了某些C ++ 0x支持?”,例如使用-std=c++0x
编译器开关。该问题的答案是特定于编译器并且可能会发生变化,但是当它们的部分C ++ 0x支持是时,GCC 4.6和Clang 2.1都设置了预处理器宏__GXX_EXPERIMENTAL_CXX0X__
(并赋予它值1
)。启用。