C++ 广义lambda捕获宏
我想使用C++14中引入的广义lambda捕获(请参阅以获取解释)。然而,我的代码的其余部分是C++11友好的。我想做一些类似于C++ 广义lambda捕获宏,c++,c++11,lambda,c++14,C++,C++11,Lambda,C++14,我想使用C++14中引入的广义lambda捕获(请参阅以获取解释)。然而,我的代码的其余部分是C++11友好的。我想做一些类似于 #ifdef CPP14 // move capture in lambda #else // capture by-value #endif 但是,没有好的交叉编译器标志来推断版本。有什么建议吗?(当然,除了定义我自己的宏之外)事实上,C++11 FDI在这篇文章中说,T.C.是正确的 < >编译C++翻译单元时,名称为.pCPLUS PLUS为定义为值20110
#ifdef CPP14
// move capture in lambda
#else
// capture by-value
#endif
但是,没有好的交叉编译器标志来推断版本。有什么建议吗?(当然,除了定义我自己的宏之外)事实上,C++11 FDI在这篇文章中说,T.C.是正确的 < >编译C++翻译单元时,名称为.pCPLUS PLUS为<强>定义为值201103L/StUn>。p> 脚注指出: 本标准的未来版本将用更大的值取代该宏的值。不符合要求的编译器应使用最多五位小数的值 因此,使用以下代码对我来说是完全合法的
#if __cplusplus > 201103L
//c++1y or above
#else
//c++11 or below
#endif
但是,某些编译器可能不遵循该标准,您可能需要检查c++1y的\u cplusplus
值是否已递增
例如,GCC在版本4.7.0之前一直将此标志设置为1
如果您需要更多关于
\u cplusplus
标志的信息,您应该看看也许是相关的:GCC显然将此作为GNU扩展。我认为Boost.Phoenix也有这一点。“没有好的交叉编译器标志来推断版本”-总是有\uuu cplusplus
的值。