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

Gur*_*pof 4 c++ build c++11

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

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

这样的清单是否存在?

Mat*_*son 14

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

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

我说这个的原因是:

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

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