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