Неоднозначность частичной специализации шаблона

Я не могу понять, почему утверждение в main является двусмысленным.

template struct X
{ void f() { cout << "Primary template" << endl; } };


template struct X
{void f() { cout << "Partial specialization 1" << endl;}};

template struct X
{void f() { cout << "Partial specialization 2" << endl;}};

template struct X
{void f() { cout << "Partial specialization 3" << endl;}};

template struct X
{void f() { cout << "Partial specialization 4" << endl;}};

 int main()
 {
   X f;
 }

Разве X не является наиболее специализированным шаблоном? Это пример из http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8l.doc%2Flanguage%2Fref%2Fpartial_specialization.htm

13
задан Tamer Shlash 26 December 2011 в 16:19
поделиться