【问题标题】:Visual Studio 2012 C++ compile error with Boost Signal2Boost Signal2 的 Visual Studio 2012 C++ 编译错误
【发布时间】:2012-12-28 22:35:43
【问题描述】:

我正在使用带有以下 Boost Signals2 代码的 Visual Studio 2012 Ultimate:https://github.com/cfobel/boost_signals2/blob/master/hello_world_0.cpp 它会产生以下错误:

c:\program files (x86)\microsoft visual studio 11.0\vc\include\xmemory(348): error C4996: 'std::_Uninitialized_copy0': Function call with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'Checked Iterators'
1>          c:\program files (x86)\microsoft visual studio 11.0\vc\include\xmemory(333) : see declaration of 'std::_Uninitialized_copy0'
1>          c:\libraries\boost_1_52_0\boost\signals2\detail\auto_buffer.hpp(192) : see reference to function template instantiation '_FwdIt std::uninitialized_copy<I,boost::variant<T0_,T1>*>(_InIt,_InIt,_FwdIt)' being compiled

此代码是否与 Visual Studio 2012 C++ 不兼容?仍然可以安全使用吗?最后,如何按照建议进行更改? 谢谢

【问题讨论】:

    标签: c++ visual-studio boost boost-signals2


    【解决方案1】:

    C4996 是关于使用已被标记为弃用的函数的警告。既然您将其视为错误,也许您启用了Treat Warning as Error (/WX) 选项?

    错误消息本身描述了禁用此选项的方法。将_SCL_SECURE_NO_WARNINGS 符号添加到项目的预处理器定义中。

    【讨论】:

    • 非常有帮助的答案,但没有提到“使用起来还安全吗?”。换句话说,boost::signals2 是什么原因导致了这个警告,人们应该关注它吗?
    • @sgryzko 是否安全没有通用答案,这取决于相关代码。代码是否存在可能导致缓冲区溢出的错误?如果是,那么 MSVC 功能可能会更好。如果不是,那么std::uninitialized_copy 绝对可以安全使用。在您希望能够在多个编译器上编译的任何代码中,这些警告几乎是不可能避免的,因为 MSVC 甚至会抱怨诸如 std::copy 之类的东西(它希望您使用 std::_Copy_s)。
    • @sgryzko 和 Heavy-Rocker-Dude...你们有没有解决过这个问题?我现在遇到了同样的问题:刚刚使用 boost::signals 将我的 VS2010 项目转换为 VS2013,并且这个警告无处不在。我不想关闭警告...我希望代码能够正确编译无警告。有任何想法吗?提前谢谢。
    • @DavidCarr 您可以用#pragma warning push|pop 指令包围#include &lt;boost/signals2.hpp&gt;,以仅针对该代码禁止这些警告。或者我想您可以开始编辑 Boost 标头以使用 MSVC 希望您使用的这些功能的版本。
    • @Praetorian: 烦人的是,如果你只是将 boost 标头包装在 #pragmas 中,来自 MSVC 的警告可能不会被抑制,因为它稍后会在模板实例化站点归咎于 xmemory,并且通常是由较早的导入引入的,没有 pragma 包装器。它很快演变成打地鼠游戏。
    猜你喜欢
    • 2015-04-12
    • 1970-01-01
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多