考虑以下代码:
#include <iostream>
template<typename T>
T n;
int main()
{
n<int> = 42;
std::cout << n<int> << std::endl;
}
这段代码可以使用g++5.1编译和链接,并且显示42
。然而,clang++ 无法链接它:
undefined reference to n<int>
如果我像这样初始化模板变量
template<typename T> T n{};
那么 clang++ 也链接它。
有什么想法吗?clang++在链接程序时是否“正确”失败?如果我初始化模板变量,为什么它可以工作?
据我所知,模板变量只是围绕静态成员的模板包装器的语法糖,因此n<int> = 42
实际上是特化了int
实例。在我看来,代码应该可以链接。