なぜ C++ の使用前宣言規則がクラス内で成立しないのか疑問に思っています。
この例を見てください:
#ifdef BASE
struct Base {
#endif
struct B;
struct A {
B *b;
A(){ b->foo(); }
};
struct B {
void foo() {}
};
#ifdef BASE
};
#endif
int main( ) { return 0; }
BASE が定義されている場合、コードは有効です。
A のコンストラクター内で、まだ宣言されていない B::foo を使用できます。
なぜこれが機能するのですか?また、ほとんどの場合、クラス内でのみ機能するのはなぜですか?