利用C++0x Lamda构造CPS时编译器100%CPU占用死机(ICC 11.0)
我想用CPS的方式实现尾递归,有这么一段代码:
using namespace std;
template<typename U>
int FactorialContinuation(int n, U& continuation)
{
if (n == 0) return continuation(1);
return FactorialContinuation(n - 1,
[&](int r){ return continuation(n * r); });
}
int FactorialRecursively(int n)
{
return FactorialContinuation(n - 1,
[&](int r){ return n * r;});
}
int _tmain(int argc, _TCHAR* argv[])
{
cout << FactorialRecursively(3) << endl;
_getch();
return 0;
}
只要编译,mcpcom.exe进程就会100%占用CPU并且无法响应。
我的分析:这里的参数都是作为函数参数传入的,不存在以模板参数形式传入的模板展开。所以应该不是模板展开时“爆掉”的。会不会是ICC的Bug,或者是我的代码有什么问题呢?还请各位ICC高手作出回答,谢谢!
另外,编译环境为:
VS2008(SP1) + ICC 11.0(以IA-32模式编译) + Win7(x64)