小编Joh*_*uck的帖子

为什么此模板参数无法推导?

编辑:我在使用SFINAE时犯了一个简单的错误.修复解决了我在下面提到的编译器错误.但是我仍然很好奇为什么在这种情况下不能推导出模板参数.

我想写一个C++ 14模板元程序来计算a的最大公约数(GCD)std::integer_sequence.经过一些修修补补后,我想出了这个几乎完整的例子:

template <typename T, T A, T B, T... Ints>
struct GCD<std::integer_sequence<T, A, B, Ints...>> : 
       GCD<typename std::integer_sequence<T, GCD_pair<T, A, B>::value, Ints...>> {};

template <class T, T A, T B>
struct GCD<std::integer_sequence<T, A, B>> : 
       GCD_pair<T, A, B> {};

int main() {      
  using seq = std::integer_sequence<int, 65537, 5, 10>;
  cout << GCD<seq>::value << endl;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我只是剥离整数序列的前两个元素,并使用待写GCD_pair元函数找到它们的GCD .然后我申请GCD结果GCD_pair和剩下的元素.

"明显"的实现GCD_pair不编译:

// This does not …
Run Code Online (Sandbox Code Playgroud)

c++ templates compiler-errors template-meta-programming c++14

5
推荐指数
1
解决办法
452
查看次数