5

在更新(15.8.0)之后,我尝试像往常一样编译我的项目。我将 showincludes 设置为 yes 以找出错误的来源,但它都是系统代码。从 stdafx.cpp 开始,它会遍历所有包含和错误:

 1>Note: including file:     C:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\shared\pshpack8.h
 1>Note: including file:     C:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\shared\poppack.h
 1>Note: including file:    C:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\shared\pshpack8.h
 1>Note: including file:    C:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\shared\poppack.h
 1>Note: including file:   C:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\winrt\wrl\event.h
 1>Note: including file:    C:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\winrt\eventtoken.h
 1>Note: including file:    C:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\shared\pshpack8.h
 1>c:\program files (x86)\windows kits\10\include\10.0.17134.0\winrt\wrl\event.h(316): error C7510: 'Callback': use of dependent template name must be prefixed with 'template'
 1>c:\program files (x86)\windows kits\10\include\10.0.17134.0\winrt\wrl\event.h(324): error C7510: 'Callback': use of dependent template name must be prefixed with 'template'

有没有人见过这个?我在谷歌上下搜索以找到无济于事的答案。缺少修改windows sdk,不知道该怎么做。

编辑:在我安装的 Windows SDK 中,错误出现在文件中 -

C:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\winrt\wrl\event.h

更改第 316 行:返回 DelegateHelper::Traits::Callback(Details::Forward(callback));

to: return DelegateHelper::Traits::template Callback(Details::Forward(callback));

和第 324 行:返回 DelegateHelper::Traits::Callback(

返回 DelegateHelper::Traits::template Callback(Details::Forward(callback));

由于修改 sdk 并不是真正的解决方案,Peng Du 在配置窗口中选择 nonconformance 的解决方案是可行的方法。

4

3 回答 3

13

我有遗留项目,我并排比较了项目设置,最后我通过设置成功构建了新项目:Configuration Properties>>>C/C++LanguageConformance mode = No

于 2018-09-01T01:28:46.437 回答
11

当您使用依赖模板名称时,您必须使用template关键字,例如:

foo.template bar<T>();

typename直到某个时刻,MSVC 对使用和消歧器并不严格template,但在更新后规则已经改变。

于 2018-08-15T19:19:31.883 回答
1

问题出在 Windows 运行时库中,对 Visual Studio 的一些更改破坏了它。我在这台更新到 15.8.2 的笔记本电脑上遇到了同样的问题,我在家里运行早期版本的机器没有这样做,因为完全相同的代码在我的另一台机器上编译,它一定是 VS 中的错误,或者WRL/事件类所需的更改。

编辑:修复上面的返回值,错误在 SDK 中,你不应该禁用 /permissive- 因为这可以防止 Spectre 和其他安全增强。

于 2018-09-01T18:13:05.153 回答