existem planos no padrão C ++ para tratar da inconsistência dos construtores da lista de inicializadores?

construtores de lista de inicializadores em C ++ geralmente causam problemas; por exemplo

using std::vector;
using std::string;
vector<string> v{3}; // vector of three empty strings
vector<int> u{3}; // vector of one element with value 3

(Só para esclarecer, quero dizer<int> construtor é um construtor de lista inicializador, enquanto o<string> um énão.)

oint case corresponde ao construtor da lista de inicializadores, enquanto ostring caso não. Isso é feio e muitas vezes causa problemas. Também foi observado em um capítulo anterior (item 7) no Effective Modern C ++ de Scott Meyers, e ele o descreve como uma parte um tanto desagradável do padrão, que sempre que um construtor de lista de inicializadores está disponível, os compiladores pulam nos bastidores para tentar combine-o, dando prioridade a todos os outros construtores.

Obviamente, o caso int pode ser facilmente corrigido alterando-seu{3} parau(3), Mas esse não é o ponto.

Esse comportamento é desejável? Houve alguma discussão ou plano do comitê padrão de C ++ para corrigir esse tipo de ambiguidade / desagradabilidade? Um exemplo seria exigir que os construtores da lista de inicializadores fossem chamados assim:vector<int> u({3}), que já é legal no momento.

questionAnswers(2)

yourAnswerToTheQuestion