Почему автоматическое вычитание и вычитание типов шаблонов различаются для инициализаторов в фигурных скобках?

Я понимаю, что, учитывая инициализированный скобками,auto выведет типstd::initializer_list, в то время как вывод типа шаблона не удастся:

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

Я даже знаю, где это указано в стандарте C ++ 11: 14.8.2.5/5 bullet 5:

[Это не выводимый контекст, если программа имеет] Параметр функции, для которого связанный аргумент является списком инициализатора (8.5.4), но у этого параметра нет std :: initializer_list или ссылки на возможно cv-квалифицированный std :: initializer_list тип. [Пример:

шаблон пустоты g (T);

г ({1,2,3}); // ошибка: аргумент не выводится для T

—конец примера ]

То, что я не знаю или не понимаю,Почему&nbsp;эта разница в типе поведения вывода существует. Спецификация на C ++ 14 CD такая же, как и в C ++ 11, поэтому предположительно комитет по стандартизации не рассматривает поведение C ++ 11 как дефект.

Кто-нибудь знает почемуauto&nbsp;выводит тип для фигурного инициализатора, но шаблоны не разрешены? Хотя спекулятивные объяснения формы «это может быть причиной» интересны, меня особенно интересуют объяснения людей, которыезнать&nbsp;почему стандарт был написан именно так.