【问题标题】: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&lt;int&gt; = 42 有效地专门化了int 实例。 IMO,代码应该链接。

【问题讨论】:

标签: c++ templates linker c++14 template-variables


【解决方案1】:

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

【讨论】:

  • 抱歉,我没有关于这个错误的更多信息。稍后我可能有时间研究一下 clang 的来源。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-07
  • 2011-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-19
相关资源
最近更新 更多