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