2010-04-14 13 views
9

Próbuję dowiedzieć się, czyg ++ -fsyntax tylko testy

g++ -fsyntax-only 

nie tylko sprawdzanie składni czy też szablony rozszerza też jednostka.

Zatem pytam przepełnienie stosu o pomoc:

Czy istnieje sposób napisać program tak, że składniowo jest ważna, ale gdy ekspansja szablonu odbywa, wystąpi błąd?

Dzięki!

Odpowiedz

11

Czy istnieje sposób napisać program tak, że składniowo jest ważna, ale gdy ekspansja szablonu odbywa, wystąpi błąd?

zależy od tego czy twoja definicja składniowo ważnego jest g++ „s -fsyntax-only lub nie.

Poniższy prosty program testowy ilustruje to i, moim zdaniem, odpowiada na pytanie:

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

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

Próba budowy:

$ 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 

Więc tak, -fsyntax-onlyma wykonać szablon ekspansję .

+3

Język angielski nie zawiera słów, aby opisać, jak niesamowite/niesamowite jesteś. (Próbowałem dowiedzieć się, dlaczego czasy kompilacji są tak długie, i najwyraźniej nie jest to rozszerzenie szablonów.) – anon

+0

@on: co zajmuje najwięcej czasu podczas kompilacji to optymalizacja – HighCommander4