para embellecer un poco más: lo que normalmente se llama duck typing, y la conclusión es que le permite escribir "patrones de clase" de los cuales algunos funciones miembros podrán aplicar cuando se crea una instancia de un tipo de plantilla, otra los miembros pueden postularse cuando se crean instancias con un segundo tipo de plantilla, y al requerir solo los que usted realmente llama para compilar, puede escribir mucho menos código para operaciones que terminan siendo comunes.
Al no requerir la compilación de todas las funciones miembro, se obtienen todas las sutilezas de la comprobación de tipo estático de las funciones que realmente son compiladas.
Por ejemplo, imagina que tenía:
template <typename E>
class myContainer {
// Imagine that constructors, setup functions, etc. were here
void sort(); // this function might make sense only if E has an operator< defined
E max(); // compute the max element, again only makes sense with a operator<
E getElement(int i); // return the ith element
E transmogrify(); // perhaps this operation only makes sense on vectors
};
entonces usted tiene
// sort() and getElement() makes total sense on this, but not transmogrify()
myContainer<int> mci;
// sort and max might not be needed, but getElement() and transmogrify() might
myContainer<vector<double>> mcvd;
Qué compilador usó? –