配列メンバの初期化

久々にGCC拡張について書く。
初期化リスト中に、C99の複合リテラルと同じ書式により、配列メンバを初期化することができる。
version 4.1以前のGCCでのみ利用できる。

struct foo
{
  int bar[2];
  foo(int x, int y):bar((int[2]){x,y}){}

};

この拡張は、cppll:12924で初めて見た。
元記事では『Designated Initializer』となっているが、これは誤りである。


『Designated Initializer』は、要素を指定して初期化する方法。こんなの↓

int foo[] = {[3] = 4, [10] = 1}; // { 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 1 }と同じ


どうでもいい話だけど、
C++中で使用できるC99の機能は、GCCよりDMCのほうが、多いように感じる。