Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;:如何测试编译错误以检查约束 我使用模板编写了C++类型的约束。 现在我想在我的测试套件中测试它们,以便注意行为何时中断_C++_Testing_Template Meta Programming - Fatal编程技术网

C++;:如何测试编译错误以检查约束 我使用模板编写了C++类型的约束。 现在我想在我的测试套件中测试它们,以便注意行为何时中断

C++;:如何测试编译错误以检查约束 我使用模板编写了C++类型的约束。 现在我想在我的测试套件中测试它们,以便注意行为何时中断,c++,testing,template-meta-programming,C++,Testing,Template Meta Programming,像这样思考字段类 template <size_t Size> class Field { template<size_t Offset, size_t Count> Field<Count> SubString(typename std::enable_if<(Size >= Offset + Count)>::type* = 0) const { return Field<Count>(data_.substr

像这样思考
字段

template <size_t Size>
class Field {
  template<size_t Offset, size_t Count>
  Field<Count> SubString(typename std::enable_if<(Size >= Offset + Count)>::type* = 0) const {
    return Field<Count>(data_.substr(Offset, Count));
  }
}
模板
类字段{
模板
字段子字符串(typename std::enable_if=Offset+Count)>::type*=0)常量{
返回字段(数据子串(偏移量、计数));
}
}
Field(“abcde”).SubString()
不会编译,因为
在条件失败时启用\u。
我正在寻找一种检查方法

我编写了一个脚本来编译表达式并检查返回值,但是我更喜欢用C++完成。 编译器是
g++(GCC)4.8.3 20140911
。编译器相关的方法是受欢迎的

“希望用C++完成”

我不知道有什么通用的方法可以用任何编译器来实现这一点。对于您非常具体的示例,您可以修改一些内容,例如
子字符串
重载,当enable\u失败时将匹配该重载,以及对返回类型的大小进行静态断言


<>但是,对于更复杂的测试,有一个测试“系统”是很正常的,它用各种数据编译和运行各种C++程序,有时确保它们正常终止,有时不能编译。我的意思是,你最好开始研究这个,而不是为某个特定的测试而进行复杂的黑客操作,因为从长远来看,它将证明更有用、更灵活。

类似于?是的。好技术。
void()
的作用是什么?似乎不是必需的。中间的<代码> VoIDE())/代码>它是必需的,这样从
子字符串返回的类型的
运算符
的一些可能的重载以及获取
true\u type
将不会扰乱结果。它只是将两种类型分开,以确保它们不会相互作用,这在
运算符时是不需要的,
没有重载的,但要防止这种情况,对吗?是的,当有人添加
std::false_type运算符,(Field,std::true_type)
或类似的内容时,它只是防止这种情况发生