cod*_*der 5 c++ lambda gcc visual-studio-2012
可以说我有以下代码片段:
// global variable
std::thread worker_thread;
// Template function
template <typename Functor>
void start_work(Functor &worker_fn) // lambda passed by ref
{
worker_thread = std::thread([&](){
worker_fn();
});
}
Run Code Online (Sandbox Code Playgroud)
这被称为:
void do_work(int value)
{
printf("Hello from worker\r\n");
}
int main()
{
// This lambda is a temporary variable...
start_work([do_work](int value){ do_work(value) });
}
Run Code Online (Sandbox Code Playgroud)
我开始在MSVC2012上开发.这一切都很好,似乎工作.但是当我在Linux平台上移动到gcc编译器时,我得到以下(缩写)错误:
no known conversion for argument 1 '...__lambda3' to '...__lambda3&'
我的问题:
MSVC偏离标准,因为它允许匿名临时值绑定到非常量左值引用.您可以使用/Za
编译器标志("禁用语言扩展")或/permissive-
MSVC2017 的更清晰选项来关闭它.
C++标准一直很清楚,匿名临时工具只能绑定到const
引用.