广义lambda捕获的宏

时间:2014-07-08 02:55:15

标签: c++ c++11 lambda c++14

我想使用C ++ 14中引入的广义lambda捕获(有关解释,请参阅Move capture in lambda)。但是,我的其余代码是C ++ 11友好的。我想按照

的方式做点什么
#ifdef CPP14
// move capture in lambda
#else
// capture by-value
#endif

但是,没有好的交叉编译器标志来推断版本。有什么人可以建议吗? (当然,除了定义我自己的宏)

1 个答案:

答案 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