我想我可能在VS2013附带的MSVC ++编译器中发现了编译器错误,但这是一个我无法确定的简单案例。再加上我还在学习C ++的事实,我想在提交任何内容之前先问这里;因为老实说,我很确定这只是我做错了,导致一个不寻常的错误信息。
无论如何,我将问题减少到一个小的测试文件中:
#include <string>
#include <iostream>
std::wstring cstr_to_wstring(const char* cString) {
std::string temp = cString;
return { temp.begin(), temp.end() };
}
int main() {
std::cout << cstr_to_wstring("Hi").c_str();
}
当我尝试编译时,我收到以下错误:
1>d:\documents\projects\compilerbugtest\compilerbugtest\compilerbugtest.cpp(6): fatal error C1001: An internal error has occurred in the compiler.
1> (compiler file 'f:\dd\vctools\compiler\utc\src\p2\main.c', line 227)
1> To work around this problem, try simplifying or changing the program near the locations listed above.
要解决这个问题,我可以在第六行指定类型,以便:
return { temp.begin(), temp.end() };
成为
return std::wstring { temp.begin(), temp.end() };
。
这真的是编译器错误吗?谢谢。
答案 0 :(得分:8)
是的,这是编译器中的一个错误。无论代码是否格式良好,所有编译器崩溃都是编译器错误。 11月在Microsoft Connect上报告了这个特定的错误:
Internal compiler error with std::map operations and braces in return statement.
在这个bug中,Xiang报告说我们已经为编译器的下一个主要版本解决了这个问题(我已经验证了你的代码是使用最新的内部版本编译的)。与此同时,建议的解决方法是执行您已完成的操作并在return语句中命名类型。