boi*_*ink 3 c++ c++-standard-library language-lawyer
在“ 带有unordered_map的依赖类型 ”中,观察到在libstdc ++ 中
std::unordered_map<Key, Value>具有类型依赖关系Value(这是意外的),而Value在libc ++和MSVC中没有类型依赖关系。
通常,ISO C ++规范是否完全讨论了容器的类型依赖关系?如果可以,您能指出我相关的部分吗?
类型依赖:我不确定在ISO C ++规范中是否有类型依赖的正式定义,但是出于本文的目的,让我们说一个type A类型依赖于type BA是否不能使用B的前向声明进行编译单独。例:
struct Val; // forward declaration of Val
struct Container {
Val v;
}; // Compile error; Type Val is incomplete. Container has a type dependency on Val
Run Code Online (Sandbox Code Playgroud)
struct Val; // forward declaration of Val
struct Container2 {
Val *v;
}; // Compiles. Container2 does not have type dependency on Val
Run Code Online (Sandbox Code Playgroud)
您可能正在寻找:
[res.on.functions] / 2特别是在以下情况下效果不确定:
...
(2.5)—如果在实例化模板组件时将不完整类型(6.9)用作模板参数,除非该组件特别允许。
在各种标准容器中,[containers]节指定std::forward_list,std::list并且std::vector可以使用不完整的类型实例化。例如
[vector.overview] / 3
T实例化vector分配器是否满足分配器完整性要求(20.5.3.5.1)时,可以使用不完整类型。T必须先完成,然后再vector引用由此产生的专业化的任何成员。
forward_list和的措辞相似list。