我想使用C ++ 14中引入的广义lambda捕获(有关解释,请参阅Move capture in lambda)。但是,我的其余代码是C ++ 11友好的。我想按照
的方式做点什么#ifdef CPP14
// move capture in lambda
#else
// capture by-value
#endif
但是,没有好的交叉编译器标志来推断版本。有什么人可以建议吗? (当然,除了定义我自己的宏)
答案 0 :(得分:2)
实际上T.C.是的,C ++ 11 FDIS在"16.8 Predefined macro names [cpp.predefined]"中说
在编译C ++翻译单元时,名称__cplusplus 被定义为值201103L 。
脚注指出:
此标准的未来版本旨在用更大的值替换此宏的值。不合格的编译器应使用最多五位小数的值。
所以使用以下代码对我来说似乎完全合法。
#if __cplusplus > 201103L
//c++1y or above
#else
//c++11 or below
#endif
但是,某些编译器可能不遵循该标准,您可能想要检查{1}}值是否已增加c ++ 1y。
例如,GCC将此标志设置为1,直到版本4.7.0。
如果您需要有关_cplusplus
标记的更多信息,请查看this question