On Wed, 12 Mar 2014 09:15:14 -0400, Michel Fortin
<michel.for...@michelf.ca> wrote:
On 2014-03-12 12:48:59 +0000, "Steven Schveighoffer"
<schvei...@yahoo.com> said:
On Wed, 12 Mar 2014 08:32:14 -0400, Michel Fortin
<michel.for...@michelf.ca> wrote:
I'll add another argument to the mix.
Currently, you can't have private/package functions that are
virtual, contrary to what TDPL says.
To make things coherent we could change private function so they
become virtual by default. You might be able to see the problem with
this option: making private function virtual by default is likely to
add many performance regressions in existing code, silently.
Private virtual functions make 0 sense. A private function cannot be
accessed by a derived class. Who gets to access a overriden virtual
function? The base class only? If I'm writing a function, I certainly
should be able to access it, no? Even if you want to restrict my
access, you cannot, I'm in control of that code!
You're mixing C++ private with D private. Private just means the symbol
is only accessible within the same module. You can have a whole class
hierarchy in a module if you want, and thus could override private
functions assuming they could be virtual.
OK, I can see that being useful. You are right, I was thinking C++ private.
So essentially, a virtual private function can only be overridden in
classes defined in the same module. What happens when you do it in a
separate module, an error? What if you want to define that function name,
but it's taken by the base class, what happens?
-Steve