私は私ができることを知っています
class Foo;
そしておそらく
struct Bar;
およびグローバル関数
bool IsValid(int iVal);
型付き列挙型はどうですか?宣言されていないクラス内の型付き列挙型はどうですか?宣言されていないクラスを持つ関数はどうですか?宣言されていないクラス内の静的メンバーはどうですか?未知の名前空間内のこれらはどうですか?前方宣言できるものが他にありませんか?
私は私ができることを知っています
class Foo;
そしておそらく
struct Bar;
およびグローバル関数
bool IsValid(int iVal);
型付き列挙型はどうですか?宣言されていないクラス内の型付き列挙型はどうですか?宣言されていないクラスを持つ関数はどうですか?宣言されていないクラス内の静的メンバーはどうですか?未知の名前空間内のこれらはどうですか?前方宣言できるものが他にありませんか?
前方宣言できます
「前方宣言」が厳密に「宣言するが定義しない」ことを意味する場合は、メンバー関数を前方宣言することもできます。ただし、一度宣言すると、クラス定義で再宣言することはできません。列挙を前方宣言することはできません。何かを逃したかどうかはわかりません。
上記のすべての前方宣言は、部分的および明示的な特殊化を除いて、非修飾名を使用して宣言する必要があり、メンバー関数とネストされたクラスは、クラス定義でのみ宣言できますが、定義できないことに注意してください。
class A { };
class A::B; // not legal
namespace A { }
void A::f(); // not legal
namespace A { void f(); } // legal
class B { class C; }; // legal
class B::C; // declaration-only not legal
class D { template<typename T> class E; };
template<typename T> class D::E<T*>; // legal (c.f. 14.5.4/6)