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?

Reply via email to