[英]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以获取我们支持的编译器列表。 如果您选择继续使用此编译器,请随意执行此操作,但如果您发现问题,请不要期望我们的技术支持提供全面支持。
我说这个的原因是:
任何足够大的软件(或硬件)产品都会有错误。 您只能通过测试来证明您的软件是有效的。 依赖于外部“版本中存在已知的错误,例如编译器X”将无法帮助您避免影响代码的错误。 话虽如此,大多数编译器都经过了相当好的测试,因此您(通常)需要做一些相当不寻常/复杂的事情来使编译器失败。
调查Boost.Config ,特别是头文件<boost/config.hpp>
。
这包括一大堆宏,用于各种编译器(以及它们的不同版本),它们指示哪些C ++功能已启用,已损坏等。它还包括一个全面的测试套件,可用于测试任何新编译器的缺失功能等等
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.