NavigationExperimental
IIUC过去会调用UB,因为标准容器只需要用完整类型进行实例化。
但是,现在我们已从此进展,根据http://open-std.org/JTC1/SC22/WG21/docs/papers/2015/n4510.html,我们可以使用不完整类型实例化struct some_struct
{
std::list<some_struct> nested;
};
,std::list
和std::forward_list
,因此上述代码有效
但是,但是,我可以进一步写下来:
std::vector
实例化容器并使用其成员类型是不一样的...例如,我被告知我可以实例化具有不完整类型的boost容器,但我可能不会使用他们的struct some_struct
{
std::list<some_struct>::iterator it;
};
,除非模板参数是一个完整的类型。所以我不确定上面的代码段是否有效。
答案 0 :(得分:8)
那篇论文说
T
应在所得专业化的任何成员之前完成 引用了list
。