为什么无法访问使用 using 声明引入的私有基础 class 的成员模板?

Why is a member template from private base class introduced with a using declaration inaccessible?

考虑以下(人工)示例:

class A {
 public:
  template <typename T>
  class C {};
};

class B : private A {
 public:
  using A::C;
};

int main() {
  B::C<int> c;
}

它使用 GCC 和 Clang 编译成功,但 Visual C++ 2010 给出以下错误:

test.cpp(13): error C2247: 'A::C' not accessible because 'B' uses 'private' to inherit from 'A'

这是 Visual C++ 中的错误还是此代码确实无效?

如果 C 不是模板,代码将在所有编译器上编译。

[namespace.udecl]/p18:

The alias created by the using-declaration has the usual accessibility for a member-declaration.

这里就不多说了。名称 B::C 可公开访问,代码格式正确。只是另一个 MSVC 错误。