2010-04-14 32 views
9

Tôi đang cố gắng tìm hiểu xemg ++ -fsyntax chỉ đơn vị kiểm tra

g++ -fsyntax-only 

chỉ thực hiện kiểm tra cú pháp hoặc nếu nó mở rộng mẫu quá.

Vì vậy, tôi hỏi stack overflow để được giúp đỡ:

Có cách nào để viết một chương trình để cú pháp đó là hợp lệ, nhưng khi mở rộng mẫu được thực hiện, một lỗi xảy ra?

Cảm ơn!

Trả lời

11

Có cách nào để viết chương trình sao cho cú pháp đó hợp lệ, nhưng khi mở rộng mẫu được thực hiện, có xảy ra lỗi không?

Phụ thuộc vào việc định nghĩa lại cú pháp hợp lệg++ 's -fsyntax-only hay không.

sau Các chương trình thử nghiệm đơn giản minh họa điều này, và tôi tin rằng, câu trả lời câu hỏi của bạn:

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

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

Cố gắng xây dựng:

$ 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 

Vì vậy, có, -fsyntax-onlykhông thực hiện mẫu mở rộng .

+3

Ngôn ngữ tiếng Anh không chứa các từ để mô tả mức độ tuyệt vời/tuyệt vời của bạn. (Tôi đã cố gắng tìm ra lý do tại sao thời gian biên dịch quá dài; và rõ ràng nó không phải là mở rộng mẫu.) – anon

+0

@anon: những gì mất nhiều thời gian nhất trong quá trình biên dịch là tối ưu hóa – HighCommander4