一个必定使vc2005sp1编译器崩溃的代码
template <int n>
struct s
{
enum { value = s <n-1> ::value };
};
template <>
struct s <0>
{
enum { value = 0 };
};
int main()
{
s <490> ::value;
}
一直以来,我都相信,vc的编译器代码是拼凑出来。
[解决办法]
这个gcc支持的特化也不高
刚才用vc9测试了一下,支持到499;
[解决办法]
intel9.1支持到2000.
这个话题稍微没意义了点。
[解决办法]
特殊化递归层数在C++标准上并没有什么规定,只是“建议”了一个很小的数值,
490导致vc无法编译是很正常的,不值得大惊小怪.
至于VC编译器的拼凑之说,顶多只能算揣测吧,从前不好说,但在Stanley B. Lippman
这个C++世界的顶尖高手加盟微软以后,主持新版VC编译器的开发,应该说,VC的品质
已经有了质的飞跃
[解决办法]
难道这就是传说中的递归模版?
[解决办法]
恩,传说中的
[解决办法]
我的意思,他应该出提示,而不是crash.
-------
我的VC只报错, 不crash, 可以支持到495层.
[解决办法]
VC2003.net
s <1073> ::value;可以 s <1074> ::value;不行
呵呵
[解决办法]
可能有些模板元的狂热者喜欢这种东西,编译的时间足以等死人。
[解决办法]
那我还是不试了,偶机器慢。
[解决办法]
不会吧
我编译的时间几乎是瞬时的..
[解决办法]
这种问题都被发现了?
[解决办法]
模板嵌套递归
[解决办法]
原来如此.
[解决办法]
模板的递归不单单是一种极限测试, 它实际上作用很大.
只是还没有一款真正好的编译器去支持