Мои параметры лямбды действительно затеняют моих местных жителей?
Я имею дело с кодом C, который берет некоторые данные и передает их функции, переданной в:
void foo(int* data, void (*fun)(int*)){
(*fun)(data);
};
Следующие работы без предупреждения:
void bar(int* data){};
int main(){
int data=0;
foo(&data,bar);
}
Однако, если я использую лямбду вместо:
int main(){
int data=0;
foo(&data,[](auto data){});
}
Я получаю следующее предупреждение:
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;
Но я думал, что пустая группа захвата исключит первое создание во время поиска.
Это предупреждение законно?
Почему пустого захвата недостаточно, чтобы избежать предупреждений?