这是MSVC ++编译器的错误吗?

时间:2014-01-26 16:28:25

标签: c++ visual-c++ visual-studio-2013

我想我可能在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() };

这真的是编译器错误吗?谢谢。

1 个答案:

答案 0 :(得分:8)

是的,这是编译器中的一个错误。无论代码是否格式良好,所有编译器崩溃都是编译器错误。 11月在Microsoft Connect上报告了这个特定的错误:

  

Internal compiler error with std::map operations and braces in return statement.

在这个bug中,Xiang报告说我们已经为编译器的下一个主要版本解决了这个问题(我已经验证了你的代码是使用最新的内部版本编译的)。与此同时,建议的解决方法是执行您已完成的操作并在return语句中命名类型。