Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 广义lambda捕获宏_C++_C++11_Lambda_C++14 - Fatal编程技术网

C++ 广义lambda捕获宏

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

我想使用C++14中引入的广义lambda捕获(请参阅以获取解释)。然而,我的代码的其余部分是C++11友好的。我想做一些类似于

#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
的值。