Используя силу частичной специализации, это можно сделать во время компиляции:
template<class T, class U>
struct is_same_type
{
static const bool value = false;
};
template<class T>
struct is_same_type<T, T>
{
static const bool value = true;
};
template <class T>
void foo()
{
if (is_same_type<T, int>::value)
{
printf("Template parameter was int\n");
}
else if (is_same_type<T, char>::value)
{
printf("Template parameter was char\n");
}
}
Скомпилировано в моей голове, но, тем не менее, должно работать.