C++ __模板类内lambda函数的declspec(noinline)在VS2017中抛出语法错误
在尝试调试assert宏的问题时,我遇到了这个问题。在模板类中的lambda函数上使用_declspec(noinline)会在Visual Studio 2017中生成语法警告: 错误C2760:语法错误:意外标记“\uuu declspec”,应为“{” 这是失败的代码: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; } 如果在“项目属性”对话框的“常规”
模板
课堂测试
{
公众:
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++,它是微软的扩展。我从来没想过把它放在那里,有文件证明这应该起作用吗?