AFAIK:
C++ provides three different types of polymorphism.
As to ad-hoc polymorphism, it means function overloading or operator overloading. Check out here:
http://en.wikipedia.org/wiki/Ad-hoc_polymorphism
As to parametric polymorphism, template functions can also be counted in because they don't necessarily take in parameters of FIXED types. For example, one function can sort array of integers and it can also sort array of strings, etc.
http://en.wikipedia.org/wiki/Parametric_polymorphism