Warum unterscheiden sich die automatische und die Vorlagentyp-Ableitung bei geschweiften Initialisierern?

Ich verstehe, dass angesichts eines geschweiften Initialisierersauto wird eine Art ableitenstd::initializer_list, während der Abzug des Vorlagentyps fehlschlägt:

auto var = { 1, 2, 3 };   // type deduced as std::initializer_list<int>

template<class T> void f(T parameter);

f({ 1, 2, 3 });          // doesn't compile; type deduction fails

Ich weiß sogar, wo dies im C ++ 11-Standard angegeben ist: 14.8.2.5/5 bullet 5:

[Wenn das Programm über einen nicht deduzierten Kontext verfügt] Ein Funktionsparameter, für den das zugehörige Argument eine Initialisierungsliste ist (8.5.4), der Parameter jedoch nicht über std :: initializer_list oder einen Verweis auf möglicherweise cv-qualifiziertes std :: initializer_list verfügt Art. [Beispiel:

Matrizenhohlraum g (T);

g ({1,2,3}); // Fehler: Für T wurde kein Argument abgeleitet

—Ende Beispiel ]

Was ich nicht weiß oder verstehe, istWarum Dieser Unterschied im Typabzugsverhalten besteht. Die Spezifikation auf der C ++ 14-CD ist dieselbe wie in C ++ 11, sodass das Standardisierungskomitee das C ++ 11-Verhalten vermutlich nicht als Fehler ansieht.

Weiß jemand warumauto leitet einen Typ für einen geschweiften Initialisierer ab, aber Vorlagen dürfen nicht? Während spekulative Erklärungen des Formulars "das könnte der Grund sein" interessant sind, interessieren mich Erklärungen von Menschen, diekennt warum der Standard so geschrieben wurde wie er war.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage