在尝试使用断言宏调试问题时,我遇到了此问题。在模板类中的lambda函数上使用__declspec(noinline)会在Visual Studio 2017中生成语法警告:
错误C2760:语法错误:意外令牌'__declspec',预期为'{'
这是失败的代码:
template<class R>
class test
{
public:
void DoStuff()
{
[]() __declspec(noinline) { }; // syntax error
}
};
int WinMain(void)
{
return 0;
}
如果我转到项目设置,然后在项目属性对话框的常规部分中将平台工具集从v141(vs2017)切换到v140(vs2015),则错误消失了。
如果我将类更改为非模板类,则它也可以正确编译:
class test
{
public:
void DoStuff()
{
[]() __declspec(noinline) { }; // compiles fine
}
};
int WinMain(void)
{
return 0;
}
我很好奇为什么使用v141平台工具集无法成功。还有其他项目设置可能会影响这一点吗?
答案 0 :(得分:0)
它在VC ++ 2019中有效,所以可能只是2017年的回归?
答案 1 :(得分:0)
我能够通过将Visual Studio 2017更新到最新版本(15.9.7)来解决此问题。以前我正在运行15.6.7版。感谢所有浏览并发表评论的人! :)