Since C++11, the Standard Library containers and std::string have constructors taking an initializer-list. This constructor takes precedence over other construc
I assume, with your examples for std::vector and std::string you meant to also cover the other containers, e.g., std::list, std::deque, etc. which have the same problem, obviously, as std::vector. 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 but I'm not sure if T is allowed to be integral type. Actually, I think these have different semantics:
std::valarray(0.0, 3);
std::valarray{0.0, 3};
There are a few other standard C++ class templates which take an std::initializer_list as argument but I don't think any of these has an overloaded constructor which would be used when using parenthesis instead of braces.