Ich bin nicht sicher, ob ich deine Frage verstanden habe. Ich
beschreibe daher
einfach die Lage der Dinge: Wenn du einen Lambda-Ausdruck definierst,
sind
als Captures *nur* Variablen mit automatischer Speicherlebensdauer
zulässig.
Alle globalen Variablen werden *nicht* "eingefangen" oder kopiert. Es
ist
auch *ungültig*, diese damit einfangen zu versuchen.
So wie du deinen Lambda-Ausdruck geschrieben hast, sollte er ungültig
sein:
aVar ist eine globale Variable und daher nach aktuellen Sprachregeln
nicht
"einfangbar", [expr.prim.lambda] p10:
"each such lookup shall find a variable with automatic storage
duration declared
in the reaching scope of the local lambda expression."
Wenn du so die gleiche Wirkung erzielen willst, musst du dir in einem
lokalen
Kontext die globale Variable in einer lokalen Variablen abspeichern
und die
lokale Variable einfangen, z.B.
int aVar;
void func() {
int copy_of_aVar = aVar;
[copy_of_aVar] { /*..*/ }
}
Es wäre allerdings nicht möglich, einen Lambda-Ausdruck im Namensraum
zu definieren und dort eine *Kopie* einer anderen Namensraum-
Variablen
einzufangen. Wenn du tatsächlich so etwas vorhast, beschreibe doch
bitte
genauer deinen Anwendungsfall. Mir ist nämlich schleierhaft, was du
damit erreichen willst.
Besten Gruss aus Bremen,
Daniel Krügler