我想在編譯時使用模板部分特化來計算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
你的數學在這裏不起作用。 –