2015-06-17 10 views
11

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.

+7

Sembra https://llvm.org/bugs/show_bug.cgi?id=22825 – dyp

+0

@ dyp Sono d'accordo, sembra il problema. – JKor

+2

Questo è davvero quello. @ dyp post un _answer_ non un commento !! –

risposta

6

Questo è un bug in clang ++ #22825. La segnalazione di bug è stata depositata il 2015-03-06 e il bug non è stato ancora corretto. Richard Smith suppone che questa definizione venga erroneamente trattata solo come una forward-declaration.

+0

Siamo spiacenti, ma non ho ulteriori informazioni su questo bug. Potrei avere un po 'di tempo dopo per esaminare le fonti clang. – dyp