最後に彼らはそれをしました。MSVC12 コンパイラで均一な初期化が可能になりました。-std=C++11
しかし、フラグ付きの GNU GCC 4.8.1 とは動作が異なることがわかりました。
次のコードを検討してください。
#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 の動作は標準ですか、それともバグですか?