Ошибка компоновщика с переменными шаблонами
Рассмотрим код ниже:
#include <iostream>
template<typename T>
T n;
int main()
{
n<int> = 42;
std::cout << n<int> << std::endl;
}
Он компилирует и связывает с g++5.1 и отображает 42
, Однако clang ++ не может связать его:
неопределенная ссылка на n
Если я инициализирую переменную шаблона как
template<typename T> T n{};
тогда clang ++ тоже связывает это.
Есть идеи, что происходит? Является ли clang ++ "правильным" при невозможности связать программу? И почему это работает, если я инициализирую переменную шаблона?
Насколько я знаю, переменные шаблона являются просто синтаксическим сахаром для обертки шаблона вокруг статических членов, поэтому n<int> = 42
эффективно специализируется на int
пример. ИМО, код должен ссылаться.