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_listfrom a DLL. If it were templated on the size, they would have to be shipped as source.