2010-01-20 29 views
13

Ecco un altro errore di compilazione VC9 rispetto a GCC 4.2. Il seguente codice compila bene con VC9 (Microsoft Visual C++ 2008 SP1), ma non con GCC 4.2 su Mac:Come correggere 'espressione primaria attesa prima' nel codice modello C++?

struct C 
{ 
    template< typename T > 
    static bool big() { return sizeof(T) > 8; } 
}; 

template< typename X > 
struct UseBig 
{ 
    static bool test() 
    { 
     return X::big<char>(); // ERROR: expected primary-expression 
    }       // before 'char' 
}; 

int main() 
{ 
    C::big<char>(); 
    UseBig<C>::test(); 
    return 0; 
} 

Tutte le idee come posso risolvere questo problema?

+1

Questo succede ogni tanto perché è difficile cercarlo. Per la cronaca, GCC lo usava per compilare ciò quando Visual Studio no. GCC ha rimosso questo comportamento perché ha causato un sacco di graffi alla testa e non era conforme agli standard. –

risposta

34

che dovrebbero essere

return X::template big<char>(); 

nomi dipendenti da modelli sono presi a non essere tipi se non si specifica che sono via typename e presume che non essere modelli se non specificato tramite template .

+0

Ha funzionato, grazie! – jwfearn

Problemi correlati