Я не вижу в вашем примере ничего похожего на частичную специализацию. Частичная специализация - это специализация, которая указывает точные типы для некоторых параметров базового шаблона, но оставляет другие открытыми. Например:
template <class T, class U>
struct my_template {
// the base template where both T and U are generic
};
template <class T>
struct my_template<int> {
// A partial specialization where T is still generic, but U == int
};
Для поддержки частичной специализации базовый шаблон должен иметь как минимум два параметра шаблона (позвоните по номеру N). Частично специализированный шаблон может иметь параметры шаблона 1..N-1. Частичная специализация должна быть расположена там, где компилятор уже «видел» базовый шаблон, прежде чем пытаться скомпилировать частичную специализацию. Частичная специализация написана как совершенно отдельный шаблон от базового шаблона (хотя, конечно, базовый шаблон и все специализации должны иметь одно и то же имя).