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ệ 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-only
không thực hiện mẫu mở rộng .
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
@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