Тип аргумента шаблона нетипичного типа не может зависеть от параметра шаблона частичной специализации.
ISO C ++ 03 14.5.4 / 9 говорит
AЧастично специализированное нетипичное выражение аргумента не должно включать параметр шаблона частичной специализации, кроме случаев, когда выражение аргумента является простым идентификатором.
template <int I, int J> struct A {};
template <int I> struct A<I+5, I*2> {}; //error
template <int I, int J> struct B {};
template <int I> struct B<I, I> {}; //OK
Итак, что-то вроде этого запрещено template<class T> struct Foo<T,T::Special> {};
, поскольку T::Special
зависит от T
Использование также запрещено.Вы предоставили один аргумент шаблона, но вам нужно предоставить два.