考虑下面的片段:
#include<tuple>
double refd = 5.0;
int refi = 1;
decltype(auto) foo(){return std::tuple<double&,int&>{refd,refi};}
auto&[d,i] = foo(); //msvc:pass, gcc:fail, clang:fail
在编译器资源管理器上可用
在 gcc/clang 的情况下,错误是:
错误:无法将类型的非常量左值引用绑定到类型
'std::tuple<double&,int&>&'
的右值'std::tuple<double&, int&>'
但是,MSVC 不会抱怨并且编译得很好。
哪一个是正确的?