以下代码使用 clang (libc++) 编译并使用 gcc (libstdc++) 失败。为什么 gcc (libstdc++) 抱怨初始化列表?我认为返回参数使用统一的初始化语法。
std::tuple<double,double> dummy() {
return {2.0, 3.0};
}
int main() {
std::tuple<double,double> a = dummy();
return 0;
}
错误:第 22 行:从初始化程序 \ list 转换为 'std::tuple' 将使用显式构造函数 'constexpr std::tuple<_T1, _T2>::tuple(_U1&\ &, _U2&&) [with _U1 = double; _U2 = 双倍;=无效;_T\ 1 = 双倍;_T2 = 双]'
注意: GCC (libstdc++) (和 clang (libc++)) 接受
std::tuple<double,double> dummy {1.0, 2.0};
不是同一种情况吗?
更新:这是一个 libc++ 扩展,请参阅http://llvm.org/bugs/show_bug.cgi?id=15299并在下面由 Howard Hinnant 回答。