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