Подтвердить что ты не робот

Initializer_list не работает в VC10

Я написал эту программу в VС++ 2010:

class class1
{
public:
 class1 (initializer_list<int> a){};
 int foo;
 float Bar;
};
void main()
{
 class1 c = {2,3};
 getchar();
}

но я получаю эти ошибки при компиляции проекта:

Ошибка 1 Ошибка C2552: 'c': неагрегаты не могут быть инициализированы с инициализатором list c:\users\pswin\documents\visual студия 2010\projects\test_С++ 0x\test_С++ 0x\main.cpp 27

и

2 IntelliSense: инициализация с помощью '{...}' не разрешено для объекта тип "class1" c:\users\pswin\documents\visual студия 2010\projects\test_С++ 0x\test_С++ 0x\main.cpp 27

в чем проблема?

4b9b3361

Ответ 1

Не следует поддерживать вообще:

[...] функция С++ 0x Core Language для списков инициализаторов и соответствующие изменения стандартной библиотеки не были реализованы в VC10.

Сообщение об ошибке относится к функции pre-С++ 0x инициализации агрегата, которая позволяет инициализировать определенные пользовательские типы с помощью фигурных скобок:

struct pair { int first; char second; };
pair p = { 0, 'c' };

Агрегаты определены в §8.5.1:

Агрегат - это массив или класс (раздел 9) без конструкторов, объявленных пользователем (12.1), без частных или защищенных нестатических элементов данных (раздел 11), без базовых классов (раздел 10) и без виртуальных функций (10.3).

Когда агрегат инициализируется, инициализатор может содержать предложение инициализатора, состоящее из списка разделенных запятыми списков инициализатор-предложений для членов агрегата, написанных с увеличением индекса или порядка членов. Если совокупность содержит субагрегаты, это правило применяется рекурсивно к членам субагрегата.