struct Bar {
enum { Special = 4 };
};
template struct Foo {};
template struct Foo {};
U
The type of a non-type template argument cannot depend on a template parameter of a partial specialization.
ISO C++03 14.5.4/9 says
A partially specialized non-type argument expression shall not involve a template parameter of the partial specialization except when the argument expression is a simple identifier.
template struct A {};
template struct A {}; //error
template struct B {};
template struct B {}; //OK
So something like this is illegal template because T::Special depends on T
The usage is also illegal. You have provided one template argument but you need to provide two.