Я попробовал ваш пример на Годболт с gcc 9.2 и clang 9.0.0.Там моя минимальная программа:
#include <tuple>
std::tuple<int, int> yy = {-1, -2};
void bla(int x)
{
if (x)
{
auto [x, y] = yy;
}
}
Получает теневое предупреждение в gcc (-Wall -Wshadow -std=c++17
):
<source>: In function 'void bla(int)':
<source>:8:19: warning: declaration of 'auto x' shadows a parameter [-Wshadow]
8 | auto [x, y] = yy;
| ^
<source>:4:14: note: shadowed declaration is here
4 | void bla(int x)
| ~~~~^
<source>:8:14: warning: structured binding declaration set but not used [-Wunused-but-set-variable]
8 | auto [x, y] = yy;
| ^~~~~~
Но не в clang (-Wall -Wshadow -Wshadow-all -std=c++17
):
<source>:8:14: warning: unused variable '[x, y]' [-Wunused-variable]
auto [x, y] = yy;
^
1 warning generated.
Полагаю, это проблема лягушки.