Por que a dedução automática e de tipo de modelo é diferente para inicializadores armados?

Eu entendo que, dado um inicializador apoiado,auto deduzirá um tipo destd::initializer_list, enquanto a dedução do tipo de modelo falhará:

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

Eu até sei onde isso é especificado no padrão C ++ 11: 14.8.2.5/5 bullet 5:

[É um contexto não deduzido se o programa tiver] Um parâmetro de função para o qual o argumento associado é uma lista de inicializadores (8.5.4), mas o parâmetro não possui std :: initializer_list ou referência a possivelmente cv-qualified std :: initializer_list tipo. [Exemplo:

template void g (T);

g ({1,2,3}); // erro: nenhum argumento deduzido para T

—exemplo final ]

O que eu não sei ou entendo éporque esta diferença no comportamento de dedução de tipo existe. A especificação no C ++ 14 CD é a mesma que no C ++ 11, então presumivelmente o comitê de padronização não vê o comportamento do C ++ 11 como um defeito.

Alguém sabe porqueauto deduz um tipo para um inicializador armado, mas os modelos não são permitidos? Enquanto explicações especulativas da forma "esta poderia ser a razão" são interessantes, estou especialmente interessado em explicações de pessoas queconhecer porque o padrão foi escrito do jeito que foi.

questionAnswers(3)

yourAnswerToTheQuestion