例を挙げよう。

class A;

A* create_instance();

int main(int, char* []) {

A* a = create_instance();
delete a;

return 0;
}

このファイルをコンパイルするとなにが起きるだろうか。コンパイラによっては、コンパイルに失敗するだろうし、警告が発せられるかもしれない。手元にあった gcc 3.3 では警告が表示されたが、コンパイルには成功した。

test.cpp: In function `int main(int, char**)':
test.cpp:7: warning: `a' has incomplete type
test.cpp:1: warning: forward declaration of `struct A'

それで、これのいったいなにが問題なのか?