2010-04-14 7 views
9

Estoy tratando de averiguar sig ++ -fsyntax sólo unidad de prueba

g++ -fsyntax-only 

hace única comprobación de sintaxis o si se expande plantillas también.

Por lo tanto, pido desbordamiento de pila en busca de ayuda:

¿Hay una manera de escribir un programa para que sintácticamente es válida, pero cuando se realiza la expansión plantilla, se produce un error?

Gracias!

Respuesta

11

¿Hay alguna manera de escribir un programa para que sintácticamente sea válido, pero cuando se realiza la expansión de la plantilla, se produce un error?

depende de si la definición de sintácticamente válida es g++ 's -fsyntax-only o no.

El siguiente programa de prueba simple ilustra este y, creo, responde a su pregunta:

// test.cpp 
template<bool> struct test; 
template< > struct test<true> { }; 

int main(void) { 
    test<false> t; 
    return 0; 
} 

El intento de construir:

$ g++ /tmp/sa.cpp 
test.cpp: In function `int main()': 
test.cpp:6: error: aggregate `test< false> t' has incomplete type and 
    cannot be defined 

$ g++ -fsyntax-only /tmp/sa.cpp 
test.cpp: In function `int main()': 
test.cpp:6: error: aggregate `test< false> t' has incomplete type and 
    cannot be defined 

Así que sí, -fsyntax-onlyqué realizar la expansión plantilla .

+3

El idioma inglés no contiene palabras para describir lo increíble/increíble que eres. (He estado intentando averiguar por qué los tiempos de compilación son tan largos, y aparentemente no es la expansión de la plantilla.) – anon

+0

@anon: lo que lleva más tiempo durante la compilación es la optimización – HighCommander4