Meus parâmetros lambda estão realmente sombreando meus habitantes locais?
Estou lidando com algum código C que pega alguns dados e o encaminha para a função passada:
void foo(int* data, void (*fun)(int*)){
(*fun)(data);
};
O seguinte funciona sem aviso:
void bar(int* data){};
int main(){
int data=0;
foo(&data,bar);
}
No entanto, se eu usar um lambda:
int main(){
int data=0;
foo(&data,[](auto data){});
}
Recebo o seguinte aviso:
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;
Mas eu pensei que um grupo de captura vazio excluiria a primeira instanciação durante a pesquisa.
Esse aviso é legítimo?
Por que a captura vazia não é suficiente para evitar avisos?