重複の可能性:
typedef と不完全な型
私が行った場合
class foo;
typedef list<foo> myList;
typedef myList::iterator myListIter;
class foo{};
そして、コードがコンパイルされた場合、プログラムが実行時に未定義の動作を引き起こさないと仮定できますか? テンプレートのインスタンス化がテンプレート引数の型を使用してその型のオブジェクトをインスタンス化しようとした場合、コンパイラはコンパイル時にそれをキャッチしたため、コードは機能するはずです。テンプレートコードがそれをポインターまたは参照として使用している場合、型が定義されたときに後で定義を取得することは間違いありません。そうしないと、最初に myList を使用したときにコンパイラ エラーが発生します。
考えを教えてください。ここでの質問は、コードがいつコンパイルされるかに関するものであり、テンプレートのインスタンス化での不完全な型の使用について標準が述べているものではないことに注意してください。