template <typename T, typename U> class hoge
{
public:
void show(void) { cout << "ノーマル <" << typeid(T).name() << ", " << typeid(U).name() << ">" << endl; };
};
template<> void hoge<char, int>::show(void) { cout << "特殊 <" << typeid(T).name() << ", " << typeid(U).name() << ">" << endl; }

int main()
{
hoge<char, char> char_char; char_char.show();
hoge<char, int> char_int; char_int.show();
hoge<int, char> int_char; int_char.show();
hoge<int, int> int_int; int_int.show();
cin.get();
return 0;
}

きちんと文法守れば何も問題無いはずだが。