C++11ではnon-static data member initializerが導入され、クラスの初期値設定をよりわかりやすく行うことが出来るようになっています。
struct X {
int a = 10; // Xの初期値は10
X() : a(10) /* これと同じ */ {}
};
この初期化子ではthisを使用することもできます。
struct X {
size_t sz = sizeof(*this); // これは可能
int arr[sizeof(*this)]; // でもこれは不可
};
さて、gcc-4.7では以下のコードのコンパイルが通ってしまいます。
struct X {
void f() {
struct Y {
size_t sz = sizeof(*this); // Yのサイズ
int arr[sizeof(*this)]; // エラーのはずだが…
};
};
この時Y::szにはYのサイズが、Y::arrの要素数にはXのサイズが適用されています。バグでしょうね。
なお、Clangではエラーを出力してくれます。