Баг или нет? Предварительный просмотр std :: vector в Visual Studio 2013 с помощью std :: string

Наконец они сделали это. Компилятор 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

как строки не были инициализированы.

Вопросы:

  • Правильный ли синтаксис моего кода в соответствии со стандартом C ++ 11?
  • Стандартное поведение GCC или какое-то расширение?
  • Поведение MSVC является стандартным или это ошибка?

3

Решение

Это могло быть ошибкой в ​​VS2013 Preview. Выход двоичного файла, сгенерированного текущим RC RC VS2013, соответствует g ++.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]