给定不完整的类型:
struct S;
接下来的声明如下:
S *p; // ok, pointer to incomplete types is allowed
std::deque<S> l; // error, instantiating std::deque with incomplete type is UB
那么以下声明呢?
std::deque<S> *p; // seems to be UB like the previous case,
// but is it ok if p is not used till S is defined?
std::deque<S*> p; // not really sure about this one
编辑:该问题使用的是
std::list
而不是std::deque
,但这违背了问题的目的,因为std::list
明确地允许使用不完整类型。std::deque
似乎没有这样的权限。
std::list<S*> p;
是可以的。编译器生成一个指向结构体的指针而不需要其布局/大小应该不是问题。 - Tonylist
,因为我认为它没有使用不完整类型的权限。但是eeorika的答案表明它是可以的。那我得编辑一下问题了。 - cigien