https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102116
Bug ID: 102116 Summary: structured binding is returned from a function as rvalue in C++20 mode Product: gcc Version: 12.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: fchelnokov at gmail dot com Target Milestone: --- In the following program: ``` #include <tuple> #include <iostream> struct A { A(const int &) { std::cout << "A(const int &) "; } A(int &&) { std::cout << "A(int &&) "; } }; A foo() { auto [y] = std::make_tuple(1); return y; } int main() { foo(); } ``` GCC selects "A(int &&)" constructor starting from C++20 mode, demo: https://gcc.godbolt.org/z/5q779vE6T I asked why on stack-overflow: https://stackoverflow.com/questions/68941451/shall-structured-binding-be-returned-from-a-function-as-rvalue-in-c20 and the answer was that GCC being wrong here. Could you please confirm it or explain why the behavior of the program changes in C++20 mode?