What kind of polymorphism is considered more common / idiomatic in C++?
C++ being a [value oriented language][1] doesn't seem to support OO (and thus subtyping polymorphism) very well. As for parametric polymorphism, lack of type inference on type parameters and verbose syntax of templates makes it pretty damn painful.

Please note that the only languages I know moderately well are Java (subtyping polymorphism) and Haskell (parametric polymorphism). Both languages are leaned towards one kind of polymorphism. However C++ supports both (to some extent), but both suck in C++. So when programming in C++ I have pretty hard time in deciding what way I should exactly code.

So my question is what kind of polymorphism is considered more common / idiomatic in C++? 

  [1]: http://blog.barrkel.com/2006/08/programming-language-design-philosophy.html
What kind of polymorphism is considered more common / idiomatic in C++?
===

C++ being a [value oriented language][1] doesn't seem to support OO (and thus subtyping polymorphism) very well. As for parametric polymorphism, lack of type inference on type parameters and verbose syntax of templates makes it pretty damn painful.

Please note that the only languages I know moderately well are Java (subtyping polymorphism) and Haskell (parametric polymorphism). Both languages are leaned towards one kind of polymorphism. However C++ supports both (to some extent), but both suck in C++. So when programming in C++ I have pretty hard time in deciding what way I should exactly code.

So my question is what kind of polymorphism is considered more common / idiomatic in C++? 

  [1]: http://blog.barrkel.com/2006/08/programming-language-design-philosophy.html