我正在尝试专门理解模板和变量模板。考虑一下:
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。