Re: problem: private inheritance. How to explain it in terms of C++
rules?
* Marcel M?ller:
Michal wrote:
hallo group members, I wonder if the example below is consistent with a
C++ rules:
It is.
class A {
};
class B: private A {
};
int main(int argc, char *argv[])
{
B *b = new B;
A *a = (A*)b;
A *c = b; /* produces follwowing error:
p5.cpp: In function "int main(int, char**)":
p5.cpp:15: error: "A" is an inaccessible base of "B"
What is the reason for it???
Neither the implicit nor the explicit conversion to a private base class
is allowed outside the class. Otherwise, the base would no longer be
private.
Your cast to (A*) is a reinterpret cast
No, it's a very special case, ?5.4/7, that a C style cast can convert to a
pointer or reference to an inaccessible but unambigious base class as if
static_cast was used for an accessible base (it can also do more such stuff).
So since the cast here would have been a static_cast if the base was accessible
(because static_cast comes before reinterpret_cast in the list of possibilities,
it goes const_cast, static_cast, static_cast+const_cast, reinterpret_cast,
reinterpret_cast+const_cast), it is therefore a static_cast.
And technically utterly safe, although -- as illustrated here -- not very
safe against being misunderstood or misidentified, even by the original author.
and will badly fail in
conjunction with multiple inheritance, at least.
Depends.
Cheers & hth.,
- Alf