链接器错误与变量模板

vso*_*tco 11 c++ linker templates c++14 template-variables

请考虑以下代码:

#include <iostream>

template<typename T>
T n;

int main()
{
    n<int> = 42;
    std::cout << n<int> << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

编译并与g ++ 5.1链接,并显示42.但是,clang ++ 无法链接它:

对n <int>的未定义引用

如果我初始化模板变量,如

template<typename T> T n{};
Run Code Online (Sandbox Code Playgroud)

然后clang ++也链接它.

知道发生了什么事吗?如果没有链接程序,clang ++"是否正确"?如果我初始化模板变量,为什么它可以工作?

据我所知,模板变量只是围绕静态成员的模板包装器的语法糖,因此n<int> = 42有效地专门化了int实例.IMO,代码应链接.

dyp*_*dyp 6

这是clang ++ #22825中的一个错误.错误报告已于2015-03-06提交,并且该错误尚未修复.理查德史密斯认为这个定义仅被视为前向声明.