C++嵌套类的成员是否属于外围类模板的成员?标准条款疑问
结论
是的,嵌套类B的成员类C确实属于主类模板A的成员范畴,符合[temp.dep.type#1.2]条款的适用条件。
依据说明
- 标准中「主类模板的成员」的覆盖范围远不止直接定义在主类模板体内的成员:所有从属(绑定)于主类模板模板参数的嵌套类型、嵌套类型的成员、成员的成员,都属于主类模板的成员。本示例中
A<T>::B::C没有独立的模板参数,其定义完全依附于主模板A的参数T,自然属于A的成员。 - 回到示例的名称解析逻辑:
在A<T>::B::C的定义中用到的A<T>,符合[temp.dep.type#1.2]对「当前实例化」的判定规则,属于非依赖类型,其成员查找会在定义点就完成。因为A<T>是C的公开基类,基类的typedef int M会被优先查找到,所以代码中M m的M明确指代A<T>::M,而非外围作用域的B::M,示例标注的OK成立。
内容的提问来源于stack exchange,提问作者xmh0511
相关产品推荐
相关产品推荐

