2

我有一个带有一些模板别名的类模板。由于我只在模板上使用一组封闭的类型,我想专门化并显式实例化它们。我目前有这个:

// 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中使用。

我的问题是,这合法吗?如果是这样,为什么不需要显式实例化?我们无法在另一个 TU 中隐式实例化模板,因为我们没有构造函数的定义。

此外,使用模板别名进行专业化对我来说似乎很奇怪,对吗?

4

0 回答 0