C++;11支持 我有一个C++软核,用不同的OSE、平台和编译器编译。现在,编译器有时会出现bug,例如,这意味着gcc版本4.6.4之前和4.7.3之前是不可能的。现在我可以包括一个单元测试来展示这个bug(也许这个问题会揭示这确实是我应该做的),但这是一个乏味的任务:编译器bug有时很难重新编译,而将其转换为单元测试可能也不容易。。。这时你手头就有了平台和编译器

C++;11支持 我有一个C++软核,用不同的OSE、平台和编译器编译。现在,编译器有时会出现bug,例如,这意味着gcc版本4.6.4之前和4.7.3之前是不可能的。现在我可以包括一个单元测试来展示这个bug(也许这个问题会揭示这确实是我应该做的),但这是一个乏味的任务:编译器bug有时很难重新编译,而将其转换为单元测试可能也不容易。。。这时你手头就有了平台和编译器,c++,c++11,build,C++,C++11,Build,我要找的是一个存储库,它告诉我哪些版本的g++、clang++和msvc++在支持C++11时存在致命的错误(我不是说缺少特性,当特性不存在时,我会解决它们)。然后,在构建系统中使用它们进行构建时,我会发生致命的崩溃。一个很好的特性是,我甚至不必为了禁止一个编译器而碰到一个bug(所以我可以避免将来的麻烦) 有这样一个列表吗?这可能不是你想要的答案,但我相信正确的处理方法是有一个白名单,而不是黑名单。换句话说,要有一个您知道可以使用的编译器列表,如果客户尝试使用与您测试过的版本不同的版本进行构建

我要找的是一个存储库,它告诉我哪些版本的g++、clang++和msvc++在支持C++11时存在致命的错误(我不是说缺少特性,当特性不存在时,我会解决它们)。然后,在构建系统中使用它们进行构建时,我会发生致命的崩溃。一个很好的特性是,我甚至不必为了禁止一个编译器而碰到一个bug(所以我可以避免将来的麻烦)


有这样一个列表吗?

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

不支持此编译器,请参阅 有关 我们支持的编译器。如果选择继续使用此编译器, 尽管这样做,但不要指望我们的团队会全力支持 如果发现问题,请提供技术支持

我这样说的原因是:

  • 您将无法证明除黑名单上的版本之外的所有版本都正常工作。然而,对于任何测试用例,您都可以证明编译器X版本a.b.c-d是有效的[这并不意味着此编译器没有bug-只是您在测试中没有碰到任何bug!]
  • 即使编译器是“已知良好”(无论定义什么标准),您的特定代码也可能触发影响代码的bug 任何足够大的软件(或硬件)产品都会有bug。您只能通过测试来证明您的软件工作正常。依赖外部“编译器X的某某版本中存在已知错误”将无法帮助您避免影响代码的错误。话虽如此,大多数编译器都经过了很好的测试,因此您(通常)需要做一些非常不寻常/复杂的事情,以使编译器失败。

    调查,尤其是头部


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

    每个编译器团队都有自己的公共bug跟踪器。是否包括MSVC缺少正确模板提示之类的bug?因为这不会很快改变。因为你运行了3个编译器,如果其中2个使用一个功能,而不是第三个,那么第三个编译器很可能缺乏支持或者有bug。即使在C++98中,代码相对较大,也可能会遇到不同编译器之间的不兼容,因此必须采取措施。为多个编译器制作一个列表会很痛苦。这不包括(愚蠢!!!)在一个我不想命名的编译器中没有实现正则表达式,以及至少有两个编译器的时钟出错(afaik 1只有一个时钟,所有3个编译器都有一个时钟)另一个有稳定的时钟,但不稳定:)-我的意思是很难测试这个错误,特别是稳定的时钟,所以你需要找到一个错误列表…@nosenseal:它确实涵盖了这一点。如果没有实现regex,我很确定代码要么不会编译,要么至少测试regex会因为没有得到正确的结果而显示为错误。假设您有一些合理的方法来测试混乱的时钟,而不是首先依赖于时钟实现是否正确,我们也可以进行测试[例如,可以从网络时间服务器请求时间,运行一些生产代码X个时间量,然后再次从时间服务器请求时间,验证差异是否太大……实际上,编译器以返回false或true而闻名(我不记得很清楚)对于所有正则表达式:)但它确实编译:)好吧,然后你测试一些应该产生其他值的东西,它会显示为“不是你所期望的”。我同意,重点是你不想最终重新实现这些编译器的测试,所以bug列表是有用的。:)还有“已实现的atm”列表:)我会看一看。我相信boost的家伙们是最新的,并且会非常认真地使用编译器。