У меня есть шаблон класса с некоторыми псевдонимами шаблона.Поскольку я использую только закрытый набор типов в шаблоне, я хотел бы специализировать и явно создавать их экземпляры.В настоящее время у меня есть это:
// Header
template <typename T>
struct Literal {
Literal(std::string_view);
};
using StringLiteral = Literal<std::string>;
// Source:
StringLiteral::Literal(std::string_view){/*...*/}
Я предполагал, что мне понадобится extern template StringLiteral
или что-то, но это, кажется, работает.Я могу использовать StringLiteral
в совершенно ином TU, чем тот, в котором живет специализация.
Мой вопрос, это законно?И если да, то почему не требуется явная реализация?Мы не могли неявно создать экземпляр шаблона в другом TU, поскольку у нас нет определения для конструктора.
Кроме того, использование псевдонима шаблона для специализации мне кажется странным, верно ли это?