c++ - 模板类中的 lambda 函数上的 __declspec(noinline) 在 VS2017 中引发语法错误
问题描述
在尝试使用断言宏调试问题时,我遇到了这个问题。在模板类中的 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 平台工具集不会成功。是否有其他项目设置可能会影响这一点?
解决方案
我能够通过将 Visual Studio 2017 更新到最新版本 (15.9.7) 来解决此问题。以前我运行的是 15.6.7 版。感谢所有关注和评论的人!:)
推荐阅读
- minizinc - Minizinc 在求解过程中跟踪数组
- selenium - 有没有办法直接在步骤定义中传递数据而不传递特征文件?
- hy - if 和 cond 有什么区别?
- git - 是否可以不显示来自特定文件夹的 git status 更改?
- ios - 如何在 Swift 中创建包含标签和文本字段的 UIView 类?
- python - 这是神经网络的正确输入吗?
- c++ - 向量
作为类成员变量 - ios - ViewController #2 关闭后如何在 ViewController #1 中重新加载数据()?
- f# - 如何使用 Deedle 从某个键及以下获取每一行?
- c# - ReactiveUI 在子 ViewModel 的属性更改时通知