Ich habe irgendwo gelesen, dass eine Lambda-Funktion zum Funktionszeiger abfallen sollte, wenn die Aufnahmeliste leer ist. Die einzige Referenz, die ich jetzt finden kann, ist n3052 . Mit g ++ (4.5 & amp; 4.6) funktioniert es wie erwartet, außer das Lambda wird innerhalb des Vorlagencodes deklariert.
Zum Beispiel kompiliert der folgende Code:
%Vor% Aber es kompiliert nicht mehr, wenn es templatiert wird (wenn foo
tatsächlich an anderer Stelle aufgerufen wird):
In der obigen Referenz sehe ich keine Erklärung für dieses Verhalten. Ist dies eine vorübergehende Einschränkung von g ++, und wenn nicht, gibt es einen (technischen) Grund, dies nicht zuzulassen?
Ich kann mir keinen Grund vorstellen, dass es ausdrücklich verboten wäre. Ich vermute, dass es nur eine vorübergehende Einschränkung von g ++ ist.
Ich habe auch ein paar andere Dinge ausprobiert:
%Vor%Das funktioniert.
%Vor% Das tut es nicht (aber wenn foo
nicht parametrisiert ist).
Hinweis: Ich habe nur in g ++ 4.5 getestet.
Tags und Links c++ lambda c++11 templates function-pointers