consideri il codice qui sotto:errore Linker con i modelli variabili
#include <iostream>
template<typename T>
T n;
int main()
{
n<int> = 42;
std::cout << n<int> << std::endl;
}
E compiles and links with g++5.1, e visualizza 42
. Tuttavia, clang ++ fails to link it:
undefined reference to n <int>
Se io inizializzare la variabile di modello come
template<typename T> T n{};
poi clang++ links it too.
Qualche idea su cosa sta succedendo? Clang ++ "corretto" non riesce a collegare il programma? E perché funziona se inizializzo la variabile del template?
Per quanto ne so, le variabili di modello sono solo zucchero sintattico per i wrapper di modello attorno ai membri statici, quindi n<int> = 42
sta effettivamente specializzando l'istanza int
. IMO, il codice dovrebbe linkare.
Sembra https://llvm.org/bugs/show_bug.cgi?id=22825 – dyp
@ dyp Sono d'accordo, sembra il problema. – JKor
Questo è davvero quello. @ dyp post un _answer_ non un commento !! –