Следующий код компилируется с clang (libС++) и не работает с gcc (libstdС++). Почему gcc (libstdС++) жалуется на список инициализаторов? Я думал, что возвращаемый аргумент использует единый синтаксис инициализации.
std::tuple<double,double> dummy() {
return {2.0, 3.0};
}
int main() {
std::tuple<double,double> a = dummy();
return 0;
}
Ошибка: строка 22: преобразование в 'std:: tuple из инициализатора \ list будет использовать явный конструктор 'constexpr std:: tuple < _T1, _T2 > :: tuple (_U1 & \ &, _U2 &) [с _U1 = double; _U2 = double; = void; _T \ 1 = двойной; _T2 = double]
Примечание: GCC (libstdС++) (и clang (libС++)) принимает
std::tuple<double,double> dummy {1.0, 2.0};
Разве это не тот же случай?
Обновление: это расширение libС++, см. http://llvm.org/bugs/show_bug.cgi?id=15299, а также ответ Говарда Хиннанта ниже.