Die Visual Studio-Compiler (MSVC 2015) ist nicht in der Lage, das folgende einfache Stück Code zu kompilieren:Lambda in Lambda kann keine Vorlage sein?
int main() {
auto foo = [](auto callback) {
callback(int{});
};
auto rexs = [&foo]() {
foo([](auto tg) {});
};
}
Es barfs einen internen Compiler-Fehler:
fatal error C1001: An internal error has occurred in the compiler.
VC++ mag Fehlern geben C1001
, wenn die kompilierter Code enthält Fehler (dh der Programmierer hat einen Fehler gemacht, aber VC++ erkennt den Fehler im Code nicht vollständig), also frage ich mich, ob ich hier einen Fehler gemacht haben könnte.
Aber aus allen Perspektiven kann ich sehen, mein Code sieht standardkonform aus, und es scheint wie ein VC++ Bug für mich. Denke ich richtig?
"ein interner Fehler in dem Compiler aufgetreten ist." ist immer ein Fehler (in der Compiler/Tool-Kette), ob der Reproduktionscode gültig ist oder nicht. Obwohl der Fehler schwerwiegender ist, wenn der Code gültig ist. – user2079303
'VC++ gibt gerne Fehler C1001, wenn der kompilierte Code Fehler enthält (d. H. Der Programmierer hat einen Fehler gemacht, aber VC++ erkennt den Fehler im Code nicht vollständig). Selbst wenn das stimmt, ist es immer noch ein Compilerfehler. Wenn VS denkt, dass der Code falsch ist, sollte es einen Grund haben, das zu denken. – deviantfan
@ user2079303 Ich habe C1001 so oft in meinen Projekten gesehen, als ich einen kleinen Syntaxfehler gemacht habe, dass ich mich nicht mehr darum schäme, meinen Compiler dafür zu schimpfen. – Bernard