Hola de nuevo.
A menos que quieras evaluar, dentro de la función, el tipo de los argumentos por que existe una operación que no puede ser aplicada a determinado tipo, en ese caso:
Código:
#include<typeinfo.h>
template<typename T>
T fun(T a, T b) {
if(typeid(T) == typeid(int))
return a * b; /* no aplicable al tipo AnsiString */
if(typeid(T) == typeid(AnsiString))
return a + b;
...
}
Saludos.