Templates are mostly problems at compile time, but it's also possible to have subtle issues with complicated template specializations where it doesn't call the function you expect. So complicated usages are discouraged, BUT simple ones that give code reuse with strong typing are great advantages over c in most cases.
I think dynamic dispatch would be more permissible than you might think. You end up doing it in c manually in complicated code bases, might as well let the compiler dou the heavy lifting.