变量模板导致链接错误

11
考虑以下代码:
#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实例。在我看来,代码应该可以链接。


7
看起来像是 https://llvm.org/bugs/show_bug.cgi?id=22825。 - dyp
@dyp 我同意,那看起来就是问题所在。 - JKor
2
确实是这样。@dyp 发布一个“答案”,而不是评论!! - Lightness Races in Orbit
1个回答

6

这是clang++#22825的一个错误。该错误报告已于2015年3月6日提交,但尚未修复。Richard Smith认为此定义被错误地仅视为前置声明。


抱歉,我没有关于这个错误的更多信息。我可能稍后有时间查看clang源代码。 - dyp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接