Ответ 1
Функции-члены шаблона класса создаются только тогда, когда это требуется контекстом, что означает, что вы не увидите никакой ошибки, пока не попытаетесь использовать new_t()
. Связанный раздел из стандарта С++:
§ 14.7.1 Неявное создание экземпляра
[temp.inst]
Если специализация шаблона функции не была явно создана или явно специализирована, специализированная спецификация шаблона неявно создается, когда специализация ссылается в контексте, для которого требуется определение функции. Если не вызов явной специализации шаблона функции или функции-члена явно специализированного шаблона класса, аргумент по умолчанию для шаблона функции или функции-члена шаблона класса неявно создается, когда функция вызывается в контексте, который требует значение аргумента по умолчанию.
[Пример:
template<class T> struct Z { void f(); void g(); }; void h() { Z<int> a; // instantiation of class Z<int> required Z<char>* p; // instantiation of class Z<char> not required Z<double>* q; // instantiation of class Z<double> not required a.f(); // instantiation of Z<int>::f() required p->g(); // instantiation of class Z<char> required, and // instantiation of Z<char>::g() required }
Ничто в этом примере не требует
class Z<double>
,Z<int>::g()
илиZ<char>::f()
неявно инстанцирован. - конец примера]