gpt4 book ai didi

c++ - VS2015 支持 magic statics,为什么会出现这个警告?

转载 作者:搜寻专家 更新时间:2023-10-31 00:57:49 25 4
gpt4 key购买 nike

我正在从 VS2013 升级到 VS2015 并收到以下警告。我以为 VS2015 实现了魔术静态,因此本地静态对象应该是线程安全的,这是怎么回事?

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\system_error(698): error C2220: warning treated as error - no 'object' file generated
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\system_error(704): note: see reference to function template instantiation '_Ty &std::_Immortalize<std::_Generic_error_category>(void)' being compiled
with
[
_Ty=std::_Generic_error_category
]
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\system_error(698): warning C4640: '_Static': construction of local static object is not thread-safe

错误出现在 VS 安装文件夹的 system_error header 中。错误在这个函数中:

template<class _Ty> inline
_Ty& _Immortalize()
{ // return a reference to an object that will live forever
static _Immortalizer<_Ty> _Static;
return (*reinterpret_cast<_Ty *>(&_Static._Storage));
}

这就是错误中的所有上下文,我看不到 system_error 实际包含在哪里。

编译器标志是:

/Yu"stdafx.h" /GS /analyze /W3 /wd"4481" /wd"4251" /Zc:wchar_t 
/Zi /Gm- /O2 /sdl /Fd"x64\Release\\Release_vc140.pdb" /Zc:inline /fp:precise
/errorReport:prompt /WX /Zc:forScope /Gd /MT /Fa"x64\Release\" /EHsc /nologo /Fo"x64\Release\" /Fp"x64\Release\MyProj.pch"

更新

抱歉,现在似乎已经修复了。看起来我使用的是 v140_xp 工具集,但 TargetPlatformVersion 是错误的。当我以为我已经把它们全部换掉的时候,这个一定是漏网了。我不太清楚为什么弄错这些会导致这个错误。无论如何,感谢迄今为止的帮助。

最佳答案

它看起来像是由变成错误的虚假警告引起的,请阅读此连接错误:

https://connect.microsoft.com/VisualStudio/feedback/details/2539759/c4640-warning-cannot-be-disabled

错误 C2220 表示您启用了/WX 开关,它告诉编译器将所有警告视为错误。

您可以通过以下方式关闭此警告:

#pragma warning (disable : 4640) 

顺便说一句。无关,但可能对您有用。您使用 _Immortalizer 作为您的类的名称,它以下划线开头,后跟大写字母。这是标准禁止的:阅读此处:What are the rules about using an underscore in a C++ identifier? .

关于c++ - VS2015 支持 magic statics,为什么会出现这个警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36695167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com