在尝试使用断言宏调试问题时,我遇到了这个问题。在模板类中的 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 平台工具集不会成功。是否有其他项目设置可能会影响这一点?