我在使用C ++的Visual Studio 2015中遇到了编译器崩溃和智能误报。
在功能块中编写时,这会使编译器崩溃:
if();
这是编译时显示的对话框(我使用的是德语版本的Windows):
即使编译器崩溃,我也会得到错误列表输出:
错误C2059语法错误:')'
警告C4390';':找到空的受控语句;这是意图吗?
错误C1903无法从先前的错误中恢复;停止编译
在地图模式下,这会在垂直滚动条中产生花键和错误注释,但没有实际的智能错误:
#include <vector>
struct S { std::vector<S> Children; };
int main(int argc, char* argv[]) {
S item;
item.Children.push_back(S());
// ^
// Error: no instance of overloaded function
// "std::vector<_Ty, _Alloc>::push_back [with _Ty=S, _Alloc=std::allocator<S>]"
// matches the argument list
// argument types are: (S)
// object type is: std::vector<S, std::allocator<S>>
S& back = item.Children.back();
// ^^^^
// Error: a reference of type "S &" (not const-qualified) cannot be
// initialized with a value of type "S"
return 0;
}
是那些错误吗?他们知道吗?你可以复制它们吗?
对于第一种情况:编译器不应崩溃,而只需发出您显示的诊断即可。是的,那是一个错误。这在VS2013 btw中不会发生。在这里提交报告
对于第二种情况:它与VS2013中的情况相同,这是由于在S内嵌套了一个向量S所致。这种情况和其他情况下,错误曲线的显示不正确,实际上并不少见。但是理想情况下不应发生这种情况,因此您也可以为其提交错误报告,尽管由于编译器团队通常将重点放在更紧急的情况下,它可能会被标记为“ wontfix”。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句