¿Mis parámetros lambda realmente sombrean a mis locales?
Estoy tratando con un código C que toma algunos datos y los reenvía a la función pasada:
void foo(int* data, void (*fun)(int*)){
(*fun)(data);
};
Lo siguiente funciona sin previo aviso:
void bar(int* data){};
int main(){
int data=0;
foo(&data,bar);
}
Sin embargo, si uso una lambda en su lugar:
int main(){
int data=0;
foo(&data,[](auto data){});
}
Me sale la siguiente advertencia:
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;
Pero pensé que un grupo de captura vacío excluiría la primera instancia durante su búsqueda.
¿Es legítima esta advertencia?
¿Por qué la captura vacía no es suficiente para evitar advertencias?