3
我想了解模板和具體的變量模板。考慮到這一點:可變模板部分專業化和constexpr
template<int M, int N>
const int gcd1 = gcd1<N, M % N>;
template<int M>
const int gcd1<M, 0> = M;
std::cout << gcd1<9, 6> << "\n";
它打印0
這是錯誤的。但是,如果我使用constexpr
而不是const
以上,我會得到正確答案3
。我再次得到結構模板的正確答案:
template<int M, int N>
struct gcd2 {
static const int value = gcd2<N, M % N>::value;
};
template<int M>
struct gcd2<M, 0> {
static const int value = M;
};
std::cout << gcd2<9, 6>::value << "\n";
我在做什麼錯?
編輯: gcd1
也沒有基本情況專業化編譯罰款。怎麼來的?我正在使用Visual Studio 2015.
你使用哪種編譯器? –
我正在使用Visual Studio 2015(更新3) – winterlight
GCC 6.3爲第一個片段提供了正確的結果。可能是Visual C++的東西。 – DeiDei