只是向TMPing介绍自己,并遇到了一个怪癖
我只是想学习初学者的语法,以及当我在VS2008中编写这么短的代码时它是如何工作的。下面的代码用于添加数字1到499,但如果我添加1到500,编译器错误给我:
fatal error C1001: An internal error has occurred in the compiler.
而我只是想知道为什么会这样。编译器可以生成多少代码或者某些东西是否有一些限制,它恰好是我的一个很好的整数500?
#include <iostream>
using namespace std;
template < int b >
struct loop {
enum { sum = loop< b - 1 >::sum + b };
};
template <>
struct loop< 0 > {
enum { sum = 0 };
};
int main() {
cout << "Adding the numbers from 1 to 499 = " << loop< 499 >::sum << endl;
return 0;
}
没有找到相关结果
已邀请:
3 个回复
磐剩
,至少在我的机器上我设法用一个(略好一点)警告消息重现你的问题。编译
工作正常,但试图编译
失败。 如果您正在使用gcc(或g ++),解决方案是使用
编译它(其中##是允许的最大深度)。 例如,编译
,最大模板递归深度为2000
或者将代码转换为:
(但我承认上面的代码不能帮助你学习模板元编程)
磐乓铝举
蹄渭信妥扳