请考虑以下代码段:
#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不会抱怨并且可以正常编译。
哪个是正确的?