次のコードを検討してください。
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 はこのコードを適切にコンパイルし、両方のケースで 2 番目の特殊化を選択します。私にとって、これらの専門分野は同じです。最初の手で2番目の専門化はどのくらい合法ですか?
ちょっと興味がありますが、これについて何か考えはありますか?