考虑下面的代码:
#include <iostream>
template<typename T>
T n;
int main()
{
n<int> = 42;
std::cout << n<int> << std::endl;
}
它使用 g++5.1 编译和链接,并显示42
. 但是,clang++无法链接它:
对 n<int> 的未定义引用
如果我像这样初始化模板变量
template<typename T> T n{};
然后clang++ 也链接它。
知道发生了什么吗?clang++ 无法链接程序是否“正确”?如果我初始化模板变量,为什么它会起作用?
据我所知,模板变量只是围绕静态成员的模板包装器的语法糖,因此n<int> = 42
有效地专门化了int
实例。IMO,代码应该链接。