请看下面的代码
struct A { using type = int; };
struct B : private A {};
struct C : B { using base_type = A; };
所有 gcc 6.1、clang 3.8 和 msvc 2015 update 3 都拒绝编译它,因为A它不是内部的可访问名称,C因为A它是B. 似乎 gcc 认为Ainusing base_type = A指的是A. msvc 和 clang 似乎没有。
也许编译错误是由于继承触发的名称注入(因为修改using base_type = A为using base_type = ::A使所有编译器都能正常工作),但我想知道这个奇怪的错误是否是标准所说的。
更具体地说,
- 据我了解, not like
A::type只是A一个类名(尽管 gcc 将其误解为函数名),它被引入Cnot insideAnorB。为什么这个名字被认为是私有的B? - 这个编译错误应该被认为是一个错误,还是标准规范的边缘情况?