Я полагаю, с вашими примерами для std::vector<int>
и std::string
вы имели в виду также накрыть другие контейнеры, например, std::list<int>
, std::deque<int>
, и т.д.которые, очевидно, имеют ту же проблему, что и std::vector<int>
.Аналогичным образом, int
это не единственный тип, поскольку он также применим к char
, short
, long
и их unsigned
версия (возможно, и несколько других интегральных типов).
Я думаю, что есть еще std::valarray<T>
но я не уверен, что T
допускается, чтобы это был целочисленный тип.На самом деле, я думаю, что у них разная семантика:
std::valarray<double>(0.0, 3);
std::valarray<double>{0.0, 3};
Существует несколько других стандартных шаблонов классов C ++, которые принимают std::initializer_list<T>
в качестве аргумента, но я не думаю, что какой-либо из них имеет перегруженный конструктор, который использовался бы при использовании круглых скобок вместо фигурных.