I have the following class hierarchy:
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 and Intel C++ v11 claim all is well, however GCC (4.4.1) and VC++ 2008 seem to complain ( http://codepad.org/KQPDsqSp ), eg:
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
I believe the code is well formed as it is, however I could be wrong, I'm hoping someone from the SO C++ community could provide some insight into this issue.
Note: Adding "public" before the using directive in class_b, resolves the issue for both gcc and VS. Should the accessor section of the class in which the using directive is applied override the derivation mode (public, private) of the base class?
In short is this
- A compiler error - if so which compiler GCC,VS or Comeu,Intel
- Is the above code well formed?
- Does the accessor section in which a using directive is called override the derivation mode of the base?