11

考虑下面的代码:

#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,代码应该链接。

4

1 回答 1

6

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

于 2015-06-17T17:43:53.350 回答