我有以下类层次结构:
template <typename T>
class base
{
public:
void f() {}
};
class class_a : public base<class_a> {};
class class_b : public base<class_b>,
public class_a
{
using base<class_b>::f;
};
int main()
{
class_b b;
b.f();
return 0;
}
Comeu 和 Intel C++ v11 声称一切都很好,但是 GCC (4.4.1) 和 VC++ 2008 似乎抱怨 ( http://codepad.org/KQPDsqSp ),例如:
g++ -pedantic -Wall -o test test.cpp
test.cpp: In function ‘int main()’:
test.cpp:5: error: ‘void base<T>::f() [with T = class_b]’ is inaccessible
test.cpp:14: error: within this context
我相信代码的格式是正确的,但是我可能是错的,我希望 SO C++ 社区的某个人可以对这个问题提供一些见解。
注意:在 class_b 中的 using 指令之前添加“public”,解决了 gcc 和 VS 的问题。应用 using 指令的类的访问器部分是否应该覆盖基类的派生模式(公共、私有)?
简而言之就是这个
- 编译器错误 - 如果是 GCC、VS 或 Comeu、Intel 哪个编译器
- 上面的代码格式正确吗?
- 调用 using 指令的访问器部分是否覆盖了基类的派生模式?