C++ C++;标准指定标准容器的类型依赖关系?

C++ C++;标准指定标准容器的类型依赖关系?,c++,language-lawyer,c++-standard-library,C++,Language Lawyer,C++ Standard Library,在“”中,观察到 std::unordered_map对libstdc++中的Value具有类型依赖性(这是意外的),而对libc++和MSVC中的Value没有类型依赖性 一般来说,ISO C++规范是否讨论容器的类型依赖关系?如果有的话,你能给我指一下相关的部分吗 类型依赖项:我不确定在ISOC++规范中是否有类型依赖的形式定义,但是为了这个帖子,我们假设一个类型A < /> >对代码< B >代码>有类型依赖性,如果不能用B的向前声明来编译。例如: struct Val;//提前申报Va

在“”中,观察到
std::unordered_map
对libstdc++中的
Value
具有类型依赖性(这是意外的),而对libc++和MSVC中的
Value
没有类型依赖性

一般来说,ISO C++规范是否讨论容器的类型依赖关系?如果有的话,你能给我指一下相关的部分吗

<强>类型依赖项:我不确定在ISOC++规范中是否有类型依赖的形式定义,但是为了这个帖子,我们假设一个<代码>类型A < /> >对代码< B >代码>有类型依赖性,如果不能用B的向前声明来编译。例如:

struct Val;//提前申报Val
结构容器{
Val v;
}; // 编译错误;类型Val不完整。容器对Val具有类型依赖关系

您可能正在寻找以下内容:

[res.on.functions]/2特别是在以下情况下,效果未定义:

(2.5)-如果在实例化模板组件时使用不完整类型(6.9)作为模板参数,除非该组件特别允许


在各种标准容器中,[containers]部分指定可以用不完整的类型实例化
std::forward_list
std::list
std::vector
。例如

[vector.overview]/3如果分配器满足分配器完整性要求(20.5.3.5.1),则在实例化
vector
时可使用不完整类型
T
T
应在引用所产生的
vector
专门化的任何成员之前完成


对于
转发列表
列表

也有类似的措辞,这看起来很有希望。我正在深入这件事,会回来的。boost docs感谢您:“最后,C++17在std::vector、std::list和std::forward_list中添加了对不完整类型的支持(有关详细信息,请参阅N4569:标准容器的最小不完整类型支持,第4版),但没有像std::set/map/unordered_set/unordered_map这样的其他容器。”真的很欣赏这个有洞察力的答案类型依赖项是C++中有特殊含义的术语。考虑改写。@ L.F.谢谢你指出这一点。网络搜索并没有让我找到标准的相关部分。如果您能给我指出它(即类型依赖的定义),我将不胜感激。@L.F.听起来不错,我想不出更好的选择。如果你有什么建议,我很高兴听到。
struct Val; // forward declaration of Val
struct Container2 {
  Val *v;
}; // Compiles. Container2 does not have type dependency on Val