Наконец они сделали это. Компилятор MSVC12 теперь позволяет равномерную инициализацию. Но я обнаружил, что он работает иначе, чем GNU GCC 4.8.1 с -std=C++11
флаг.
Рассмотрим этот код:
#include <vector>
#include <string>
#include <iostream>
struct Data
{
Data(const std::string& name, int x):
m_Name(name),
m_X(x)
{}
std::string m_Name;
int m_X;
};
std::vector<Data> datas =
{
Data("one", 1),
Data("two", 2),
Data("three", 3),
};
int main()
{
for(auto it = datas.begin(); it != datas.end(); ++it)
std::cout << it->m_Name << " " << it->m_X << "\n";
}
Результат с GCC (как и ожидалось):
one 1
two 2
three 3
Результат с MSVC12:
1
2
3
как строки не были инициализированы.
Вопросы:
Это могло быть ошибкой в VS2013 Preview. Выход двоичного файла, сгенерированного текущим RC RC VS2013, соответствует g ++.
Других решений пока нет …