2013-07-09 2 views
3

Наконец они сделали это. Компилятор MSVC12 теперь позволяет выполнять равномерную инициализацию. Но я обнаружил, что он работает иначе, чем GNU GCC 4.8.1 с флагом -std=C++11.Ошибка или нет? Visual Studio 2013 Предварительный просмотр std :: вектор инициализатор список с std :: строка

Рассмотрим этот код:

#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 

(ideone link)

Результат с MSVC12:

1 
2 
3 

как струны hasn инициализирован.

Вопросы:

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

Это ошибка в MSVC. –

+1

Определенно ошибка. –

+0

Вы уверены, что вы публикуете правильный результат? Версия GCC выглядит довольно подозрительно. – juanchopanza

ответ

2

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

+0

Yay! Они сделали это! знак равно – Drop