2010-01-20 29 views
13

Aquí hay otro problema de compilación de VC9 vs. GCC 4.2. El siguiente código compila bien con VC9 (Microsoft Visual C++ 2008 SP1), pero no con GCC 4.2 en Mac:Cómo reparar el error de la 'expresión primaria esperada antes' en el código de plantilla de 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; 
} 

Alguna idea de cómo puedo solucionar este problema?

+1

Esto aparece cada cierto tiempo porque es difícil buscarlo. Para el registro, GCC solía compilar esto cuando Visual Studio no lo hacía. GCC eliminó este comportamiento porque causó muchos arañazos en la cabeza y no cumplía con los estándares. –

Respuesta

34

eso se debe

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

nombres dependientes a partir de plantillas se toman para no ser tipos a menos que se especifique que son a través de typename y se supone que no ser plantillas menos que se especifique a través de template .

+0

Eso funcionó, gracias! – jwfearn

Cuestiones relacionadas