gcc (-std=c++11 を使用した 4.7.2) でコンパイルする次のサンプル コードがあります。
template<class C>
struct template_test
{
C testing() const
{
return C();
}
};
class A;
struct test : public template_test<A> // (1)
{};
struct A
{};
int main()
{
test t;
}
ポイント (1) で、関数template_test<A>::testing()
がインスタンス化され、 の関数A
、具体的にはそのデフォルト コンストラクターを使用します。したがって、test
このインスタンス化された関数を関数メンバーとして含みます。ただし、この時点A
では不完全な型であり、C++ では不完全な型のメンバーを使用することは禁止されています。
これはpositive
gcc のエラーですか、それとも別の説明がありますか?