At some point you’re going to run into virtual tables among other overhead.
At some point you’re going to run into virtual tables among other overhead.
Example: Callbacks in C are always virtual, whereas in C++ you can take the callback as a template parameter.
Not distinguishing between "virtual" or "function pointer" or any other names for the same concept (dynamic call address).
You might get a failure to inline and get direct calls to fixed function addresses in the latter case, but never virtual calls (unless the member functions themselves are virtual, of course). The former case relies on the compiler seeing through the entire call chain and being able to prove that the function pointers don't change.
The idea that virtual calls can bite you in C++ but not in C is clearly nonsense, as in any situation where you'd need a virtual function in C++, you'd need a function pointer in C, and virtual functions don't happen accidentally as you have to explicitly write "virtual."
C++ templates provide the mechanism to really inline complex code, run it at compile time and just place the result into the binary, instead of clunky preprocessor macros.
A quick glance at Moe, I see inheritance in something as fundamental as buffers.