https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94265
Bug ID: 94265 Summary: wrong warning "duplicated 'if' condition" Product: gcc Version: 9.1.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: f.heckenb...@fh-soft.de Target Milestone: --- % cat t.cpp #include <tuple> struct S { int a, b; }; int main () { if (auto [a,b] = S { 0, 1 }; a) { } else if (std::tie (a, b) = std::tuple (2, 3); a) { } } % g++ -std=c++17 -Wduplicated-cond t.cpp t.cpp: In function 'int main()': t.cpp:8:8: warning: duplicated 'if' condition [-Wduplicated-cond] 8 | else if (std::tie (a, b) = std::tuple (2, 3); a) { } | ^~ t.cpp:7:3: note: previously used here 7 | if (auto [a,b] = S { 0, 1 }; a) { } | ^~ Though the condition "a" looks the same in both "if" statements, the value of a can change in between, and in fact does in this example (the second "if" branch is actually taken). Unless the "tie" assignment to "auto []" pseudo-variables is for some reason incorrect, but then of course gcc should mention that.