這裏是我當前的代碼:C++元編程急於評價
template<int n>
struct N{
static const int k = (n >= 2) ? (1 + N<n-2>::k) : N<0>::k;
};
template<>
struct N<0>{
static const int k = 0;
};
下編譯:
int main(int, char *[])
{
cout << N<2>::k;
getchar();
}
下無法編譯:
int main(int, char *[])
{
cout << N<1>::k;
getchar();
}
是編譯器的熱切計算?:操作符的右分支?如果是這樣,我怎麼才能讓它懶洋洋地評價?
什麼是編譯錯誤? – pippin1289
錯誤是:錯誤C1202:遞歸類型或函數依賴關係上下文過於複雜。 我期待if語句只評估所需的分支。 –
簡單:添加基本案例N <1>,因爲奇數不會碰到N <0>。 – knivil