编辑:我在使用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