我可以使用不完整类型列表的迭代器吗?

gaa*_*kam 5 c++ containers incomplete-type c++17

struct some_struct
{
    std::list<some_struct> nested;
};
Run Code Online (Sandbox Code Playgroud)

IIUC过去会调用UB,因为标准容器只需要用完整类型进行实例化.

但是,现在我们已经从这里取得了进展,根据http://open-std.org/JTC1/SC22/WG21/docs/papers/2015/n4510.html我们可以实例化std::list,std::forward_list并且std::vector类型不完整,所以上面的代码已验证.

但是,但是,我可以进一步写下来:

struct some_struct
{
    std::list<some_struct>::iterator it;
};
Run Code Online (Sandbox Code Playgroud)

实例化容器并使用其成员类型是不一样的......例如,我被告知我可以实例化具有不完整类型的boost容器,但value_type除非模板参数是完整类型,否则我可能不会使用它们.所以我不确定上面的代码片段是否有效.

是吗?

T.C*_*.C. 8

那篇论文说

Tlist引用专业化的任何成员之前应完成.