Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.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函数的declspec(noinline)在VS2017中抛出语法错误_C++_Templates_Visual C++_Lambda_Declspec - Fatal编程技术网

C++ __模板类内lambda函数的declspec(noinline)在VS2017中抛出语法错误

C++ __模板类内lambda函数的declspec(noinline)在VS2017中抛出语法错误,c++,templates,visual-c++,lambda,declspec,C++,Templates,Visual C++,Lambda,Declspec,在尝试调试assert宏的问题时,我遇到了这个问题。在模板类中的lambda函数上使用_declspec(noinline)会在Visual Studio 2017中生成语法警告: 错误C2760:语法错误:意外标记“\uuu declspec”,应为“{” 这是失败的代码: 模板 课堂测试 { 公众: void DoStuff() { []()declspec(noinline){};//语法错误 } }; int WinMain(无效) { 返回0; } 如果在“项目属性”对话框的“常规”

在尝试调试assert宏的问题时,我遇到了这个问题。在模板类中的lambda函数上使用_declspec(noinline)会在Visual Studio 2017中生成语法警告:

错误C2760:语法错误:意外标记“\uuu declspec”,应为“{”

这是失败的代码:

模板
课堂测试
{
公众:
void DoStuff()
{
[]()declspec(noinline){};//语法错误
}
};
int WinMain(无效)
{
返回0;
}
如果在“项目属性”对话框的“常规”部分中转到“项目设置”并将平台工具集从v141(vs2017)切换到v140(vs2015),错误就会消失

如果我将该类更改为非模板类,它也会正确编译:

类测试
{
公众:
void DoStuff()
{
[]()declspec(noinline){};//编译良好
}
};
int WinMain(无效)
{
返回0;
}

我很好奇为什么使用v141平台工具集无法成功。是否有其他项目设置可能会影响这一点?

它在VC++2019中工作,因此可能只是2017年的回归?

我通过将Visual Studio 2017更新为最新版本(15.9.7)解决了这一问题以前我运行的版本是7.67..感谢所有查看和评论的人!):< /p>α-DEXECUTC不是官方的C++,它是微软的扩展。我从来没想过把它放在那里,有文件证明这应该起作用吗?