g++ 4.7 は配列メンバーの初期化をサポートしており、私はそれで遊んでみました。
以下のコードはコンパイルされません。
struct A
{
A(int){};
A(const A&) = delete;
A& operator=(const A&) = delete;
~A(){};
};
struct B
{
B():
a{{0},{1}}
{};
A a[2];
};
B b;
gcc 4.8 (プレリリース) のエラー メッセージは次のとおりです。
n.cc: In constructor ‘B::B()’:
n.cc:12:20: error: use of deleted function ‘A::A(const A&)’
a{{0},{1}}
^
n.cc:4:8: error: declared here
A(const A&) = delete;
^
このコードを機能させる方法はありますか? A のコンストラクタ、デストラクタを簡単に変更することはできません。配列を初期化するには移動コンストラクタまたはコピー コンストラクタが必要なようですが、これは直観に反するように思えます。
a[2] を 2 つのメンバー a0 と a1 に分割し、それらを別々に構築すると機能します。しかし、これは怪しく見えます。