[Issue 4542] [tdpl] TDPL NVI example results in linker error

d-bugmail at puremagic.com d-bugmail at puremagic.com
Thu Sep 8 19:15:35 PDT 2011


http://d.puremagic.com/issues/show_bug.cgi?id=4542



--- Comment #7 from Jonathan M Davis <jmdavisProg at gmx.com> 2011-09-08 19:15:21 PDT ---
(In reply to comment 6)
> Can't the compiler determine this automatically?

No. In order to do that, it would have to know about every single class in the
program that's derived from that class - directly or indirectly. That can't be
known before linking. And by then, the function is already virtual or not. The
compiler can only make a class' member function non-virtual when it can _know_
that no virtual calls to that function will ever be made. And that's can't
generally be known. final guarantees it. I'm not sure that there's any other
case when the compiler can determine it. Best case, there are some situations
where it can know that a particular call doesn't need to be virtual. e.g. In

(new A()).func()

func could be done non-virtually by the compiler if it chose to optimize the
code that way, because it can _know_ the exact type of A and avoid the virtual
call (I don't know if it does). However, you can't even do that sort of
optimization very often if you don't do flow analysis, which dmd typically
avoids.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------


More information about the Digitalmars-d-bugs mailing list