Разгледайте кода по-долу:
#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
. IMO, кодът трябва да има връзка.