Ich verwende die svn-Version von gcc-4.7.0 , um einige C ++ 11-Funktionen, z. Lambda-Ausdrücke. Seit ein paar Wochen einige meiner alten Beispiele inklusive Lambdas nicht mehr kompilieren. Ich frage mich:
Der problematische Code scheint Inline-Lambdas zu enthalten, die direkt als Argumente bereitgestellt werden.
Würden Sie sagen, dass der folgende Code der C ++ 11-Code ist?
%Vor%Wenn ich es ändere und das Lambda zuerst einer Variablen zuweise, funktioniert es:
%Vor% Ich habe hier ein Beispiel , wo beide mit gcc-4.5 kompiliert werden (außer dass es eine Ausnahme auslöst, wahrscheinlich weil -pthread
nicht ist verbunden). Aber wie gesagt: In meinem gcc-4.7.0-svn hat die erste Variante vor einigen Wochen aufgehört zu kompilieren.
Aktualisieren Die Fehlermeldung scheint ein Parse-Fehler zu sein:
%Vor% Soweit ich es aus der im Entwurf n3242 definierten Grammatik ersehen kann, ist dieser Code C ++ 11 gültig. A braced_init-list
setzt sich aus einer Liste von initializer-clause
zusammen, die assignment-expression
s oder selbst braced_init_list
s sein kann. Ein assignment-expression
kann ein lambda-expression
sein, was genau das ist, was Sie als erstes Element haben ( [...](...){...}
).
Daher sollte das Umgeben des Lambda mit Klammern nicht erforderlich sein, wenn Sie denken, dass Sie einen Fehlerbericht sicher einreichen können :). (Natürlich basiert diese Antwort auf einem Entwurf, daher ist die Möglichkeit einer späten Änderung der Grammatik nicht auszuschließen.)