将 std::map 与使用普通、非抛出、复制构造函数的类型一起使用时,会针对 xtree 中无法访问的代码抛出编译器警告/错误(警告级别 4,发布模式)。这是因为 std::map 中有一个 try-catch,它有助于在发生异常时维护树的状态,但编译器发现如果存储的元素不调用 catch 语句,将永远不会被调用扔。可以使用 .cpp 文件顶部的以下行轻松抑制这些警告:
#pragma warning(push)
#pragma warning(disable:4702)
#include <xtree>
#pragma warning(pop)
有没有办法绕过这个警告/错误而不改变警告级别、构建调试、抑制警告或在地图中使用不同的类型?有计划在标准库中改变这个吗?
更新:
也许它是特定于编译器的。我正在使用vc7。错误如下:
c:\program files\microsoft visual studio .net 2003\vc7\include\xtree(1116) : 错误 C2220: 警告被视为错误 - 没有生成“对象”文件
c:\program files\microsoft visual studio .net 2003\vc7 \include\xtree(1116) : 警告 C4702: 无法访问的代码
显然,xtree 被 std::map 使用。