Рассмотрим следующий код:значения по умолчанию параметров шаблона в шаблоне класса специализаций
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 компилирует этот код штраф и выбирает вторую специализацию в обоих случаях. Для меня эти специализации идентичны. Насколько законна вторая специализация в первую очередь?
Просто любопытно, любые мысли по этому поводу?
Спасибо за комментарий. Разумный совет. –