boost::arrayの初期化

boost::arrayを初期化する際に以下のように書く. どちらも普通にコンパイルした場合は通るが, strictなチェックでは"warning: missing braces around initializer for 'int [4]'"などと言われて, Line2が落ちる. ようするにLine 1が正しい記述である.

boost::array<int,4> a = {{1, 2, 3}};  // Line 1
boost::array<int,4> a = {1, 2, 3};    // Line 2

これがなぜだかわからなかったのだが, 結局boost::arrayの実装の実態によるものらしい. boost::arrayは以下のような構造を持つ.

struct array
{
  T elems[N];
};

従って, structの初期化と内側の配列の初期化で2つの波括弧が必要である. ということらしい.

http://stackoverflow.com/questions/2687701/how-should-i-initialize-a-boostarray