为什么无法访问使用 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 错误。
考虑以下(人工)示例:
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 错误。