我遇到了一个很奇怪的症状。谁能告诉我根本原因是什么?
我的 VC++ 编译器版本是最新的:“Microsoft Visual C++ 2010 : 01019-532-2002102-70860”
重现步骤:
- 创建一个空的win32控制台项目
- 添加一个名为 main.cpp 的新 cpp 文件
- 将以下代码粘贴到 main.cpp
- 编译
- 编译器崩溃并报告以下消息:
\bug\main.cpp(54893757):致命错误 C1001:编译器发生内部错误。(编译器文件'msc1.cpp',第 1420 行)
要解决此问题,请尝试在上面列出的位置附近简化或更改程序。请在 Visual C++ 帮助菜单上选择技术支持命令,或打开技术支持帮助文件以获取更多信息。
此错误发生在注入的文本中:
d:\bug\main.cpp(63) : 请参阅使用 [ T=int ] 编译的函数模板实例化 'XDummy Test(T)' 的参考
构建失败。
下面是 main.cpp 的源代码:
#include <vector>
template<class It_>
struct trait_dummy
{
static const int value = std::tr1::is_convertible<typename iterator_traits<It_>::iterator_category, int>::value;
};
template<class It_>
class X
{
public:
template<class T_>
X(T_& rColl)
{}
};
template<class T_>
X<typename T_::iterator> f(T_ rColl, std::false_type)
{
return X<typename T_::iterator>(rColl);
}
template<class T_>
auto f(T_& rColl) -> decltype(f(rColl, std::false_type()))
{
return f(rColl, std::false_type());
}
template<class It_>
X<It_> f(It_ first, size_t nSize, typename std::tr1::enable_if<trait_dummy<It_>::value>::type* dummy = 0)
{
return X<It_>(first, first + nSize);
}
class XTest
{
public:
void foo()
{
auto v = f(m_Suite);
}
std::vector<int> m_Suite;
};
const int g_dummy = 0;
class XDummy
{
public:
XDummy(int, int, int, int dummy = g_dummy)
{}
};
template<class T>
XDummy Test(T)
{
return XDummy(0, 0, 0);
}
int main()
{
Test(0);
//XTest().foo();
return 0;
}