I assume, with your examples for std::vector<int>
and std::string
you meant to also cover the other containers, e.g., std::list<int>
, std::deque<int>
, etc. which have the same problem, obviously, as std::vector<int>
. Likewise, the int
isn’t the only type as it also applies to char
, short
, long
and their unsigned
version (possibly a few other integral types, too).
I think there is also std::valarray<T>
but I’m not sure if T
is allowed to be integral type. Actually, I think these have different semantics:
std::valarray<double>(0.0, 3);
std::valarray<double>{0.0, 3};
There are a few other standard C++ class templates which take an std::initializer_list<T>
as argument but I don’t think any of these has an overloaded constructor which would be used when using parenthesis instead of braces.