xml*_*lmx 8 c++ compiler-construction crash compiler-errors visual-c++-2010
我遇到了一个非常奇怪的症状.谁能告诉我根本原因是什么?
我的VC++编译器版本是最新的:"Microsoft Visual C++ 2010:01019-532-2002102-70860"
重现步骤:
\ 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;
}
Run Code Online (Sandbox Code Playgroud)
你自己尝试过任何类型的故障排除吗?
我可以使用您描述的上述源代码重现崩溃.当然,我收到了一些警告:
两者都指这一行:
auto v = f(m_Suite);
Run Code Online (Sandbox Code Playgroud)
几秒钟的故障排除发现,通过注释掉整个XTest类,代码编译并执行没有问题(最重要的是,不会崩溃编译器).这告诉我(并且应该告诉你)问题显然在XTest课堂的某个地方.
您不禁想知道这是否与正在生成的编译器错误有关.
那么,如果我们只是注释掉产生编译器错误的单行怎么样?你知道什么!代码编译并执行得很好!
所以在大约一分钟之内,我们已经将罪魁祸首缩小到一行代码.实际上,我不会花时间准确地理解你的所有代码所做的事情,因为我认为你可以从这里开始,因为你知道在哪里集中你的努力.首先修复这些IntelliSense错误,看看你的代码是否编译而不会崩溃编译器.
| 归档时间: |
|
| 查看次数: |
4366 次 |
| 最近记录: |