2014-01-26 12 views
7

Ich denke, dass ich einen Compilerfehler in dem MSVC++ - Compiler gefunden haben könnte, der mit VS2013 geliefert wird, aber es ist solch ein einfacher Fall, ich kann nicht sicher sein. Gekoppelt mit der Tatsache, dass ich immer noch C++ lerne, wollte ich hier fragen, bevor ich irgendetwas einreiche; weil ich mir ehrlich gesagt ziemlich sicher bin, dass ich etwas falsch mache, was zu einer ungewöhnlichen Fehlermeldung führt.Ist das ein MSVC++ - Compilerfehler?

Wie auch immer, reduziert ich das Problem in einer kleinen Testdatei:

#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(); 
} 

Wenn ich versuche, das zu kompilieren, bekomme ich folgende Fehlermeldung:

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. 

, um das Problem zu umgehen I geben Sie einfach den Typ auf der Leitung kann sechs, so dass:

return { temp.begin(), temp.end() };

wird

return std::wstring { temp.begin(), temp.end() };.

Ist das wirklich ein Compiler Bug? Vielen Dank.

+11

Ich würde sagen: "Ein interner Fehler im Compiler" ist immer Berichterstattung wert, unabhängig vom verwendeten Quellcode. – GSerg

+4

Wenn der Compiler angibt, dass dies ein Compiler-Fehler ist, dann ist es ein Fehler im Compiler oder es ist ein Fehler zu sagen, dass es sich um einen Fehler im Compiler handelt. In beiden Fällen ist es ein Compiler Bug :-) –

+1

Haha, gute Punkte, GSerg und Torsten ... :) – Xenoprimate

Antwort

7

Ja, das ist ein Fehler im Compiler. Alle Compilerabstürze sind Compilerfehler, unabhängig davon, ob der Code wohlgeformt ist. Dieser besondere Fehler wurde auf Microsoft Connect im November berichtet:

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

Im Bug, Xiang berichtet, dass wir dieses Problem für die nächste große Version des Compilers behoben haben (und ich habe festgestellt, dass Ihr Code kompiliert die Verwendung von letzter interner Build). In der Zwischenzeit besteht die empfohlene Problemumgehung darin, das zu tun, was Sie getan haben, und den Typ in der return-Anweisung zu benennen.

+0

Hallo James, danke für deine Antwort. :) Ich habe bereits einen Fehler bei MS Connect gemeldet, nachdem die Kommentare, die ich hier hinterlassen habe, mich ermutigt haben; also denke ich, es sollte als Duplikat markiert werden. https://connect.microsoft.com/VisualStudio/feedback/details/814718/msvc-compiler-error – Xenoprimate

+1

Danke. Wir werden es als ein Duplikat auflösen. Es ist besser, dass ein Fehler mehrmals gemeldet wird als gar nicht. :-) –

+0

Ich lese auf http://connect.microsoft.com/VisualStudio/feedback/details/808852/internal-compiler-error-with-std-map-operations-and-brace-in-return-statement und Es sollte behoben werden, aber ich habe immer noch das gleiche Problem. –