更新 visual studio 2017,现在出现编译错误 C7510: 'Callback': use of dependent template name must be prefixed with 'template'
Update visual studio 2017, now getting compile error C7510: 'Callback': use of dependent template name must be prefixed with 'template'
我尝试在更新 (15.8.0) 后像往常一样编译我的项目。我将 showincludes 设置为 yes 以找出错误的来源,但它都是系统代码。从 stdafx.cpp 开始,它遍历所有包含和错误输出:
1>Note: including file: C:\Program Files (x86)\Windows Kits\Include.0.17134.0\shared\pshpack8.h
1>Note: including file: C:\Program Files (x86)\Windows Kits\Include.0.17134.0\shared\poppack.h
1>Note: including file: C:\Program Files (x86)\Windows Kits\Include.0.17134.0\shared\pshpack8.h
1>Note: including file: C:\Program Files (x86)\Windows Kits\Include.0.17134.0\shared\poppack.h
1>Note: including file: C:\Program Files (x86)\Windows Kits\Include.0.17134.0\winrt\wrl\event.h
1>Note: including file: C:\Program Files (x86)\Windows Kits\Include.0.17134.0\winrt\eventtoken.h
1>Note: including file: C:\Program Files (x86)\Windows Kits\Include.0.17134.0\shared\pshpack8.h
1>c:\program files (x86)\windows kits\include.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\include.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\Include.0.17134.0\winrt\wrl\event.h
更改了第 316 行:return DelegateHelper::Traits::Callback(Details::Forward(callback));
至:return DelegateHelper::Traits::template回调(详细信息::转发(回调));
和第 324 行:return DelegateHelper::Traits::Callback(
到returnDelegateHelper::Traits::template回调(详情::转发(回调));
由于修改sdk并不是真正的解决方案,Peng Du在配置中选择不一致的解决方案window是可行的方法。
当您使用依赖模板名称时,您have to use a template
keyword,例如:
foo.template bar<T>();
直到某个时候 MSVC 对使用 typename
和 template
消歧器并不严格,但更新后规则发生了变化。
我有遗留项目,我并排比较了项目设置,最后我通过设置成功构建了新项目:Configuration Properties
> C/C++
> Language
> Conformance mode = No
问题出在 Windows 运行时库中,对 Visual Studio 的一些更改破坏了它。我在这台更新到 15.8.2 的笔记本电脑上遇到了同样的问题,我家里的机器 运行 较早的版本不会这样做,因为完全相同的代码在我的另一台机器上编译,它一定是一个错误在 VS 中,或 WRL/event class.
中需要的更改
编辑:修复上面的 return 值有效,错误存在于 SDK 中,您不应该禁用 /permissive- 因为这可以防止 Spectre 和其他安全增强。
我尝试在更新 (15.8.0) 后像往常一样编译我的项目。我将 showincludes 设置为 yes 以找出错误的来源,但它都是系统代码。从 stdafx.cpp 开始,它遍历所有包含和错误输出:
1>Note: including file: C:\Program Files (x86)\Windows Kits\Include.0.17134.0\shared\pshpack8.h 1>Note: including file: C:\Program Files (x86)\Windows Kits\Include.0.17134.0\shared\poppack.h 1>Note: including file: C:\Program Files (x86)\Windows Kits\Include.0.17134.0\shared\pshpack8.h 1>Note: including file: C:\Program Files (x86)\Windows Kits\Include.0.17134.0\shared\poppack.h 1>Note: including file: C:\Program Files (x86)\Windows Kits\Include.0.17134.0\winrt\wrl\event.h 1>Note: including file: C:\Program Files (x86)\Windows Kits\Include.0.17134.0\winrt\eventtoken.h 1>Note: including file: C:\Program Files (x86)\Windows Kits\Include.0.17134.0\shared\pshpack8.h 1>c:\program files (x86)\windows kits\include.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\include.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\Include.0.17134.0\winrt\wrl\event.h
更改了第 316 行:return DelegateHelper::Traits::Callback(Details::Forward(callback));
至:return DelegateHelper::Traits::template回调(详细信息::转发(回调));
和第 324 行:return DelegateHelper::Traits::Callback(
到returnDelegateHelper::Traits::template回调(详情::转发(回调));
由于修改sdk并不是真正的解决方案,Peng Du在配置中选择不一致的解决方案window是可行的方法。
当您使用依赖模板名称时,您have to use a template
keyword,例如:
foo.template bar<T>();
直到某个时候 MSVC 对使用 typename
和 template
消歧器并不严格,但更新后规则发生了变化。
我有遗留项目,我并排比较了项目设置,最后我通过设置成功构建了新项目:Configuration Properties
> C/C++
> Language
> Conformance mode = No
问题出在 Windows 运行时库中,对 Visual Studio 的一些更改破坏了它。我在这台更新到 15.8.2 的笔记本电脑上遇到了同样的问题,我家里的机器 运行 较早的版本不会这样做,因为完全相同的代码在我的另一台机器上编译,它一定是一个错误在 VS 中,或 WRL/event class.
中需要的更改编辑:修复上面的 return 值有效,错误存在于 SDK 中,您不应该禁用 /permissive- 因为这可以防止 Spectre 和其他安全增强。