繁体   English   中英

用于C ++ 11支持的错误编译器版本的存储库

[英]Repository of buggy compiler versions for C++11 support

我有一个C ++软件,可以使用不同的操作系统,平台和编译器进行编译。 现在有时编译器会出现错误,例如这个错误,这意味着gcc版本4.6.4之前和4.7.3之前是不行的。 现在我可以包含一个显示错误的单元测试(也许这个问题将揭示确实这就是我应该做的事情),但这是一项繁琐的工作:编译器错误有时难以重现并且将其转换为单元测试可能不会很容易......当你手头有平台和编译器时就是这样。

我正在寻找的是一个存储库,告诉我哪些版本的g ++,clang ++和msvc ++遭受了支持C ++ 11的致命错误(我不是在谈论缺少的功能,当功能不存在时我会解决它们) 。 在构建系统中使用它们构建时,我会致命崩溃。 不错的功能是,我甚至没有被迫发现一个禁止编译器的bug(所以我为自己节省了未来的麻烦)。

这样的清单是否存在?

这可能不是您正在寻找的答案,但我相信处理这个问题的正确方法是使用白名单,而不是黑名单。 换句话说,有一个你知道可以工作的编译器列表,如果客户尝试使用与你测试过的版本不同的版本进行构建,你会发出一条警告消息,作为构建脚本的一部分,说明如下:

不支持此编译器,请参阅http://www.example.com/list_of_supported_compilers.html以获取我们支持的编译器列表。 如果您选择继续使用此编译器,请随意执行此操作,但如果您发现问题,请不要期望我们的技术支持提供全面支持。

我说这个的原因是:

  1. 您将无法证明除黑名单之外的每个版本都能正常工作。 但是,对于你所拥有的任何测试用例,你可以证明编译器X版本abc-d有效[这并不意味着这个编译器没有错误 - 只是你没有在你的测试中遇到任何这些错误!]
  2. 即使编译器“已知良好”(通过任何定义的标准),您的特定代码也可能会触发影响代码的错误。

任何足够大的软件(或硬件)产品都会有错误。 您只能通过测试来证明您的软件是有效的。 依赖于外部“版本中存在已知的错误,例如编译器X”将无法帮助您避免影响代码的错误。 话虽如此,大多数编译器都经过了相当好的测试,因此您(通常)需要做一些相当不寻常/复杂的事情来使编译器失败。

调查Boost.Config ,特别是头文件<boost/config.hpp>

这包括一大堆宏,用于各种编译器(以及它们的不同版本),它们指示哪些C ++功能已启用,已损坏等。它还包括一个全面的测试套件,可用于测试任何新编译器的缺失功能等等

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM