变量模板的链接器错误

Linker error with variable templates

考虑以下代码:

#include <iostream>

template<typename T>
T n;

int main()
{
    n<int> = 42;
    std::cout << n<int> << std::endl;
}

compiles and links with g++5.1, and it displays 42. However, clang++ fails to link it:

undefined reference to n<int>

如果我像这样初始化模板变量

template<typename T> T n{};

然后 clang++ links it too

知道发生了什么事吗? clang++ "correct" 是否无法 link 程序?如果我初始化模板变量,为什么它会起作用?

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

这是 clang++ #22825 中的错误。错误报告已于 2015-03-06 提交,错误尚未修复。 Richard Smith 假设此定义仅被错误地视为前向声明。