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