かなり初歩的な質問ですいませんが教えてください。
特別バージョンに指定するtemplate<>ですが、どうしてこれを書く必要があるのかわかりません。

template<typename T>
class C {
  // ...
};

//template<>
class C<int> {
  // ...
};

下が上の特別バージョンであることをコンパイラは判断できないんですか?