Возврат кортежа из функции с использованием единого синтаксиса инициализации

Следующий код компилируется с помощью 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 а также ответит Говард Хиннант ниже.

Ответы на вопрос(2)

Ваш ответ на вопрос