考虑一个 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
其中一个编译器是否不支持这方面的标准?