次のコードはclang(libc ++)でコンパイルされ、gcc(libstdc ++)で失敗します。gcc(libstdc ++)が初期化子リストについて文句を言うのはなぜですか?return引数は統一された初期化構文を使用していると思いました。
std::tuple<double,double> dummy() {
return {2.0, 3.0};
}
int main() {
std::tuple<double,double> a = dummy();
return 0;
}
エラー:22行目:初期化子\リストから'std :: tuple'に変換すると、明示的なコンストラクター' constexpr std :: tuple <_T1、_T2> :: tuple(_U1&\&、_U2 &&)[with _U1 = double; _U2=ダブル; =無効; _T \1=ダブル; _T2 = double] '
注: GCC(libstdc ++)(およびclang(libc ++))は受け入れます
std::tuple<double,double> dummy {1.0, 2.0};
同じではないですか?
更新:これはlibc++拡張機能です。http ://llvm.org/bugs/show_bug.cgi?id = 15299を参照し、以下のHowardHinnantによる回答も参照してください。