私はテンプレートと変数テンプレートを理解しようとしています。これを考慮してください:可変テンプレート部分特殊化と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
を印刷します。しかし、上記のconst
の代わりにconstexpr
を使用すると、適切な回答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