virtual inheritance. Regular old inheritance does not need or benefit from devirtualization. This is why the CRTP exists.
virtual inheritance. Regular old inheritance does not need or benefit from devirtualization. This is why the CRTP exists.
What you're talking about is dynamic dispatch
CRTP does not exist for that. CRTP was one of the many happy accidents in template metaprogramming that happened to be discovered when doing recursive templates.
Also, you've missed the whole point. CRTP is a way to rearchitect your code to avoid dereferencing pointers to virtual members in inheritance. The whole point is that with final you do not need to pull tricks: just tell the compiler that you don't want the class to be inherited, and the compiler picks up from there and does everything for you.
Please read my post. That's not my claim. I think I was very clear.