C++ 標準には次のように記載されています。
クラス テンプレートのメンバーまたは名前空間スコープに表示されるメンバー テンプレートの明示的な特殊化宣言では、メンバー テンプレートとその外側のクラス テンプレートの一部は、特殊化されていないままになる場合があります。囲んでいるクラス テンプレートも明示的に特殊化されていません。(C++11 以降では 14.7.3/16、古い標準では 14.7.3/18)
これは、次のことができないことを意味します。
template<typename T>
class foo {
template<typename U>
void bar();
};
template<typename T>
template<>
void foo<T>::bar<some_type>(){
}
これに関連する問題を抱えている人々の質問がすでに複数あり、多かれ少なかれ「標準はそう言っている」と答えています。私が本当に理解していないのは、この制限が存在する理由です。