<div class="gmail_quote">On 18 March 2012 04:47, F i L <span dir="ltr"><<a href="mailto:witte2008@gmail.com">witte2008@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I'm a bit confused. Reading through the virtual function's docs (<a href="http://dlang.org/function.html#virtual-functions" target="_blank">http://dlang.org/function.<u></u>html#virtual-functions</a>) it says:<br>

<br>
"All non-static non-private non-template member functions are virtual. This may sound inefficient, but since the D compiler knows all of the class hierarchy when generating code, all functions that are not overridden can be optimized to be non-virtual."<br>

<br>
So if all functions are automatically optimized to non-virtual where applicable, then the "final" keyword is for conceptual access limitation only. This makes a lot of sense to me. Is there something I'm not getting that makes you want an explicit "virtual" keyword?<br>

</blockquote></div><br><div>It's not dependable. Virtually everything meets those criteria and will be virtual, but I want to be confident that NOTHING is EVER virtual, unless I absolutely say so.</div><div>D knows nothing about the class hierarchy when generating code, I don't know how it can make that claim? Anything that's not private can be extended by another module, and only the linker could ever know out about that.</div>
<div>Aside from that, I want a compile error if someone tries to randomly override stuff. virtuals are a heinous crime, and should only be used explicitly. It should not be possible for someone to accidentally create a virtual.</div>