g++で
class Foo {をコンパイルしようとすると
public:
class Bar {
public:
Foo x;
};
};
field ‘x’ has incomplete type
って怒られる。
「サイズが分からんのに(ポインタ以外で)使うな」
ってことだろうけど、その一方で
templateこう書くと問題ない。class Foo {
public:
class Bar {
public:
Foo x;
};
};
テンプレートクラスはどうせ定義だけじゃサイズが分からないから
サイズが分からないなりに使えなきゃ困るんだけど
んじゃあ普通のクラスも同じように使わせろよ!
と思う。
後方互換性の問題なのかな。
補足:
クラスを分ければ良いというコメントを頂いて
まあ上記のコードに関しては、その通りなのだけど
ちょっと補足しておきます。
あるテンプレートクラスを修正しているうちに
テンプレートである必要がなくなって
テンプレートじゃなくしたら、上記のエラーに遭遇。
「っええ?テンプレートやめたいだけなのに
いろいろ弄らないとコンパイル通らねえの!?」
というお話。