变量模板的链接器错误
Posted
技术标签:
【中文标题】变量模板的链接器错误【英文标题】:Linker error with variable templates 【发布时间】:2015-09-02 23:29:18 【问题描述】:考虑下面的代码:
#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,它显示42
。但是,clang++fails to link it:
对 n 的未定义引用
如果我像这样初始化模板变量
template<typename T> T n;
然后clang++ links it too。
知道发生了什么吗? clang++ 无法链接程序是否“正确”?如果我初始化模板变量,为什么它会起作用?
据我所知,模板变量只是围绕静态成员的模板包装器的语法糖,因此n<int> = 42
有效地专门化了int
实例。 IMO,代码应该链接。
【问题讨论】:
看起来像llvm.org/bugs/show_bug.cgi?id=22825 @dyp 我同意,这看起来是个问题。 确实是这样。 @dyp 发布 answer 不是评论!! 【参考方案1】:这是 clang++ #22825 中的一个错误。该错误报告已于 2015-03-06 提交,该错误尚未修复。 Richard Smith 认为这个定义只是被错误地视为前向声明。
【讨论】:
抱歉,我没有关于这个错误的更多信息。稍后我可能有时间研究一下 clang 的来源。以上是关于变量模板的链接器错误的主要内容,如果未能解决你的问题,请参考以下文章