我想在编译时使用模板部分特化来计算GCD。 以下代码可以与clang3.8一起使用,但不能与gcc7.1一起使用。使用GCC,它将进入递归模板实例化而不会意识到终止情况。gcc的C++部分模板专业化问题
template <int N, int M>
struct GCD{
static const int value = (N>M)? GCD<N%M, M>::value : GCD<N, M%N>::value;
};
template <int M>
struct GCD<0, M>{
static const int value = M;
};
template <int M>
struct GCD<M, 0>{
static const int value = M;
};
int main()
{
static_assert(GCD<12,15>::value == 3, "Error");
}
谁在这里表现得很健全?
也许只做一个双参数'GCD'结构的前向声明,定义在专业化之下。因为在第一次定义的时候编译器并不真正了解这两个专业领域。虽然我不知道哪个编译器是正确的。 –
请注意,在C++ 17中,''标头中会有['gcd'](http://en.cppreference.com/w/cpp/numeric/gcd)功能。 –
InternetAussie
你的数学在这里不起作用。 –