请注意,这不是How write a unit test for verifying compiling error?的副本,因为我不关心测试外部库或编译器本身的正确性。

在C++中,特别是在处理模板时,通常采用防止某些特定代码段被编译的技术。由于这些问题可能会令人费解,因此,确保特定代码段确实确实产生编译器错误的最佳方法是什么?

由于测试甚至不应该编译,因此您不能依赖boost-test之类的东西,所以我想应该将其集成到构建系统中吗?通常如何处理这些问题?

最佳答案

以类似编写编译器测试的方式进行。您将以某种脚本语言(shell,perl,tcl等)进行一些测试代码,这些代码将在给定的代码片段上运行编译器,并检查是否正确编译了正确的代码。

  • gcc使用DejaGnu,它是在expect之上构建的,shUnit2本身是在Tcl之上构建的。
  • 如果您使用shell脚本(可能更简单,DejaGnu可能会过大),则可能需要查看ojit_a。
  • Perl的Test::Harness系统应基本上易于使用。
  • 毕竟,从C++运行过程并不需要太多工作,因此编写一个函数来尝试在给定的字符串上调用编译器,并检查它是否在错误的行中输出错误,您认为这不会那么困难,而且可以将其集成到其他基于boost.test的测试中。
  • 关于c++ - 如何对模板代码的故意编译错误进行单元测试,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7282350/

    10-11 22:38
    查看更多