On Friday, October 19, 2012 23:22:26 monarch_dodra wrote: > According to TDPL, this should be legal. In particular, there is > an entire section about it regarding NVI. > > No idea what it going on, but I'm curious for answers.
For interfaces, where it's doing something to specifically enable NVI. It never says that for classes. It's been discussed a number of times before, and I think that it's fairly clear that Walter has no intention of changing it. Regardless, it would actually be a _huge_ problem for private to be virtual, and it's completely unnecessary for NVI (protected does the job just fine). If private were virtual, then it that would kill inlining and any other optimization relying on knowing the body of the function or anything else which gets affected by a function being virtual - including the cost of the vtable lookup. You would be forced to mark all private functions as final to fix this, which most people won't do, which would lead to performance hits everywhere where classes are used. Classes in D would be less performant for essentially _zero_ gain. If you want virtual but don't want the function to be public, then use protected. - Jonathan M Davis
