Zwracanie krotki z funkcji przy użyciu jednolitej składni inicjalizacji

Poniższy kod kompiluje się z clang (libc ++) i kończy się niepowodzeniem z gcc (libstdc ++). Dlaczego gcc (libstdc ++) skarży się na listę inicjatorów? Myślałem, że argument powrotu używa jednolitej składni inicjalizacji.

std::tuple<double,double> dummy() {
  return {2.0, 3.0};
}

int main() {   
  std::tuple<double,double> a = dummy();   
  return 0;
}

Błąd: linia 22: konwersja do „std :: tuple” z inicjalizatora lista użyłaby jawnego konstruktora „constexpr std :: tuple <_T1, _T2> :: tuple (_U1 & &, _U2 &&) [z _U1 = double; _U2 = podwójny; = nieważne; _T 1 = podwójny; _T2 = podwójne] ’

Uwaga: GCC (libstdc ++) (i clang (libc ++)) akceptują

std::tuple<double,double> dummy {1.0, 2.0};

Czy to nie ten sam przypadek?

Aktualizacja: jest to rozszerzenie libc ++, zobaczhttp://llvm.org/bugs/show_bug.cgi?id=15299 a także odpowiedź Howarda Hinnanta poniżej.

questionAnswers(2)

yourAnswerToTheQuestion