可能的重复:
typedef 和不完整的类型
如果我做
class foo;
typedef list<foo> myList;
typedef myList::iterator myListIter;
class foo{};
如果代码编译,那么我可以假设程序在运行时不会导致未定义的行为吗?我相信代码应该可以工作,因为如果模板实例化尝试使用模板参数类型来实例化该类型的对象,编译器会在编译时捕获它。如果模板代码将它用作指针或引用,那么它肯定会在定义类型时获得定义;否则第一次使用 myList 会导致编译器错误。
请让我知道你的想法。请注意,这里的问题是关于代码何时编译的,而不是关于在模板实例化中使用不完整类型的标准。