Tôi không thể thấy tại sao câu lệnh trong chính là mơ hồ.Sự mơ hồ về chuyên môn một phần của mẫu
template<class T, class U, int I> struct X
{ void f() { cout << "Primary template" << endl; } };
template<class T, int I> struct X<T, T*, I>
{void f() { cout << "Partial specialization 1" << endl;}};
template<class T, class U, int I> struct X<T*, U, I>
{void f() { cout << "Partial specialization 2" << endl;}};
template<class T> struct X<int, T*, 10>
{void f() { cout << "Partial specialization 3" << endl;}};
template<class T, class U, int I> struct X<T, U*, I>
{void f() { cout << "Partial specialization 4" << endl;}};
int main()
{
X<int, int*, 10> f;
}
Không phải là X<int, T*, 10>
mẫu chuyên biệt nhất? Đây là ví dụ từ http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8l.doc%2Flanguage%2Fref%2Fpartial_specialization.htm
Lý do được đưa ra bên dưới ví dụ: Trình biên dịch sẽ không cho phép khai báo 'X' f vì nó có thể khớp với cấu trúc mẫu 'X ', mẫu struct 'X ' hoặc mẫu struct 'X ' và không có tuyên bố nào trong số các khai báo này phù hợp hơn so với các khai báo khác. –