typedef作为基类没有在nested-name-specifier中查找

时间:2015-04-02 10:46:19

标签: c++ standards

在访问基类成员时,为什么我需要在以下代码中指定我的命名空间,我感到有点困惑。

在阅读标准之后,我的理解是我在.运算符后使用的限定名称应该看::类范围内Derived左侧的嵌套名称说明符。 为什么找不到BaseTypeDef但找不到Base

由于

(我在GCC 4.4.7和GCC 4.9.2上的行为相同。)

namespace ns {
  struct Base {
    int a;
  };
  typedef Base BaseTypeDef;
  struct Derived : BaseTypeDef { };
}

int main()
{
  ns::Derived d;
  d.ns::BaseTypeDef::a = 0; // ok
  d.Base::a = 0;            // ok
  d.BaseTypeDef::a = 0;     // error: use of undeclared identifier 'BaseTypeDef'
  return 0;
}    

0 个答案:

没有答案