变量模板的链接器错误
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++ "correct" 是否无法 link 程序?如果我初始化模板变量,为什么它会起作用?
据我所知,模板变量只是静态成员周围模板包装器的语法糖,因此 n<int> = 42
有效地专门化了 int
实例。 IMO,代码应该 link.
这是 clang++ #22825 中的错误。错误报告已于 2015-03-06 提交,错误尚未修复。 Richard Smith 假设此定义仅被错误地视为前向声明。
考虑以下代码:
#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++ "correct" 是否无法 link 程序?如果我初始化模板变量,为什么它会起作用?
据我所知,模板变量只是静态成员周围模板包装器的语法糖,因此 n<int> = 42
有效地专门化了 int
实例。 IMO,代码应该 link.
这是 clang++ #22825 中的错误。错误报告已于 2015-03-06 提交,错误尚未修复。 Richard Smith 假设此定义仅被错误地视为前向声明。