Re: Calling inherited protected method fails to compile
* nomad:
(void) b.F(3);
This cast is completely unnecessary.
True, but I like to indicate that I know there's a return value but that I'm
explicitly ignoring it.
For your question about why you get a compilation error, see the FAQ
item titled "What's the meaning of, Warning: Derived::f(char) hides
Base::f(double)?", currently item 23.9, available at e.g. <url:
http://www.parashift.com/c++-faq-lite/strange-inheritance.html#faq-23.9>,
or any mirror.
Well, I checked the FAQ for inheritance issues, but missed that one. If the
compiler had given me a 'derived f(char) hides base::f(double)' error, I'd've
known what was going on.
Yes, I notice that neither MSVC nor g++ produce that warning, which
would have been good.
I'd forgotten about C++'s silly failure to resolve
overloads across scopes.
It's not a failure, it's an intentional design decision.
Either way there are (non-obvious) problems, which means that either
way the behavior is a little counter-intuitive.
The language designer and the committee believed that this design
choice minimized the problems, but unfortunately it's also the most
counter-intuitive, at least judging from Usenet questions about it...
Thanks for the pointer.
You're welcome.
Cheers,
- Alf
--
A: Because it messes up the order in which people normally read text.
Q: Why is it such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?