Конструктор класса с шаблонным initializer_list
Я решил написать свой собственный вектор (шаблон), и в качестве одного из вариантов его инициализации я хотел написать конструктор с шаблонным initializer_list, за что в ответ получил несколько ошибок, суть которых уловить мне не удалось
template <typename T>
class my_vector
{
public:
my_vector(std::initializer_list<T> list)
{
std::initializer_list<T>::iterator iter = list.begin();
arr = new T[list.size()];
for (int i = 0; i < list.size(); i++)
{
arr[i] = *iter;
iter++;
}
size = list.size();
}
private:
T* arr;
int size;
};
В попытке инициализировать объект этого класса через braced-init-list, получаю следующие ошибки 
Вопрос: почему так происходит, и как решается такая проблема?
Ответы (1 шт):
Автор решения: AVK
→ Ссылка
Надо так:
my_vector(std::initializer_list<T> list)
{
typename std::initializer_list<T>::iterator iter = list.begin();
...
Причина в том, что std::initializer_list<T>::iterator зависит от типа T и, теоретически, может оказаться не типом, а чем-то ещё. Для std::initializer_list<T>::iterator это явно не так, но компилятор всё равно требует внести ясность.