Это тесно связано по стандарту.Это обертка вокруг созданного компилятором массива (хотя стандарт не говорит, насколько точно - GCC использует конструктор с указателем и размером, MSVC использует конструктор с двумя точками).И да, он должен быть в пространстве имен std
и в заголовке <initializer_list>
.
Вам нужно увидеть, какие конструкторы они используют в каждом компиляторе, который вы хотите поддерживать, и скопировать его в вашей версии,но TBH, я не вижу смысла.
Шаблон std::initializer_list
не предопределен;если заголовок <initializer_list>
не включен до использования std::initializer_list
- даже неявного использования, в котором тип не назван (7.1.6.4) - программа плохо сформирована.
Объекттипа std::initializer_list<E>
создается из списка инициализаторов, как если бы реализация выделяла массив из N элементов типа E, где N - количество элементов в списке инициализаторов.Каждый элемент этого массива инициализируется копией с соответствующим элементом списка инициализатора, и объект std::initializer_list<E>
создается для ссылки на этот массив.