yohhoyの日記

技術的メモをしていきたい日記

initializer-listによるaggregate初期化の制約緩和

C++14 Draft N3485にてCWG defect #1270が適用され、initializer-listによるaggregate(集成体)の初期化条件が緩和された。

C++11標準ライブラリstd::vector, std::arrayにおいて Uniform initialization と Initializer list を組み合わせた場合に、N3337現在ではそれぞれ異なる表記が必要となる。2012年7月現在、CWG defect #1270に挙げられている。

std::vector<int>   x0{1,2,3,4};
std::array<int, 4> y0{{1,2,3,4}};  // {}が二重に必要
vector/arrayとUniform initialization+Initializer list

この修正により、C++14ではstd::vectorと同様にstd::arrayの初期化を行えるようになる。

std::vector<int>   x0{1,2,3,4};
std::array<int, 4> y0{1,2,3,4};
std::vector<int>   x1 = {1,2,3,4};
std::array<int, 4> y1 = {1,2,3,4};

関連URL