Sind meine Lambda-Parameter wirklich so, dass sie meine Einheimischen beschatten?
Ich habe es mit C-Code zu tun, der Daten aufnimmt und an die übergebene Funktion weiterleitet:
void foo(int* data, void (*fun)(int*)){
(*fun)(data);
};
Das Folgende funktioniert ohne Vorwarnung:
void bar(int* data){};
int main(){
int data=0;
foo(&data,bar);
}
Allerdings, wenn ich stattdessen ein Lambda verwende:
int main(){
int data=0;
foo(&data,[](auto data){});
}
Ich erhalte die folgende Warnung:
warning: declaration of ‘data’ shadows a previous local [-Wshadow]
foo(&data,[](auto data){});
^
o.cpp:14:7: note: shadowed declaration is here
int data=0;
Aber ich dachte, eine leere Erfassungsgruppe würde die erste Instanziierung während des Suchens ausschließen.
Ist diese Warnung berechtigt?
Warum reicht das leere Capture nicht aus, um Warnungen zu vermeiden?