private method in interface

Jonathan M Davis jmdavisProg at gmx.com
Fri Jun 3 15:07:46 PDT 2011


On 2011-06-03 14:55, Michael Shulman wrote:
> On Fri, Jun 3, 2011 at 1:02 PM, Jonathan M Davis <jmdavisProg at gmx.com> 
wrote:
> > And if you don't know about NVI, having a
> > virtual private function is just plain weird.
> 
> Well, it makes perfect sense to me, once given that in D, 'private'
> allows access from anywhere in the same module, rather than only in
> the defining class. I agree that it's weird and surprising in C++.
> 
> Are 'package' qualified functions also non-virtual? The documentation
> http://d-programming-language.org/function.html#virtual-functions
> says that "all non-static non-private non-template member functions
> are virtual", but I get the same sort of linker errors with 'package'
> functions that I do with 'private' ones, even with code that's all in one
> module.

I would expect package to be virtual, but Walter could have implemented it as 
non-virtual on the theory that if you wanted it to be overridden, it would be 
protected (which would be the normal thing to do when you intend to have a 
derived class override a member function). I'd suggest opening a bug report. 
It wouldn't hurt my feelings any if private and package were both always non-
virtual, but TDPL says that they're both virtual, and the online docs says 
that package is virtual, so either the compiler needs to be fixed or TDPL and 
the docs need to be changed. Regardless, I would have hoped that you'd get an 
error at compile time about overriding a non-virtual function if package is 
non-virtual, so at minimum, the error message needs to be improved. So, open a 
bug report on it, and Walter can make whatever changes are appropriate.

- Jonathan M Davis


More information about the Digitalmars-d-learn mailing list