[[deprecated]] 在 Visual Studio 中导致错误而不是警告

met*_*ter 5 c++ attributes

根据cppreference [[deprecated("message string")]]我们应该能够使用该符号,但在 VS 中会导致错误。

例如,我不想在 UNICODE 构建中为 ANSI 方法发出警告,反之亦然:

#ifdef UNICODE
[[deprecated("This method does not work well in UNICODE builds")]]
#endif // UNICODE
    void f() {}
Run Code Online (Sandbox Code Playgroud)

编译器不允许我编译,但标准说该属性应该允许使用但会发出警告消息。

如何解决这个问题?,顺便说一句。我的项目设置为最大程度地符合标准。

VS违反标准的原因是什么,有没有更好的方法来对上述情况发出警告?

pma*_*7pg 10

聚会已经很晚了,但这花了我今天早上几个小时。

默认情况下,Visual Studio 和 sdl(安全开发生命周期)编译标志将其视为 [[deprecated]]错误。不管你同意不同意,他们就是这么做的。

要解决此问题,请转到Configuration Properties -> C/C++ -> Command Line并添加/sdl /w34996

/wX 部分代表警告的严重性,其余部分是您要报告为警告的错误。

我希望这可以节省人们一些时间。


Gon*_*n I 5

我能够通过添加让编译器将 [[deprecated]] 视为警告

/w34996

编译器选项,如以下链接的响应中所建议

https://developercommunity.visualstudio.com/content/problem/786502/cant-treat-deprecated-warning-as-warning-with-wx.html