Betrachten Sie den Code unten:Linker-Fehler mit variabler Vorlagen
#include <iostream>
template<typename T>
T n;
int main()
{
n<int> = 42;
std::cout << n<int> << std::endl;
}
Es compiles and links with g++5.1, und es zeigt 42
. Allerdings Klirren ++ fails to link it:
undefined reference to n <int>
Wenn ich initialisieren die Template-Variable wie
template<typename T> T n{};
dann clang++ links it too.
Irgendeine Idee was ist los? Ist "C++" korrekt, wenn das Programm nicht verlinkt wird? Und warum funktioniert es, wenn ich die Template-Variable initialisiere?
Soweit ich weiß, Template-Variablen sind nur syntaktische Zucker für Vorlagen-Wrapper um statische Mitglieder, so ist effektiv spezialisiert auf die int
Instanz. IMO sollte der Code verlinken.
Sieht aus wie https://llvm.org/bugs/show_bug.cgi?id=22825 – dyp
@dyp Ich stimme zu, das sieht nach dem Problem aus. – JKor
Das ist in der Tat. @dyp posten eine _answer_ kein Kommentar !! –