考虑下面的代码:
template <class x1, class x2 = int*>
struct CoreTemplate { };
template <class x1, class x2>
struct CoreTemplate<x1*, x2*> { int spec; CoreTemplate() { spec = 1; } };
template <class x>
struct CoreTemplate<x*> { int spec; CoreTemplate() { spec = 3; } };
int main(int argc, char* argv[])
{
CoreTemplate<int*, int*> qq1;
printf("var=%d.\r\n", qq1.spec);
CoreTemplate<int*> qq2;
printf("var=%d.\r\n", qq2.spec);
}
MSVC编译该代码细,并且选择在两种情况下,第二个特。 对我来说,这两个特是相同的。 如何法律是于第一手第二专业化?
只是好奇,这个有什么想法?