Desidero inoltrare i modelli di variabile dichiarati in un file di intestazione e quindi disporre delle istanze effettive in un'unità di compilazione separata.Impossibile dichiarare una variabile modello senza definirla
Sono stato indotto a credere che i modelli di variabili C++ 14 funzionassero molto come le variabili di classe statica. Purtroppo questo sembra non essere il caso, e mi impedisce di inoltrare i miei template variabili.
template <typename T> struct Variable {
static int variable;
};
template <typename T>
extern int variable;
int main() {
(void) Variable<char>::variable;
// (void) variable<char>; // <-- line 10
}
template <> int Variable<char>::variable = 42;
template <> int variable<char> = 23;
L'esempio di codice sopra compila ed esegue come-è in GCC. Ma la riga 10 non commentante fornisce un errore in fase di compilazione:
specialization of 'variable<char>' after instantiation
template <> int variable<char> = 23;
^
Clang rifiuta entrambi. Questo è NDR malformato. L'istanziazione * esplicita * e la specializzazione * esplicita * sono animali completamente diversi. –
Va bene - così come * do * realizzo ciò che voglio - ovvero dichiarare la variabile in un'intestazione ma definirla in un file .cpp? –