考虑一个 C++20 程序,其中函数foo中有一个结构化绑定auto [y]。该函数返回y,它被转换为类型的对象A。A可以从 const 引用或 rvalue-reference 构造。
#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(); }
应根据 C++20 语言标准选择哪一个构造函数?
Clang 选择A(const int &)和 GCC 选择A(int &&),演示:https ://gcc.godbolt.org/z/5q779vE6T
其中一个编译器是否不支持这方面的标准?