std::initializer_list
is constructed by the compiler from a brace-enclosed init list and the size of this list must be a compile time constant.
So why did the committee decide to omit the size from the template arguments? This possibly prevents some optimizations and makes some things impossible (initializing std::array
from a std::initializer_list
).
One upside of the existing system is that you can export functions which take an initializer_list
from a DLL. If it were templated on the size, they would have to be shipped as source.